~ubuntu-branches/ubuntu/wily/clamav/wily-proposed

« back to all changes in this revision

Viewing changes to libclamav/c++/llvm/utils/buildit/build_llvm

  • Committer: Package Import Robot
  • Author(s): Scott Kitterman, Sebastian Andrzej Siewior, Andreas Cadhalpun, Scott Kitterman, Javier Fernández-Sanguino
  • Date: 2015-01-28 00:25:13 UTC
  • mfrom: (0.48.14 sid)
  • Revision ID: package-import@ubuntu.com-20150128002513-lil2oi74cooy4lzr
Tags: 0.98.6+dfsg-1
[ Sebastian Andrzej Siewior ]
* update "fix-ssize_t-size_t-off_t-printf-modifier", include of misc.h was
  missing but was pulled in via the systemd patch.
* Don't leak return codes from libmspack to clamav API. (Closes: #774686).

[ Andreas Cadhalpun ]
* Add patch to avoid emitting incremental progress messages when not
  outputting to a terminal. (Closes: #767350)
* Update lintian-overrides for unused-file-paragraph-in-dep5-copyright.
* clamav-base.postinst: always chown /var/log/clamav and /var/lib/clamav
  to clamav:clamav, not only on fresh installations. (Closes: #775400)
* Adapt the clamav-daemon and clamav-freshclam logrotate scripts,
  so that they correctly work under systemd.
* Move the PidFile variable from the clamd/freshclam configuration files
  to the init scripts. This makes the init scripts more robust against
  misconfiguration and avoids error messages with systemd. (Closes: #767353)
* debian/copyright: drop files from Files-Excluded only present in github
  tarballs
* Drop Workaround-a-bug-in-libc-on-Hurd.patch, because hurd got fixed.
  (see #752237)
* debian/rules: Remove useless --with-system-tommath --without-included-ltdl
  configure options.

[ Scott Kitterman ]
* Stop stripping llvm when repacking the tarball as the system llvm on some
  releases is too old to use
* New upstream bugfix release
  - Library shared object revisions.
  - Includes a patch from Sebastian Andrzej Siewior making ClamAV pid files
    compatible with systemd.
  - Fix a heap out of bounds condition with crafted Yoda's crypter files.
    This issue was discovered by Felix Groebert of the Google Security Team.
  - Fix a heap out of bounds condition with crafted mew packer files. This
    issue was discovered by Felix Groebert of the Google Security Team.
  - Fix a heap out of bounds condition with crafted upx packer files. This
    issue was discovered by Kevin Szkudlapski of Quarkslab.
  - Fix a heap out of bounds condition with crafted upack packer files. This
    issue was discovered by Sebastian Andrzej Siewior. CVE-2014-9328.
  - Compensate a crash due to incorrect compiler optimization when handling
    crafted petite packer files. This issue was discovered by Sebastian
    Andrzej Siewior.
* Update lintian override for embedded zlib to match new so version

[ Javier Fernández-Sanguino ]
* Updated Spanish Debconf template translation (Closes: #773563)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# LLVM LOCAL file B&I
 
3
 
 
4
set -x
 
5
 
 
6
# Build LLVM the "Apple way".
 
7
# Parameters:
 
8
 
 
9
# The first parameter is a space-separated list of the architectures the
 
10
# compilers will run on. For instance, "ppc i386". If the current machine
 
11
# isn't in the list, it will (effectively) be added.
 
12
HOSTS="$1"
 
13
 
 
14
# The second parameter is a space-separated list of the architectures the
 
15
# compilers will generate code for. If the current machine isn't in the list, a
 
16
# compiler for it will get built anyway, but won't be installed.
 
17
# FIXME: The list of targets is currently hard-coded and TARGETS is not used.
 
18
TARGETS="$2"
 
19
 
 
20
# The third parameter is the path to the compiler sources. There should be a
 
21
# shell script named 'configure' in this directory. This script makes a copy...
 
22
ORIG_SRC_DIR="$3"
 
23
 
 
24
# The fourth parameter is the location where the LLVM will be installed. You can
 
25
# move it once it's built, so this mostly controls the layout of $DEST_DIR.
 
26
DEST_ROOT="$4"
 
27
 
 
28
# The fifth parameter is the place where the compiler will be copied once it's
 
29
# built.
 
30
DEST_DIR="$5"
 
31
 
 
32
# The sixth parameter is a directory in which to place information (like
 
33
# unstripped executables and generated source files) helpful in debugging the
 
34
# resulting compiler.
 
35
SYM_DIR="$6"
 
36
 
 
37
# The seventh parameter is a yes/no that indicates whether assertions should be
 
38
# enabled in the LLVM libs/tools.
 
39
LLVM_ASSERTIONS="$7"
 
40
 
 
41
# The eighth parameter is a yes/no that indicates whether this is an optimized
 
42
# build.
 
43
LLVM_OPTIMIZED="$8"
 
44
 
 
45
# The ninth parameter is a yes/no that indicates whether libLTO.dylib
 
46
# should be installed.
 
47
INSTALL_LIBLTO="$9"
 
48
 
 
49
# A yes/no parameter that controls whether to cross-build for an ARM host.
 
50
ARM_HOSTED_BUILD="${10}"
 
51
 
 
52
# A yes/no parameter that controls whether to cross-build for the iOS simulator
 
53
IOS_SIM_BUILD="${11}"
 
54
 
 
55
# The version number of the submission, e.g. 1007.
 
56
LLVM_SUBMIT_VERSION="${12}"
 
57
 
 
58
# The subversion number of the submission, e.g. 03.
 
59
LLVM_SUBMIT_SUBVERSION="${13}"
 
60
 
 
61
# The current working directory is where the build will happen. It may already
 
62
# contain a partial result of an interrupted build, in which case this script
 
63
# will continue where it left off.
 
64
DIR=`pwd`
 
65
 
 
66
DARWIN_VERS=`uname -r | sed 's/\..*//'`
 
67
echo DARWIN_VERS = $DARWIN_VERS
 
68
 
 
69
################################################################################
 
70
# Run the build.
 
71
 
 
72
# Create the source tree we'll actually use to build, deleting
 
73
# tcl since it doesn't actually build properly in a cross environment
 
74
# and we don't really need it.
 
75
SRC_DIR=$DIR/src
 
76
rm -rf $SRC_DIR || exit 1
 
77
mkdir $SRC_DIR || exit 1
 
78
ln -s $ORIG_SRC_DIR/* $SRC_DIR/ || exit 1
 
79
# We can't use the top-level Makefile as-is.  Remove the soft link:
 
80
rm $SRC_DIR/Makefile || exit 1
 
81
# Now create our own by editing the top-level Makefile, deleting every line marked "Apple-style":
 
82
sed -e '/[Aa]pple-style/d' -e '/include.*GNUmakefile/d' $ORIG_SRC_DIR/Makefile > $SRC_DIR/Makefile || exit 1
 
83
 
 
84
# Build the LLVM tree universal.
 
85
mkdir -p $DIR/obj-llvm || exit 1
 
86
cd $DIR/obj-llvm || exit 1
 
87
 
 
88
if [ "$ARM_HOSTED_BUILD" = yes ]; then
 
89
  # The cross-tools' build process expects to find an existing cross toolchain
 
90
  # under names like 'arm-apple-darwin$DARWIN_VERS-as'; so make them.
 
91
  rm -rf $DIR/bin || exit 1
 
92
  mkdir $DIR/bin || exit 1
 
93
  for prog in ar nm ranlib strip lipo ld as ; do
 
94
    P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
 
95
    T=`xcrun -sdk $SDKROOT -find ${prog}`
 
96
    echo '#!/bin/sh' > $P || exit 1
 
97
    echo 'exec '$T' "$@"' >> $P || exit 1
 
98
    chmod a+x $P || exit 1
 
99
  done
 
100
  # Try to use the platform llvm-gcc. Fall back to gcc if it's not available.
 
101
  for prog in gcc g++ ; do
 
102
    P=$DIR/bin/arm-apple-darwin$DARWIN_VERS-${prog}
 
103
    T=`xcrun -sdk $SDKROOT -find llvm-${prog}`
 
104
    if [ "x$T" = "x" ] ; then
 
105
      T=`xcrun -sdk $SDKROOT -find ${prog}`
 
106
    fi
 
107
    echo '#!/bin/sh' > $P || exit 1
 
108
    echo 'exec '$T' -arch armv6 -isysroot '${SDKROOT}' "$@"' >> $P || exit 1
 
109
    chmod a+x $P || exit 1
 
110
  done
 
111
 
 
112
  PATH=$DIR/bin:$PATH
 
113
# otherwise, try to use llvm-gcc if it's available
 
114
elif [ $DARWIN_VERS -gt 9 ]; then
 
115
  # If the user has set CC or CXX, respect their wishes.  If not,
 
116
  # compile with LLVM-GCC/LLVM-G++ if available; if LLVM is not
 
117
  # available, fall back to usual GCC/G++ default.
 
118
  savedPATH=$PATH ; PATH="/Developer/usr/bin:$PATH"
 
119
  XTMPCC=$(which llvm-gcc)
 
120
  if [ x$CC  = x -a x$XTMPCC != x ] ; then export CC=$XTMPCC  ; fi
 
121
  XTMPCC=$(which llvm-g++)
 
122
  if [ x$CXX = x -a x$XTMPCC != x ] ; then export CXX=$XTMPCC ; fi
 
123
  PATH=$savedPATH
 
124
  unset XTMPCC savedPATH
 
125
fi
 
126
 
 
127
if [ "$ARM_HOSTED_BUILD" = yes ]; then
 
128
  configure_opts="--enable-targets=arm --host=arm-apple-darwin10 \
 
129
                  --target=arm-apple-darwin10 --build=i686-apple-darwin10"
 
130
elif [ "$IOS_SIM_BUILD" = yes ]; then
 
131
  # Use a non-standard "darwin_sim" host triple to trigger a cross-build.
 
132
  configure_opts="--enable-targets=x86 --host=i686-apple-darwin_sim \
 
133
                  --build=i686-apple-darwin10"
 
134
else
 
135
  configure_opts="--enable-targets=arm,x86,powerpc,cbe"
 
136
fi
 
137
 
 
138
if [ \! -f Makefile.config ]; then
 
139
  $SRC_DIR/configure --prefix=$DEST_DIR$DEST_ROOT $configure_opts \
 
140
    --enable-assertions=$LLVM_ASSERTIONS \
 
141
    --enable-optimized=$LLVM_OPTIMIZED \
 
142
    --disable-bindings \
 
143
    || exit 1
 
144
fi
 
145
 
 
146
SUBVERSION=`echo $RC_ProjectSourceVersion | sed -e 's/[^.]*\.\([0-9]*\).*/\1/'`
 
147
 
 
148
if [ "x$SUBVERSION" != "x$RC_ProjectSourceVersion" ]; then
 
149
    LLVM_SUBMIT_SUBVERSION=`printf "%02d" $SUBVERSION`
 
150
    RC_ProjectSourceVersion=`echo $RC_ProjectSourceVersion | sed -e 's/\..*//'`
 
151
    LLVM_SUBMIT_VERSION=$RC_ProjectSourceVersion
 
152
fi
 
153
 
 
154
if [ "x$LLVM_SUBMIT_SUBVERSION" = "x00" -o "x$LLVM_SUBMIT_SUBVERSION" = "x0" ]; then
 
155
    LLVM_VERSION="$LLVM_SUBMIT_VERSION"
 
156
else
 
157
    LLVM_VERSION="$LLVM_SUBMIT_VERSION-$LLVM_SUBMIT_SUBVERSION"
 
158
fi
 
159
 
 
160
GCC_VER=`cc --version 2>/dev/null | sed 1q`
 
161
 
 
162
if echo "$GCC_VER" | grep GCC > /dev/null; then
 
163
    GCC_VER=`echo $GCC_VER | sed -e 's/.*(GCC) \([0-9.][0-9.]*\).*/\1/'`
 
164
    MAJ_VER=`echo $GCC_VER | sed 's/\..*//'`
 
165
    MIN_VER=`echo $GCC_VER | sed 's/[^.]*\.\([0-9]*\).*/\1/'`
 
166
fi
 
167
 
 
168
JOBS_FLAG=""
 
169
 
 
170
# Note: If compiling with GCC 4.0, don't pass the -jN flag. Building universal
 
171
# already has parallelism and we don't want to make the builders hit swap by
 
172
# firing off too many gccs at the same time.
 
173
if [ "x$MAJ_VER" != "x4" -o "x$MIN_VER" != "x0" ]; then
 
174
    # Figure out how many make processes to run.
 
175
    SYSCTL=`sysctl -n hw.activecpu`
 
176
 
 
177
    # hw.activecpu only available in 10.2.6 and later
 
178
    if [ -z "$SYSCTL" ]; then
 
179
        SYSCTL=`sysctl -n hw.ncpu`
 
180
    fi
 
181
 
 
182
    # sysctl -n hw.* does not work when invoked via B&I chroot /BuildRoot.
 
183
    # Builders can default to 2, since even if they are single processor,
 
184
    # nothing else is running on the machine.
 
185
    if [ -z "$SYSCTL" ]; then
 
186
        SYSCTL=2
 
187
    fi
 
188
 
 
189
    JOBS_FLAG="-j $SYSCTL"
 
190
fi
 
191
 
 
192
make $JOBS_FLAG $OPTIMIZE_OPTS UNIVERSAL=1 UNIVERSAL_ARCH="$HOSTS" \
 
193
    UNIVERSAL_SDK_PATH=$SDKROOT \
 
194
    NO_RUNTIME_LIBS=1 \
 
195
    DISABLE_EDIS=1 \
 
196
    DEBUG_SYMBOLS=1 \
 
197
    LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION \
 
198
    LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION \
 
199
    CXXFLAGS="-DLLVM_VERSION_INFO='\" Apple Build #$LLVM_VERSION\"'" \
 
200
    VERBOSE=1
 
201
 
 
202
if [ $? != 0 ] ; then
 
203
    echo "error: LLVM 'make' failed!"
 
204
    exit 1
 
205
fi 
 
206
 
 
207
################################################################################
 
208
# Construct the actual destination root, by copying stuff from $DIR/dst-* to
 
209
# $DEST_DIR, with occasional 'lipo' commands.
 
210
 
 
211
cd $DEST_DIR || exit 1
 
212
 
 
213
# Clean out DEST_DIR in case -noclean was passed to buildit.
 
214
rm -rf * || exit 1
 
215
 
 
216
cd $DIR/obj-llvm || exit 1
 
217
 
 
218
# Install the tree into the destination directory.
 
219
make $LOCAL_MAKEFLAGS $OPTIMIZE_OPTS UNIVERSAL=1 UNIVERSAL_ARCH="$HOSTS" \
 
220
    NO_RUNTIME_LIBS=1 \
 
221
    DISABLE_EDIS=1 \
 
222
    DEBUG_SYMBOLS=1 \
 
223
    LLVM_SUBMIT_VERSION=$LLVM_SUBMIT_VERSION \
 
224
    LLVM_SUBMIT_SUBVERSION=$LLVM_SUBMIT_SUBVERSION \
 
225
    OPTIMIZE_OPTION='-O3' VERBOSE=1 install
 
226
 
 
227
if ! test $? == 0 ; then
 
228
    echo "error: LLVM 'make install' failed!"
 
229
    exit 1
 
230
fi 
 
231
 
 
232
# Install Version.h
 
233
LLVM_MINOR_VERSION=`echo $LLVM_SUBMIT_SUBVERSION | sed -e 's,0*\([1-9][0-9]*\),\1,'`
 
234
if [ "x$LLVM_MINOR_VERSION" = "x" ]; then
 
235
    LLVM_MINOR_VERSION=0
 
236
fi
 
237
RC_ProjectSourceSubversion=`printf "%d" $LLVM_MINOR_VERSION`
 
238
echo "#define LLVM_VERSION ${RC_ProjectSourceVersion}" > $DEST_DIR$DEST_ROOT/include/llvm/Version.h
 
239
echo "#define LLVM_MINOR_VERSION ${RC_ProjectSourceSubversion}" >> $DEST_DIR$DEST_ROOT/include/llvm/Version.h
 
240
 
 
241
if [ "x$LLVM_DEBUG" != "x1" ]; then
 
242
    # Strip local symbols from llvm libraries.
 
243
    #
 
244
    # Use '-l' to strip i386 modules. N.B. that flag doesn't work with kext or
 
245
    # PPC objects!
 
246
    strip -Sl $DEST_DIR$DEST_ROOT/lib/*.[oa]
 
247
    for f in `ls $DEST_DIR$DEST_ROOT/lib/*.so`; do
 
248
        strip -Sxl $f
 
249
    done
 
250
fi
 
251
 
 
252
# Copy over the tblgen utility.
 
253
cp `find $DIR -name tblgen` $DEST_DIR$DEST_ROOT/bin
 
254
 
 
255
# Remove .dir files 
 
256
cd $DEST_DIR$DEST_ROOT
 
257
rm -f bin/.dir etc/llvm/.dir lib/.dir
 
258
 
 
259
# Remove PPC64 fat slices.
 
260
cd $DEST_DIR$DEST_ROOT/bin
 
261
if [ $MACOSX_DEPLOYMENT_TARGET = "10.4" ]; then
 
262
    find . -perm 755 -type f \! \( -name '*gccas' -o -name '*gccld' -o -name llvm-config \) \
 
263
        -exec lipo -extract ppc -extract i386 {} -output {} \;
 
264
elif [ $MACOSX_DEPLOYMENT_TARGET = "10.5" ]; then
 
265
    find . -perm 755 -type f \! \( -name '*gccas' -o -name '*gccld' -o -name llvm-config \) \
 
266
        -exec lipo -extract ppc7400 -extract i386 {} -output {} \;
 
267
else
 
268
    find . -perm 755 -type f \! \( -name '*gccas' -o -name '*gccld' -o -name llvm-config \) \
 
269
        -exec lipo -extract ppc7400 -extract i386 -extract x86_64 {} -output {} \;
 
270
fi
 
271
 
 
272
# The Hello dylib is an example of how to build a pass. No need to install it.
 
273
rm $DEST_DIR$DEST_ROOT/lib/LLVMHello.dylib
 
274
 
 
275
# Compress manpages
 
276
MDIR=$DEST_DIR$DEST_ROOT/share/man/man1
 
277
gzip -f $MDIR/*
 
278
 
 
279
################################################################################
 
280
# Create SYM_DIR with information required for debugging.
 
281
 
 
282
# Figure out how many make processes to run.
 
283
SYSCTL=`sysctl -n hw.activecpu`
 
284
 
 
285
# hw.activecpu only available in 10.2.6 and later
 
286
if [ -z "$SYSCTL" ]; then
 
287
  SYSCTL=`sysctl -n hw.ncpu`
 
288
fi
 
289
 
 
290
# sysctl -n hw.* does not work when invoked via B&I chroot /BuildRoot. Builders
 
291
# can default to 2, since even if they are single processor, nothing else is
 
292
# running on the machine.
 
293
if [ -z "$SYSCTL" ]; then
 
294
  SYSCTL=2
 
295
fi
 
296
 
 
297
cd $SYM_DIR || exit 1
 
298
 
 
299
# Clean out SYM_DIR in case -noclean was passed to buildit.
 
300
rm -rf * || exit 1
 
301
 
 
302
# Generate .dSYM files
 
303
find $DEST_DIR -perm -0111 -type f \
 
304
    ! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config -o -name '*.a' \) \
 
305
    -print | xargs -n 1 -P ${SYSCTL} dsymutil
 
306
 
 
307
# Save .dSYM files and .a archives
 
308
cd $DEST_DIR || exit 1
 
309
find . \( -path \*.dSYM/\* -or -name \*.a \) -print \
 
310
    | cpio -pdml $SYM_DIR || exit 1
 
311
 
 
312
# Save source files.
 
313
mkdir $SYM_DIR/src || exit 1
 
314
cd $DIR || exit 1
 
315
find obj-* -name \*.\[chy\] -o -name \*.cpp -print \
 
316
    | cpio -pdml $SYM_DIR/src || exit 1
 
317
 
 
318
################################################################################
 
319
# Install and strip libLTO.dylib
 
320
 
 
321
cd $DEST_DIR$DEST_ROOT
 
322
if [ "$INSTALL_LIBLTO" = "yes" ]; then
 
323
  DT_HOME="$DEST_DIR/Developer/usr"
 
324
  mkdir -p $DT_HOME/lib
 
325
  mv lib/libLTO.dylib $DT_HOME/lib/libLTO.dylib
 
326
 
 
327
  # Save a copy of the unstripped dylib
 
328
  mkdir -p $SYM_DIR/Developer/usr/lib
 
329
  cp $DT_HOME/lib/libLTO.dylib $SYM_DIR/Developer/usr/lib/libLTO.dylib
 
330
 
 
331
  # Use '-l' to strip i386 modules. N.B. that flag doesn't work with kext or
 
332
  # PPC objects!
 
333
  strip -arch all -Sl $DT_HOME/lib/libLTO.dylib
 
334
 
 
335
  if [ "x$DISABLE_USR_LINKS" == "x" ]; then
 
336
    # Add a symlink in /usr/lib for B&I.
 
337
    mkdir -p $DEST_DIR/usr/lib/
 
338
    (cd $DEST_DIR/usr/lib && \
 
339
      ln -s ../../Developer/usr/lib/libLTO.dylib ./libLTO.dylib)
 
340
  fi
 
341
else
 
342
  rm -f lib/libLTO.dylib
 
343
fi
 
344
rm -f lib/libLTO.a lib/libLTO.la
 
345
 
 
346
################################################################################
 
347
# Remove debugging information from DEST_DIR.
 
348
 
 
349
cd $DIR || exit 1
 
350
 
 
351
find $DEST_DIR -name \*.a -print | xargs ranlib || exit 1
 
352
find $DEST_DIR -name \*.dSYM -print | xargs rm -r || exit 1
 
353
 
 
354
# Strip debugging information from files
 
355
#
 
356
# Use '-l' to strip i386 modules. N.B. that flag doesn't work with kext or
 
357
# PPC objects!
 
358
find $DEST_DIR -perm -0111 -type f \
 
359
    ! \( -name '*.la' -o -name gccas -o -name gccld -o -name llvm-config \) \
 
360
    -print | xargs -n 1 -P ${SYSCTL} strip -arch all -Sl
 
361
 
 
362
chgrp -h -R wheel $DEST_DIR
 
363
chgrp -R wheel $DEST_DIR
 
364
 
 
365
################################################################################
 
366
# Remove the docs directory
 
367
 
 
368
rm -rf $DEST_DIR$DEST_ROOT/docs
 
369
 
 
370
################################################################################
 
371
# w00t! Done!
 
372
 
 
373
exit 0