Created
June 26, 2019 20:08
-
-
Save lessless/0a0b162e28d2c167e9761db00d971366 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Name: build.lib.sh | |
# Author: Ladar Levison | |
# | |
# Description: Used to compile the external dependencies required by magma, and combine them into the magmad.so shared object file. | |
# Preliminary Dependency Matrix | |
# bzip2 -:- | |
# checker -:- | |
# clamav -:- zlib bzip pcre libxml2 | |
# curl -:- zlib openssl | |
# dkim -:- openssl | |
# dspam -:- mariadb | |
# freetype -:- zlib bzip2 png | |
# gd -:- zlib png jpeg freetype | |
# geoip -:- zlib | |
# googtap -:- | |
# googtest -:- | |
# jansson -:- | |
# jpeg -:- | |
# lzo -:- | |
# memcached -:- | |
# mariadb -:- zlib openssl | |
# openssl -:- zlib | |
# pcre -:- | |
# png -:- zlib | |
# spf2 -:- | |
# tokyocabinet -:- zlib bzip2 | |
# utf8proc -:- curl | |
# xml2 -:- zlib | |
# zlib -:- | |
# Install Sphinx (python-sphinx package) to build Jansson HTML docs | |
# Enable the SELinux boolean allow_exestack or the shared object loader will fail | |
# The symbols.h file may need to be imported from the magma project for the object load test | |
# Note that some platforms may require setting the CFLAGS/CPPFLAGS environment variables to -Wold-style-cast when compiling memcached | |
# To generate a SLOC report for each project: | |
# cd $M_SOURCES; find -maxdepth 1 -type d -printf '\n\n%P\n' -exec sloc --quiet --progress-rate=0 {} \; | grep -v "http://cloc.sourceforge.net" | |
# Handle self referencing, sourcing etc. | |
if [[ $0 != $BASH_SOURCE ]]; then | |
export CMD=`readlink -f $BASH_SOURCE` | |
else | |
export CMD=`readlink -f $0` | |
fi | |
# Cross Platform Base Directory Discovery | |
pushd `dirname $CMD` > /dev/null | |
BASE=`pwd -P` | |
popd > /dev/null | |
M_BUILD=`readlink -f $0` | |
cd $BASE/../../../lib/ | |
M_ROOT=`pwd` | |
# Set parent directory as project root by default (used to find scripts, | |
# bundled tarballs, patches, etc.) | |
if [ -z "$M_PROJECT_ROOT" ]; then | |
M_PROJECT_ROOT=`readlink -f ..` | |
fi | |
# Read in the build parameters. | |
. "$M_PROJECT_ROOT/dev/scripts/builders/build.lib.params.sh" | |
# If the TERM environment variable is missing, then tput may trigger a fatal error. | |
if [[ -n "$TERM" ]] && [[ "$TERM" != "dumb" ]]; then | |
export TPUT="tput" | |
else | |
export TPUT="tput -Tvt100" | |
fi | |
# This undocumented environment variables makes it easy to use the "all" command line option, but skip still the | |
# normal dependency checks, this making the build process faster. The QUICK option is undocumented, because in general, | |
# developers interacting directly with the build.lib.sh script, should be running the "check" step to ensure | |
# they have a valid, and properly configured, and functional platform capable of running magma. | |
if [ -z QUICK ] || [ "$QUICK" != "yes" ]; then | |
QUICK="no" | |
fi | |
error() { | |
if [ $? -ne 0 ]; then | |
wait | |
[[ -t 0 ]] && ${TPUT} sgr0 || true ; [[ -t 0 ]] && ${TPUT} setaf 1 || true ; date +"%n%n$COMMAND failed at %r on %x%n%n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
exit 1 | |
fi | |
} | |
silent() { | |
if [ $? -ne 0 ]; then | |
wait | |
exit 1 | |
fi | |
} | |
# Confirm whether we really want to run this service | |
extract() { | |
if [ -d "$M_SOURCES/$2" ]; then | |
rm -rf "$M_SOURCES/$2"; error | |
fi | |
tar xzvf "$M_ARCHIVES/$1.tar.gz" -C "$M_SOURCES"; error | |
mv "$M_SOURCES/$1" "$M_SOURCES/$2"; error | |
} | |
gd() { | |
if [[ $1 == "gd-extract" ]]; then | |
rm -f "$M_LOGS/gd.txt"; error | |
elif [[ $1 != "gd-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/gd.txt" | |
fi | |
case "$1" in | |
gd-extract) | |
extract $GD "gd" &>> "$M_LOGS/gd.txt" | |
;; | |
gd-prep) | |
cd "$M_SOURCES/gd"; error | |
if [[ $GD == "gd-2.0.35" ]]; then | |
# A stack of patches needed to fix a variety of bugs in the neglected 2.0.X series. | |
cat "$M_PATCHES/gd/"gd-2.0.33-freetype.patch | patch -s -p1 -b --suffix .freetype --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.34-multilib.patch | patch -s -p1 -b --suffix .mlib --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-loop.patch | patch -s -p1 -b --suffix .loop --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.35-overflow.patch | patch -s -p1 -b --suffix .overflow --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.34-sparc64.patch | patch -s -p1 -b --suffix .sparc64 --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.35-AALineThick.patch | patch -s -p1 -b --suffix .AALineThick --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.33-BoxBound.patch | patch -s -p1 -b --suffix .bb --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.34-fonts.patch | patch -s -p1 -b --suffix .fonts --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.35-time.patch | patch -s -p1 -b --suffix .time --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-2.0.35-security3.patch | patch -s -p1 -b --suffix .sec3 --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-version.patch | patch -s -p1 -b --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd-sigcmp.patch | patch -s -p1 -b --fuzz=0 &>> "$M_LOGS/gd.txt" ; error | |
else | |
# Of the patches above, these are the only ones still applicable to the 2.2.X series. They have | |
# been updated, so an equivalent change is made to a 2.2.X release. | |
cat "$M_PATCHES/gd/"sparc_cflags_2.2.5.patch | patch -p1 --verbose &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"gd_gif_loop_2.2.5.patch | patch -p1 --verbose &>> "$M_LOGS/gd.txt" ; error | |
cat "$M_PATCHES/gd/"default_fontpath_2.2.25.patch | patch -p1 --verbose &>> "$M_LOGS/gd.txt" ; error | |
# The bounding box patch is currently broken. | |
# cat "$M_PATCHES/gd/"bounding_box_2.2.5.patch | patch -p1 --verbose &>> "$M_LOGS/gd.txt" ; error | |
fi | |
;; | |
gd-build) | |
cd "$M_SOURCES/gd"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true ; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before gd.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libpng.so ] || [ ! -f "$M_LDPATH"/libpng.a ] || [ ! -f "$M_PKGPATH"/libpng.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build png before gd.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libjpeg.so ] || [ ! -f "$M_LDPATH"/libjpeg.a ] || [ ! -f "$M_PKGPATH"/libjpeg.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build jpeg before gd.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libfreetype.so ] || [ ! -f "$M_LDPATH"/libfreetype.a ] || [ ! -f "$M_PKGPATH"/freetype2.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build freetype before gd.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
# We need to override the PNG flags, otherwise the system include files/libraries might be used by mistake. | |
export PKG_CONFIG_LIBDIR="$M_PKGPATH" | |
export LIBPNG_LIBS=" `pkg-config --libs libpng` " | |
export LIBPNG_CFLAGS=" `pkg-config --cflags libpng` " | |
unset PKG_CONFIG_LIBDIR | |
# We need to override the JPEG flags, otherwise the system include files/libraries might be used by mistake. | |
export PKG_CONFIG_LIBDIR="$M_PKGPATH" | |
export LIBJPEG_LIBS=" `pkg-config --libs libjpeg` " | |
export LIBJPEG_CFLAGS=" `pkg-config --cflags libjpeg` " | |
unset PKG_CONFIG_LIBDIR | |
# The PKG_CONFIG_LIBDIR sections above replace the default pkg-config search path. When we run configure | |
# we only want to append our local pkg config directory to the existing search path. | |
export PKG_CONFIG_PATH="$M_PKGPATH" | |
./configure --without-x --without-xpm --without-tiff --without-fontconfig \ | |
--with-png="$M_LOCAL" --with-jpeg="$M_LOCAL" --with-freetype="$M_LOCAL" \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/gd.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS; unset LIBPNG_LIBS; unset LIBPNG_CFLAGS; unset LIBJPEG_LIBS; unset LIBJPEG_CFLAGS; unset PKG_CONFIG_PATH | |
make --jobs=4 &>> "$M_LOGS/gd.txt"; error | |
make install &>> "$M_LOGS/gd.txt"; error | |
;; | |
gd-check) | |
cd "$M_SOURCES/gd"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/gd.txt"; error | |
;; | |
gd-check-full) | |
cd "$M_SOURCES/gd"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/gd.txt"; error | |
;; | |
gd-clean) | |
cd "$M_SOURCES/gd"; error | |
make clean &>> "$M_LOGS/gd.txt"; error | |
;; | |
gd-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/gd.txt"; error | |
;; | |
gd-log) | |
cat "$M_LOGS/gd.txt"; error | |
;; | |
gd) | |
gd "gd-extract" | |
gd "gd-prep" | |
gd "gd-build" | |
if [ "$QUICK" != "yes" ]; then gd "gd-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/gd.txt" | |
return $? | |
} | |
png() { | |
if [[ $1 == "png-extract" ]]; then | |
rm -f "$M_LOGS/png.txt"; error | |
elif [[ $1 != "png-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/png.txt" | |
fi | |
case "$1" in | |
png-extract) | |
extract $PNG "png" &>> "$M_LOGS/png.txt" | |
;; | |
png-prep) | |
cd "$M_SOURCES/png"; error | |
cat "$M_PATCHES/png/"version_script_1.6.5.patch | patch -p1 --verbose &>> "$M_LOGS/gd.txt" ; error | |
;; | |
png-build) | |
cd "$M_SOURCES/png"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before png.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/png.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make --jobs=4 &>> "$M_LOGS/png.txt"; error | |
make install &>> "$M_LOGS/png.txt"; error | |
;; | |
png-check) | |
cd "$M_SOURCES/png"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/png.txt"; error | |
;; | |
png-check-full) | |
cd "$M_SOURCES/png"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/png.txt"; error | |
;; | |
png-clean) | |
cd "$M_SOURCES/png"; error | |
make clean &>> "$M_LOGS/png.txt"; error | |
;; | |
png-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/png.txt" | |
;; | |
png-log) | |
cat "$M_LOGS/png.txt"; error | |
;; | |
png) | |
png "png-extract" | |
png "png-prep" | |
png "png-build" | |
if [ "$QUICK" != "yes" ]; then png "png-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/png.txt" | |
return $? | |
} | |
lzo() { | |
if [[ $1 == "lzo-extract" ]]; then | |
rm -f "$M_LOGS/lzo.txt"; error | |
elif [[ $1 != "lzo-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/lzo.txt" | |
fi | |
case "$1" in | |
lzo-extract) | |
extract $LZO "lzo" &>> "$M_LOGS/lzo.txt" | |
;; | |
lzo-prep) | |
cd "$M_SOURCES/lzo"; error | |
;; | |
lzo-build) | |
cd "$M_SOURCES/lzo"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --enable-shared --prefix="$M_LOCAL" &>> "$M_LOGS/lzo.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS | |
make --jobs=4 &>> "$M_LOGS/lzo.txt"; error | |
make install &>> "$M_LOGS/lzo.txt"; error | |
;; | |
lzo-check) | |
cd "$M_SOURCES/lzo"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make test &>> "$M_LOGS/lzo.txt"; error | |
;; | |
lzo-check-full) | |
cd "$M_SOURCES/lzo"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make test &>> "$M_LOGS/lzo.txt"; error | |
;; | |
lzo-clean) | |
cd "$M_SOURCES/lzo"; error | |
make clean &>> "$M_LOGS/lzo.txt"; error | |
;; | |
lzo-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/lzo.txt"; error | |
;; | |
lzo-log) | |
cat "$M_LOGS/lzo.txt"; error | |
;; | |
lzo) | |
lzo "lzo-extract" | |
lzo "lzo-prep" | |
lzo "lzo-build" | |
if [ "$QUICK" != "yes" ]; then lzo "lzo-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/lzo.txt" | |
return $? | |
} | |
pcre() { | |
if [[ $1 == "pcre-extract" ]]; then | |
rm -f "$M_LOGS/pcre.txt"; error | |
elif [[ $1 != "pcre-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/pcre.txt" | |
fi | |
case "$1" in | |
pcre-extract) | |
extract $PCRE "pcre" &>> "$M_LOGS/pcre.txt" | |
;; | |
pcre-prep) | |
cd "$M_SOURCES/pcre"; error | |
;; | |
pcre-build) | |
cd "$M_SOURCES/pcre"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/pcre.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS | |
make --jobs=4 &>> "$M_LOGS/pcre.txt"; error | |
make install &>> "$M_LOGS/pcre.txt"; error | |
;; | |
pcre-check) | |
cd "$M_SOURCES/pcre"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/pcre.txt"; error | |
;; | |
pcre-check-full) | |
cd "$M_SOURCES/pcre"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/pcre.txt"; error | |
;; | |
pcre-clean) | |
cd "$M_SOURCES/pcre"; error | |
make clean &>> "$M_LOGS/pcre.txt"; error | |
;; | |
pcre-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/pcre.txt"; error | |
;; | |
pcre-log) | |
cat "$M_LOGS/pcre.txt"; error | |
;; | |
pcre) | |
pcre "pcre-extract" | |
pcre "pcre-prep" | |
pcre "pcre-build" | |
if [ "$QUICK" != "yes" ]; then pcre "pcre-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/pcre.txt" | |
return $? | |
} | |
jpeg() { | |
if [[ $1 == "jpeg-extract" ]]; then | |
rm -f "$M_LOGS/jpeg.txt"; error | |
elif [[ $1 != "jpeg-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/jpeg.txt" | |
fi | |
case "$1" in | |
jpeg-extract) | |
extract $JPEG "jpeg" &>> "$M_LOGS/jpeg.txt" | |
;; | |
jpeg-prep) | |
cd "$M_SOURCES/jpeg"; error | |
cat "$M_PATCHES/jpeg/"jpeg-version.patch | patch -s -p1 -b --fuzz=3; error | |
;; | |
jpeg-build) | |
cd "$M_SOURCES/jpeg"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/jpeg.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS | |
make --jobs=4 &>> "$M_LOGS/jpeg.txt"; error | |
make install &>> "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg-check) | |
cd "$M_SOURCES/jpeg"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg-check-full) | |
cd "$M_SOURCES/jpeg"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg-clean) | |
cd "$M_SOURCES/jpeg"; error | |
make clean &>> "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg-log) | |
cat "$M_LOGS/jpeg.txt"; error | |
;; | |
jpeg) | |
jpeg "jpeg-extract" | |
jpeg "jpeg-prep" | |
jpeg "jpeg-build" | |
if [ "$QUICK" != "yes" ]; then jpeg "jpeg-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/jpeg.txt" | |
return $? | |
} | |
spf2() { | |
if [[ $1 == "spf2-extract" ]]; then | |
rm -f "$M_LOGS/spf2.txt"; error | |
elif [[ $1 != "spf2-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/spf2.txt" | |
fi | |
case "$1" in | |
spf2-extract) | |
extract $SPF2 "spf2" &>> "$M_LOGS/spf2.txt" | |
;; | |
spf2-prep) | |
cd "$M_SOURCES/spf2"; error | |
cat "$M_PATCHES/spf2/"remove-libreplace.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
cat "$M_PATCHES/spf2/"autoreconf-on-el6.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
cat "$M_PATCHES/spf2/"expand_hostname_buffer.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
cat "$M_PATCHES/spf2/"fix_use_after_free.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
cat "$M_PATCHES/spf2/"handle_redirect_mechanism.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
cat "$M_PATCHES/spf2/"return_reason_for_dns_failure.patch | patch -p1 --verbose &>> "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-build) | |
cd "$M_SOURCES/spf2"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/spf2.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS | |
make --jobs=4 &>> "$M_LOGS/spf2.txt"; error | |
make install &>> "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-check) | |
cd "$M_SOURCES/spf2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-check-full) | |
cd "$M_SOURCES/spf2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-clean) | |
cd "$M_SOURCES/spf2"; error | |
make clean &>> "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/spf2.txt"; error | |
;; | |
spf2-log) | |
cat "$M_LOGS/spf2.txt"; error | |
;; | |
spf2) | |
spf2 "spf2-extract" | |
spf2 "spf2-prep" | |
spf2 "spf2-build" | |
spf2 "spf2-check" | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/spf2.txt" | |
return $? | |
} | |
curl() { | |
if [[ $1 == "curl-extract" ]]; then | |
rm -f "$M_LOGS/curl.txt"; error | |
elif [[ $1 != "curl-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/curl.txt" | |
fi | |
case "$1" in | |
curl-extract) | |
extract $CURL "curl" &>> "$M_LOGS/curl.txt" | |
;; | |
curl-prep) | |
cd "$M_SOURCES/curl"; error | |
cat "$M_PATCHES/curl/"skip_test172-version7.23.1.patch | patch -p1 --verbose &>> "$M_LOGS/curl.txt"; error | |
cat "$M_PATCHES/curl/"7.23.1_curl_exec_perm_fix.patch | patch -p1 --verbose &>> "$M_LOGS/curl.txt"; error | |
;; | |
curl-build) | |
# Note that if we don't include the debug configure option we can't run a check-full. | |
cd "$M_SOURCES/curl"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before curl.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libcrypto.so ] || [ ! -f "$M_LDPATH"/libcrypto.a ] || [ ! -f "$M_PKGPATH"/libcrypto.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before curl.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libssl.so ] || [ ! -f "$M_LDPATH"/libssl.a ] || [ ! -f "$M_PKGPATH"/libssl.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before curl.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --enable-debug --enable-static=yes \ | |
--without-librtmp --without-krb4 --without-krb5 --without-libssh2 \ | |
--without-ca-bundle --without-ca-path --without-libidn \ | |
--disable-file --disable-ftp --disable-ftps --disable-gopher \ | |
--disable-imap --disable-imaps --disable-pop3 --disable-pop3s \ | |
--disable-rtsp --disable-smtp --disable-smtps --disable-telnet \ | |
--disable-tftp --disable-ldap --disable-ssh --disable-dict \ | |
--build=x86_64-redhat-linux-gnu --target=x86_64-redhat-linux-gnu --with-pic \ | |
--with-ssl="$M_SOURCES/openssl" --with-zlib="$M_SOURCES/zlib" \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/curl.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make --jobs=4 &>> "$M_LOGS/curl.txt"; error | |
make install &>> "$M_LOGS/curl.txt"; error | |
;; | |
curl-check) | |
# The target 'check' is an alias for the targets 'test' and 'examples' | |
cd "$M_SOURCES/curl"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
# To avoid having curl run all of its tests using valgrind, we pass the '-n' option to the runtests.pl script. | |
sed -i -e "s/^\(TEST = .*runtests.pl\).*/\1 -n/g" tests/Makefile | |
make --jobs=4 examples &>> "$M_LOGS/curl.txt"; error | |
make --jobs=4 test &>> "$M_LOGS/curl.txt"; error | |
;; | |
curl-check-full) | |
# The target 'check' is an alias for the targets 'test' and 'examples' | |
cd "$M_SOURCES/curl"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
# Since valgrind may have been disabled above, we ensure the -n flag is removed here. | |
sed -i -e "s/^\(TEST = .*runtests.pl\).*/\1/g" tests/Makefile | |
make --jobs=4 examples &>> "$M_LOGS/curl.txt"; error | |
make --jobs=4 test &>> "$M_LOGS/curl.txt"; error | |
make --jobs=4 test-full &>> "$M_LOGS/curl.txt"; error | |
# make --jobs=4 test-torture &>> "$M_LOGS/curl.txt"; error | |
;; | |
curl-clean) | |
cd "$M_SOURCES/curl"; error | |
make clean &>> "$M_LOGS/curl.txt"; error | |
;; | |
curl-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/curl.txt"; error | |
;; | |
curl-log) | |
cat "$M_LOGS/curl.txt"; error | |
;; | |
curl) | |
curl "curl-extract" | |
curl "curl-prep" | |
curl "curl-build" | |
if [ "$QUICK" != "yes" ]; then curl "curl-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/curl.txt" | |
return $? | |
} | |
xml2() { | |
if [[ $1 == "xml2-extract" ]]; then | |
rm -f "$M_LOGS/xml2.txt"; error | |
elif [[ $1 != "xml2-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/xml2.txt" | |
fi | |
case "$1" in | |
xml2-extract) | |
extract $XML2 "xml2" &>> "$M_LOGS/xml2.txt" | |
tar xzvf "$M_ARCHIVES/$XMLTS.tar.gz" -C "$M_SOURCES/xml2" &>> "$M_LOGS/xml2.txt"; error | |
tar --strip-components=1 -x -z -v -f "$M_ARCHIVES/$XML2TEST.tar.gz" -C "$M_SOURCES/xml2" &>> "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-prep) | |
cd "$M_SOURCES/xml2"; error | |
rm -f test/att11; error | |
rm -f result/att11.sax; error | |
rm -f result/att11.sax2; error | |
rm -f result/att11; error | |
rm -f result/noent/att11; error | |
rm -f result/att11.rdr; error | |
rm -f result/att11.rde; error | |
;; | |
xml2-build) | |
cd "$M_SOURCES/xml2"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before xml2.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --without-lzma --without-python --without-http --without-ftp --with-zlib=$M_SOURCES/zlib \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/xml2.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make --jobs=4 &>> "$M_LOGS/xml2.txt"; error | |
make install &>> "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-check) | |
cd "$M_SOURCES/xml2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-check-full) | |
cd "$M_SOURCES/xml2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/xml2.txt"; error | |
make -f Makefile.tests check &>> "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-clean) | |
cd "$M_SOURCES/xml2"; error | |
make clean &>> "$M_LOGS/xml2.txt"; error | |
make -f Makefile.tests clean &>> "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/xml2.txt"; error | |
;; | |
xml2-log) | |
cat "$M_LOGS/xml2.txt"; error | |
;; | |
xml2) | |
xml2 "xml2-extract" | |
xml2 "xml2-prep" | |
xml2 "xml2-build" | |
xml2 "xml2-check" | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/xml2.txt" | |
return $? | |
} | |
dkim() { | |
if [[ $1 == "dkim-extract" ]]; then | |
rm -f "$M_LOGS/dkim.txt"; error | |
elif [[ $1 != "dkim-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/dkim.txt" | |
fi | |
case "$1" in | |
dkim-extract) | |
extract $DKIM "dkim" &>> "$M_LOGS/dkim.txt" | |
;; | |
dkim-prep) | |
cd "$M_SOURCES/dkim"; error | |
cat "$M_PATCHES/dkim/"opendkim.ticket226.patch | patch -p1 --verbose &>> "$M_LOGS/dkim.txt"; error | |
cat "$M_PATCHES/dkim/"opendkim_headers_2.10.3.patch | patch -p1 --verbose &>> "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-build) | |
cd "$M_SOURCES/dkim"; error | |
if [ ! -f "$M_LDPATH"/libcrypto.so ] || [ ! -f "$M_LDPATH"/libcrypto.a ] || [ ! -f "$M_PKGPATH"/libcrypto.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before dkim.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libssl.so ] || [ ! -f "$M_LDPATH"/libssl.a ] || [ ! -f "$M_PKGPATH"/libssl.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before dkim.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH -L$M_LDPATH/engines/ -Wl,-rpath,$M_LDPATH/engines/ $M_LDFLAGS" | |
./configure \ | |
--disable-filter --without-milter --without-sasl --without-gnutls --without-odbx \ | |
--without-openldap --with-openssl="$M_SOURCES/openssl" \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/dkim.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make --jobs=4 &>> "$M_LOGS/dkim.txt"; error | |
make install &>> "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-check) | |
cd "$M_SOURCES/dkim"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-check-full) | |
cd "$M_SOURCES/dkim"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-clean) | |
cd "$M_SOURCES/dkim"; error | |
make clean &>> "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/dkim.txt"; error | |
;; | |
dkim-log) | |
cat "$M_LOGS/dkim.txt"; error | |
;; | |
dkim) | |
dkim "dkim-extract" | |
dkim "dkim-prep" | |
dkim "dkim-build" | |
if [ "$QUICK" != "yes" ]; then dkim "dkim-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/dkim.txt" | |
return $? | |
} | |
zlib() { | |
if [[ $1 == "zlib-extract" ]]; then | |
rm -f "$M_LOGS/zlib.txt"; error | |
elif [[ $1 != "zlib-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/zlib.txt" | |
fi | |
case "$1" in | |
zlib-extract) | |
extract $ZLIB "zlib" &>> "$M_LOGS/zlib.txt" | |
;; | |
zlib-prep) | |
cd "$M_SOURCES/zlib"; error | |
;; | |
zlib-build) | |
cd "$M_SOURCES/zlib"; error | |
export CFLAGS="-fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export FFLAGS="-fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_FFLAGS" | |
export CXXFLAGS="-fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
./configure --prefix="$M_LOCAL" --64 &>> "$M_LOGS/zlib.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset FFLAGS | |
make &>> "$M_LOGS/zlib.txt"; error | |
make install &>> "$M_LOGS/zlib.txt"; error | |
# Fool Autotools checks into thinking this is a normal zlib install (e.g., ClamAV) | |
if [ ! -d lib ]; then ln -s `pwd` lib ; fi | |
if [ ! -d include ]; then ln -s `pwd` include ; fi | |
;; | |
zlib-check) | |
cd "$M_SOURCES/zlib"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/zlib.txt"; error | |
;; | |
zlib-check-full) | |
cd "$M_SOURCES/zlib"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/zlib.txt"; error | |
;; | |
zlib-clean) | |
cd "$M_SOURCES/zlib"; error | |
make clean &>> "$M_LOGS/zlib.txt"; error | |
;; | |
zlib-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/zlib.txt"; error | |
;; | |
zlib-log) | |
cat "$M_LOGS/zlib.txt"; error | |
;; | |
zlib) | |
zlib "zlib-extract" | |
zlib "zlib-prep" | |
zlib "zlib-build" | |
if [ "$QUICK" != "yes" ]; then zlib "zlib-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/zlib.txt" | |
return $? | |
} | |
bzip2() { | |
if [[ $1 == "bzip2-extract" ]]; then | |
rm -f "$M_LOGS/bzip2.txt"; error | |
elif [[ $1 != "bzip2-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/bzip2.txt" | |
fi | |
case "$1" in | |
bzip2-extract) | |
extract $BZIP2 "bzip2" &>> "$M_LOGS/bzip2.txt" | |
;; | |
bzip2-prep) | |
cd "$M_SOURCES/bzip2"; error | |
chmod -Rf a+rX,u+w,g-w,o-w . &>> "$M_LOGS/bzip2.txt" ; error | |
# We use slightly different patches depending on the bzip2 version. These patches were largely | |
# ported from Red Hat. | |
if [[ $BZIP2 == "bzip2-1.0.5" ]]; then | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-saneso.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-cflags.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
elif [[ $BZIP2 == "bzip2-1.0.6" ]]; then | |
cat "$M_PATCHES/bzip2/"saneso_1.0.6.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"cflags_1.0.6.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2recover_cve_20163189.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
fi | |
# These patches apply every version since 1.0.4, and were largely ported from the Gentoo repository. | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-bzip2recover.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-makefile-flags.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-man-links.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.6-progress.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.4-posix-shell.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.6-mingw.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"bzip2-1.0.6-out-of-tree-build.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
# These patches are a mess, but were painfully ported from the Debian bzip2 repository. | |
cat "$M_PATCHES/bzip2/"man_formatting_1.0.6.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"make_modernize_1.0.6.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
cat "$M_PATCHES/bzip2/"man_path_1.0.6.patch | patch -p1 --verbose &>> "$M_LOGS/bzip2.txt" ; error | |
;; | |
bzip2-build) | |
cd "$M_SOURCES/bzip2"; error | |
make CC=gcc AR=ar RANLIB=ranlib CFLAGS='-g3 -fPIC -rdynamic -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -D_FILE_OFFSET_BITS=64' &>> "$M_LOGS/bzip2.txt" ; error | |
make PREFIX="$M_LOCAL" install &>> "$M_LOGS/bzip2.txt" ; error | |
;; | |
bzip2-check) | |
cd "$M_SOURCES/bzip2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/bzip2.txt" ; error | |
;; | |
bzip2-check-full) | |
cd "$M_SOURCES/bzip2"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/bzip2.txt" ; error | |
;; | |
bzip2-clean) | |
cd "$M_SOURCES/bzip2"; error | |
make clean &>> "$M_LOGS/bzip2.txt" ; error | |
;; | |
bzip2-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/bzip2.txt"; error | |
;; | |
bzip2-log) | |
cat "$M_LOGS/bzip2.txt"; error | |
;; | |
bzip2) | |
bzip2 "bzip2-extract" | |
bzip2 "bzip2-prep" | |
bzip2 "bzip2-build" | |
bzip2 "bzip2-check" | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/bzip2.txt" | |
return $? | |
} | |
dspam() { | |
if [[ $1 == "dspam-extract" ]]; then | |
rm -f "$M_LOGS/dspam.txt"; error | |
elif [[ $1 != "dspam-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/dspam.txt" | |
fi | |
case "$1" in | |
dspam-extract) | |
extract $DSPAM "dspam" &>> "$M_LOGS/dspam.txt" | |
;; | |
dspam-prep) | |
cd "$M_SOURCES/dspam"; error | |
# Changes STATUS( to DSPAM_STATUS( in client.c, dspam.c and agent_shared.c in DSPAM the src folder. | |
if [[ $DSPAM == "dspam-3.9.1-RC1" ]]; then | |
cat "$M_PATCHES/dspam/"dspam_status_rename_3.9.0.RC1.patch | patch -p1 --verbose &>> "$M_LOGS/dspam.txt"; error | |
else | |
cat "$M_PATCHES/dspam/"dspam_status_rename_3.10.x.patch | patch -p3 --verbose &>> "$M_LOGS/dspam.txt"; error | |
fi | |
cat "$M_PATCHES/dspam/"dspam_version.patch | patch -p1 --verbose &>> "$M_LOGS/dspam.txt"; error | |
cat "$M_PATCHES/dspam/"dspam_headers_3.10.2.patch | patch -p1 --verbose &>> "$M_LOGS/dspam.txt"; error | |
cat "$M_PATCHES/dspam/"3.10.2_dspam_fix_mysql_conf.patch | patch -p1 --verbose &>> "$M_LOGS/dspam.txt"; error | |
;; | |
dspam-build) | |
cd "$M_SOURCES/dspam"; error | |
if [ ! -f "$M_LDPATH"/mariadb/libmariadb.so ] || [ ! -f "$M_LDPATH"/mariadb/libmariadbclient.a ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build mariadb before dspam.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH/mariadb -L$M_LDPATH -Wl,-rpath,$M_LDPATH/mariadb -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
export LD_LIBRARY_PATH="$M_LDPATH" | |
./configure --enable-static --with-pic --enable-preferences-extension --enable-virtual-users \ | |
--with-storage-driver=mysql_drv --disable-trusted-user-security --disable-mysql4-initialization \ | |
--with-mysql-includes="$M_LOCAL/include/" --with-mysql-libraries="$M_LOCAL/lib/mariadb/" \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/dspam.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS; unset LD_LIBRARY_PATH | |
make &>> "$M_LOGS/dspam.txt"; error | |
make install &>> "$M_LOGS/dspam.txt"; error | |
# I don't know my mysql_drv.h doesn't get copied to the include directory, so the quickest workaround is | |
# is to copy it over ourselves. | |
cp "$M_SOURCES/dspam/src/mysql_drv.h" "$M_LOCAL/include/dspam/" | |
;; | |
dspam-check) | |
cd "$M_SOURCES/dspam"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/dspam.txt"; error | |
;; | |
dspam-check-full) | |
cd "$M_SOURCES/dspam"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/dspam.txt"; error | |
;; | |
dspam-clean) | |
cd "$M_SOURCES/dspam"; error | |
make clean &>> "$M_LOGS/dspam.txt"; error | |
;; | |
dspam-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/dspam.txt"; error | |
;; | |
dspam-log) | |
cat "$M_LOGS/dspam.txt"; error | |
;; | |
dspam) | |
dspam "dspam-extract" | |
dspam "dspam-prep" | |
dspam "dspam-build" | |
if [ "$QUICK" != "yes" ]; then dspam "dspam-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/dspam.txt" | |
return $? | |
} | |
geoip() { | |
if [[ $1 == "geoip-extract" ]]; then | |
rm -f "$M_LOGS/geoip.txt"; error | |
elif [[ $1 != "geoip-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/geoip.txt" | |
fi | |
case "$1" in | |
geoip-extract) | |
extract $GEOIP "geoip" &>> "$M_LOGS/geoip.txt" | |
;; | |
geoip-prep) | |
cd "$M_SOURCES/geoip"; error | |
;; | |
geoip-build) | |
cd "$M_SOURCES/geoip"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before geoip.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/geoip.txt"; error | |
make &>> "$M_LOGS/geoip.txt" | |
if [ $? -ne 0 ]; then | |
# Fix for Ubuntu 12.04 LTS | |
echo "build failed... retrying with libtoolize" > "$M_LOGS/geoip.txt" | |
libtoolize -f &>> "$M_LOGS/geoip.txt"; error | |
./configure &>> "$M_LOGS/geoip.txt"; error | |
make &>> "$M_LOGS/geoip.txt"; error | |
fi | |
make install &>> "$M_LOGS/geoip.txt" | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
;; | |
geoip-check) | |
cd "$M_SOURCES/geoip"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/geoip.txt"; error | |
;; | |
geoip-check-full) | |
cd "$M_SOURCES/geoip"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/geoip.txt"; error | |
;; | |
geoip-clean) | |
cd "$M_SOURCES/geoip"; error | |
make clean &>> "$M_LOGS/geoip.txt"; error | |
;; | |
geoip-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/geoip.txt"; error | |
;; | |
geoip-log) | |
cat "$M_LOGS/geoip.txt"; error | |
;; | |
geoip) | |
geoip "geoip-extract" | |
geoip "geoip-prep" | |
geoip "geoip-build" | |
if [ "$QUICK" != "yes" ]; then geoip "geoip-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/geoip.txt" | |
return $? | |
} | |
clamav() { | |
if [[ $1 == "clamav-extract" ]]; then | |
rm -f "$M_LOGS/clamav.txt"; error | |
elif [[ $1 != "clamav-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/clamav.txt" | |
fi | |
case "$1" in | |
clamav-extract) | |
extract $CLAMAV "clamav" &>> "$M_LOGS/clamav.txt" | |
;; | |
clamav-prep) | |
# Patches cli_rarload() so it looks internally, and changes the name of cache_add() to cl_cache_add(). | |
cd "$M_SOURCES/clamav"; error | |
if [[ $CLAMAV == "clamav-0.97" ]]; then | |
cat "$M_PATCHES/clamav/"rarload_097.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
cat "$M_PATCHES/clamav/"cacheadd_097.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
cat "$M_PATCHES/clamav/"ulimit_097.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
elif [[ $CLAMAV =~ "clamav-0.97."[1-2] ]]; then | |
cat "$M_PATCHES/clamav/"cacheadd_0971.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
cat "$M_PATCHES/clamav/"rarload_0971.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
cat "$M_PATCHES/clamav/"ulimit_0971.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
cat "$M_PATCHES/clamav/"shutdown_0972.patch | patch -p3 --verbose &>> "$M_LOGS/clamav.txt"; error | |
elif [[ $CLAMAV =~ "clamav-0.98.1" ]]; then | |
# Add the shutdown and clean up functions. | |
cat "$M_PATCHES/clamav/"shutdown_0981.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
# Fix the rar library dynamic loading logic. | |
cat "$M_PATCHES/clamav/"rarload_0971.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
# Fix reference conflict with OpenSSL over the name SHA256_CTX. | |
SHA_FILES=`grep --files-with-matches --recursive SHA256_CTX *`; error | |
sed -i -e "s/SHA256_CTX/CL_SHA256_CTX/g" $SHA_FILES; error | |
unset SHA_FILES | |
elif [[ $CLAMAV =~ "clamav-0.98.7" ]]; then | |
# Add the shutdown and clean up functions and fix the rar library dynamic loading logic. | |
cat "$M_PATCHES/clamav/"shutdown_rarload_0984.patch | patch -p1 --fuzz=100 --verbose &>> "$M_LOGS/clamav.txt"; error | |
# Output the version number and not the git commit hash. | |
cat "$M_PATCHES/clamav/"version_0984.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
# Fix the zlib version check, so that 1.2.10+ doesn't trigger a spurious error. | |
cat "$M_PATCHES/clamav/"zlib_check_0992.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
else | |
# Add the shutdown and clean up functions and fix the rar library dynamic loading logic. | |
cat "$M_PATCHES/clamav/"shutdown_rarload_01001.patch | patch -p1 --fuzz=100 --verbose &>> "$M_LOGS/clamav.txt"; error | |
# Output the version number and not the git commit hash. | |
cat "$M_PATCHES/clamav/"version_0984.patch | patch -p1 --verbose &>> "$M_LOGS/clamav.txt"; error | |
fi | |
# Fix reference conflict with libpng over the filename png.h. | |
PNG_FILES=`grep --files-with-matches --recursive "png\\.h" *`; error | |
sed -i -e "s/png\.h/clpng\.h/g" $PNG_FILES; error | |
mv libclamav/png.h libclamav/clpng.h; error | |
unset PNG_FILES | |
;; | |
clamav-build) | |
cd "$M_SOURCES/clamav"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before clamav.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libpcre2-8.so ] || [ ! -f "$M_LDPATH"/libpcre2-8.a ] || [ ! -f "$M_PKGPATH"/libpcre2-8.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build pcre before pcre.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libxml2.so ] || [ ! -f "$M_LDPATH"/libxml2.a ] || [ ! -f "$M_PKGPATH"/libxml-2.0.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build xml2 before clamav.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libbz2.so ] || [ ! -f "$M_LDPATH"/libbz2.a ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build bzip2 before clamav.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -DGNU_SOURCE $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -DGNU_SOURCE $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -DGNU_SOURCE $M_CPPFLAGS" | |
# --disable-mempool | |
./configure \ | |
--enable-check --enable-static --enable-shared --disable-llvm --disable-silent-rules \ | |
--with-openssl="$M_LOCAL" --with-zlib="$M_LOCAL" --with-xml="$M_LOCAL" --with-libcurl="$M_LOCAL" \ | |
--with-pcre="$M_LOCAL" --with-systemdsystemunitdir="no" \ | |
--with-libbz2-prefix="$M_LOCAL" --with-libcheck-prefix="$M_LOCAL" \ | |
--prefix="$M_LOCAL" --exec-prefix="$M_LOCAL" --libdir="$M_LOCAL/lib" &>> "$M_LOGS/clamav.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
if [[ $CLAMAV =~ "clamav-0.9"[7-9]"."[1-9] ]]; then | |
# The check3_clamd.sh script will fail if LLVM is disabled. | |
# Since we are not currently using clamd, the offending check script is replaced. | |
# The exit value 77 indicates the check was skipped. | |
printf "\x23\x21/bin/bash\nexit 77\n" > "$M_SOURCES/clamav/unit_tests/check2_clamd.sh"; error | |
printf "\x23\x21/bin/bash\nexit 77\n" > "$M_SOURCES/clamav/unit_tests/check3_clamd.sh"; error | |
printf "\x23\x21/bin/bash\nexit 77\n" > "$M_SOURCES/clamav/unit_tests/check4_clamd.sh"; error | |
fi | |
make --jobs=4 &>> "$M_LOGS/clamav.txt"; error | |
make install &>> "$M_LOGS/clamav.txt"; error | |
;; | |
clamav-check) | |
cd "$M_SOURCES/clamav"; error | |
# Remove read perms for the accdenied file so the test works properly. | |
if [[ -e "$M_SOURCES/clamav/unit_tests/accdenied" ]] && [[ ! -f "$M_SOURCES/clamav/unit_tests/accdenied" ]]; then | |
chmod --changes u-r "$M_SOURCES/clamav/unit_tests/accdenied" &>> "$M_LOGS/clamav.txt"; error | |
fi | |
# Increase the default test timeout to 20 minutes. | |
export T="1200" | |
make check &>> "$M_LOGS/clamav.txt"; error | |
unset T | |
# Add read perms to accdenied file so it can be checked into the version control repo. | |
if [[ -e "$M_SOURCES/clamav/unit_tests/accdenied" ]] && [[ ! -f "$M_SOURCES/clamav/unit_tests/accdenied" ]]; then | |
chmod --changes u+r "$M_SOURCES/clamav/unit_tests/accdenied" &>> "$M_LOGS/clamav.txt"; error | |
fi | |
;; | |
clamav-check-full) | |
cd "$M_SOURCES/clamav"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
# Remove read perms for the accdenied file so the test works properly. | |
if [[ -e "$M_SOURCES/clamav/unit_tests/accdenied" ]] && [[ ! -f "$M_SOURCES/clamav/unit_tests/accdenied" ]]; then | |
chmod --changes u-r "$M_SOURCES/clamav/unit_tests/accdenied" &>> "$M_LOGS/clamav.txt"; error | |
fi | |
# Reset the session limits. | |
ulimit -f unlimited || ulimit -i 77233 || ulimit -l 64 || ulimit -m unlimited || ulimit -n 1024 || ulimit -q 819200 || ulimit -r 0 || ulimit -s 10240 || ulimit -c 0 || ulimit -d unlimited || ulimit -e 0 || ulimit -t unlimited || ulimit -u 77233 || ulimit -v unlimited || ulimit -x unlimited || ulimit -p 8 | |
# Increase the default test timeout to 1 hour. | |
export T="3600" | |
make check VG=1 HG=1 &>> "$M_LOGS/clamav.txt"; error | |
unset T | |
# Add read permissions to accdenied file so it can be checked into the version control repo. | |
if [[ -e "$M_SOURCES/clamav/unit_tests/accdenied" ]] && [[ ! -f "$M_SOURCES/clamav/unit_tests/accdenied" ]]; then | |
chmod --changes u-r "$M_SOURCES/clamav/unit_tests/accdenied" &>> "$M_LOGS/clamav.txt"; error | |
fi | |
;; | |
clamav-clean) | |
cd "$M_SOURCES/clamav"; error | |
make clean &>> "$M_LOGS/clamav.txt"; error | |
;; | |
clamav-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/clamav.txt"; error | |
;; | |
clamav-log) | |
cat "$M_LOGS/clamav.txt"; error | |
;; | |
clamav) | |
clamav "clamav-extract" | |
clamav "clamav-prep" | |
clamav "clamav-build" | |
if [ "$QUICK" != "yes" ]; then clamav "clamav-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/clamav.txt" | |
return $? | |
} | |
# VERSION=2.3.7 | |
# git clone https://github.com/MariaDB/mariadb-connector-c | |
# cd mariadb-connector-c | |
# git checkout v_${VERSION} | |
# tar czvf ~/Lavabit/magma/lib/archives/mariadb-connector-c-${VERSION}.tar.gz --transform 's,^,mariadb-connector-c-${VERSION}/,' * | |
mariadb() { | |
if [[ $1 == "mariadb-extract" ]]; then | |
rm -f "$M_LOGS/mariadb.txt"; error | |
elif [[ $1 != "mariadb-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/mariadb.txt" | |
fi | |
case "$1" in | |
mariadb-extract) | |
extract $MARIADB "mariadb" &>> "$M_LOGS/mariadb.txt" | |
;; | |
mariadb-prep) | |
cd "$M_SOURCES/mariadb"; error | |
cat "$M_PATCHES/mariadb/"2.3.7_get_connector_info.patch | patch -p1 --verbose &>> "$M_LOGS/mariadb.txt"; error | |
;; | |
mariadb-build) | |
cd "$M_SOURCES/mariadb"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before mariadb.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libcrypto.so ] || [ ! -f "$M_LDPATH"/libcrypto.a ] || [ ! -f "$M_PKGPATH"/libcrypto.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before mariadb.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libssl.so ] || [ ! -f "$M_LDPATH"/libssl.a ] || [ ! -f "$M_PKGPATH"/libssl.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build openssl before mariadb.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
mkdir build && cd build && cmake -DWITH_UNIT_TESTS=ON -DWITH_OPENSSL=ON -DWITH_EXTERNAL_ZLIB=ON \ | |
-DOPENSSL_SSL_LIBRARY="$M_LOCAL/lib/libssl.so" -DOPENSSL_CRYPTO_LIBRARY="$M_LOCAL/lib/libcrypto.so" -DZLIB_LIBRARY="$M_LOCAL/lib/libz.so" \ | |
-DZLIB_INCLUDE_DIR="$M_LOCAL/include" -DOPENSSL_INCLUDE_DIR="$M_LOCAL/include/openssl" \ | |
-DCMAKE_INSTALL_PREFIX="$M_LOCAL" .. &>> "$M_LOGS/mariadb.txt"; error | |
make VERBOSE=1 &>> "$M_LOGS/mariadb.txt"; error | |
make install &>> "$M_LOGS/mariadb.txt"; error | |
# Older versions of this script used a symbolic link which needs to be unlinked first. | |
if [ -L "$M_LOCAL/include/mysql" ]; then | |
unlink "$M_LOCAL/include/mysql" | |
fi | |
# Duplicate the header files into a mysql subdirectory so that legacy include directives still function properly. | |
cp --force --recursive "$M_LOCAL/include/mariadb" "$M_LOCAL/include/mysql" | |
;; | |
mariadb-check) | |
cd "$M_SOURCES/mariadb"; error | |
# cp /etc/pki/sql/certs/ca.pem "$M_SOURCES/mariadb"/unittest/libmariadb/certs/ca-cert.pem ; error | |
# openssl x509 -in /etc/pki/sql/certs/server.pem -sha1 -fingerprint -noout | awk -F'=' '{print $2}'| tr -d ":" > "$M_SOURCES/mariadb"/unittest/libmariadb/fingerprint.list ; error | |
# sudo cp unittest/libmariadb/certs/ca-cert.pem /etc/pki/sql/certs/ca.pem | |
# sudo cp unittest/libmariadb/certs/server-cert.pem /etc/pki/sql/certs/server.pem | |
# sudo cp unittest/libmariadb/certs/server-key.pem /etc/pki/sql/private/server.pem | |
# cd build/unittest/libmariadb/ | |
# echo "DROP SCHEMA IF EXISTS \`test\`;" | mysql ; error | |
# echo "CREATE SCHEMA \`test\` DEFAULT CHARACTER SET utf8;" | mysql ; error | |
export MYSQL_TEST_HOST=127.0.0.1 | |
export MYSQL_TEST_USER=mytool | |
export MYSQL_TEST_PASSWD=aComplex1 | |
export MYSQL_TEST_DB=Sandbox | |
export MYSQL_TEST_PORT=3306 | |
export MYSQL_TEST_SOCKET=/var/lib/mysql/mysql.sock | |
export MYSQL_TEST_BINDADDR=127.0.0.1 | |
# ctest -v -VV &>> "$M_LOGS/mariadb.txt"; error | |
unset MYSQL_TEST_HOST; unset MYSQL_TEST_USER; unset MYSQL_TEST_PASSWD; unset MYSQL_TEST_DB; unset MYSQL_TEST_PORT; unset MYSQL_TEST_BINDADDR | |
;; | |
mariadb-check-full) | |
cd "$M_SOURCES/mariadb"; error | |
# cp /etc/pki/sql/certs/ca.pem "$M_SOURCES/mariadb"/unittest/libmariadb/certs/ca-cert.pem ; error | |
# openssl x509 -in /etc/pki/sql/certs/server.pem -sha1 -fingerprint -noout | awk -F'=' '{print $2}'| tr -d ":" > "$M_SOURCES/mariadb"/unittest/libmariadb/fingerprint.list ; error | |
# sudo cp unittest/libmariadb/certs/ca-cert.pem /etc/pki/sql/certs/ca.pem | |
# sudo cp unittest/libmariadb/certs/server-cert.pem /etc/pki/sql/certs/server.pem | |
# sudo cp unittest/libmariadb/certs/server-key.pem /etc/pki/sql/private/server.pem | |
# cd build/unittest/libmariadb/ | |
# echo "DROP SCHEMA IF EXISTS \`test\`;" | mysql ; error | |
# echo "CREATE SCHEMA \`test\` DEFAULT CHARACTER SET utf8;" | mysql ; error | |
export MYSQL_TEST_HOST=127.0.0.1 | |
export MYSQL_TEST_USER=mytool | |
export MYSQL_TEST_PASSWD=aComplex1 | |
export MYSQL_TEST_DB=Sandbox | |
export MYSQL_TEST_PORT=3306 | |
export MYSQL_TEST_SOCKET=/var/lib/mysql/mysql.sock | |
export MYSQL_TEST_BINDADDR=127.0.0.1 | |
# ctest -v -VV &>> "$M_LOGS/mariadb.txt"; error | |
unset MYSQL_TEST_HOST; unset MYSQL_TEST_USER; unset MYSQL_TEST_PASSWD; unset MYSQL_TEST_DB; unset MYSQL_TEST_PORT; unset MYSQL_TEST_BINDADDR | |
;; | |
mariadb-clean) | |
cd "$M_SOURCES/mariadb"; error | |
cd build && make clean &>> "$M_LOGS/mariadb.txt"; error | |
;; | |
mariadb-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/mariadb.txt"; error | |
;; | |
mariadb-log) | |
cat "$M_LOGS/mariadb.txt"; error | |
;; | |
mariadb) | |
mariadb "mariadb-extract" | |
mariadb "mariadb-prep" | |
mariadb "mariadb-build" | |
if [ "$QUICK" != "yes" ]; then mariadb "mariadb-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/mariadb.txt" | |
return $? | |
} | |
checker() { | |
if [[ $1 == "checker-extract" ]]; then | |
rm -f "$M_LOGS/checker.txt"; error | |
elif [[ $1 != "checker-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/checker.txt" | |
fi | |
case "$1" in | |
checker-extract) | |
extract $CHECKER "checker" &>> "$M_LOGS/checker.txt" | |
;; | |
checker-prep) | |
cd "$M_SOURCES/checker"; error | |
# The automake requirement is changed from 1.11.2 to 1.11.1 so libcheck will build on CentOS 6. Systems with | |
# non-POSIX archivers might require the AM_PROG_AR macro to work, which was added to automake in version 1.11.2. | |
# For those systems, this patch might break things in unpredictable ways, assuming that automake is indeed 1.11.1. | |
cat "$M_PATCHES/checker/"checker-automake-version.patch | patch -p1 --verbose &>> "$M_LOGS/checker.txt"; error | |
# Valgrind will complain about uninitialized bytes if we don't memset the timer variable before using it. | |
cat "$M_PATCHES/checker/"checker-timer-memset.patch | patch -p1 --verbose &>> "$M_LOGS/checker.txt"; error | |
;; | |
checker-build) | |
cd "$M_SOURCES/checker"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O0 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O0 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O0 $M_CPPFLAGS" | |
autoreconf --install &>> "$M_LOGS/checker.txt"; error | |
./configure --disable-subunit --enable-timer-replacement --enable-snprintf-replacement \ | |
--enable-fork --disable-timeout-tests --prefix="$M_LOCAL" &>> "$M_LOGS/checker.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make &>> "$M_LOGS/checker.txt"; error | |
make install &>> "$M_LOGS/checker.txt"; error | |
;; | |
checker-check) | |
cd "$M_SOURCES/checker"; error | |
export CK_DEFAULT_TIMEOUT=0; error | |
export CK_TIMEOUT_MULTIPLIER=10; error | |
export PATH="$M_BNPATH:$PATH"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
make check &>> "$M_LOGS/checker.txt"; error | |
unset CK_DEFAULT_TIMEOUT; unset CK_TIMEOUT_MULTIPLIER | |
;; | |
checker-check-full) | |
cd "$M_SOURCES/checker"; error | |
export CK_DEFAULT_TIMEOUT=0; error | |
export CK_TIMEOUT_MULTIPLIER=10; error | |
export PATH="$M_BNPATH:$PATH"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
make check &>> "$M_LOGS/checker.txt"; error | |
unset CK_DEFAULT_TIMEOUT; unset CK_TIMEOUT_MULTIPLIER | |
;; | |
checker-clean) | |
cd "$M_SOURCES/checker"; error | |
make clean &>> "$M_LOGS/checker.txt"; error | |
;; | |
checker-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/checker.txt"; error | |
;; | |
checker-log) | |
cat "$M_LOGS/checker.txt"; error | |
;; | |
checker) | |
checker "checker-extract" | |
checker "checker-prep" | |
checker "checker-build" | |
if [ "$QUICK" != "yes" ]; then checker "checker-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n $1" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/checker.txt" | |
return $? | |
} | |
openssl() { | |
if [[ $1 == "openssl-extract" ]]; then | |
rm -f "$M_LOGS/openssl.txt"; error | |
elif [[ $1 != "openssl-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/openssl.txt" | |
fi | |
case "$1" in | |
openssl-extract) | |
extract $OPENSSL "openssl" &>> "$M_LOGS/openssl.txt" | |
;; | |
openssl-prep) | |
cd "$M_SOURCES/openssl"; error | |
if [[ $OPENSSL =~ "openssl-1.0.2" ]]; then | |
cat "$M_PATCHES/openssl/"1.0.2_curve25519_ed25519.patch | patch -p1 --verbose &>> "$M_LOGS/openssl.txt"; error | |
fi | |
;; | |
openssl-build) | |
# OpenSSL does not use environment variables to pickup additional compiler flags | |
# The -d param specifies the creation of a debug build | |
# See here for reasoning behind openssl-specific linker flags: | |
# https://mta.openssl.org/pipermail/openssl-users/2015-April/001053.html | |
cd "$M_SOURCES/openssl"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before openssl.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
grep -E "CentOS Linux release 7|Red Hat Enterprise.*release 7" /etc/system-release >& /dev/null | |
if [ $? == 0 ]; then | |
export CONFIGOPTS='-fno-merge-debug-strings ' | |
fi | |
./config -d shared zlib no-asm --prefix="$M_LOCAL" --openssldir="share" --libdir="lib" \ | |
-I"$M_LOCAL/include/" -O $CONFIGOPTS -g3 -rdynamic -fPIC -DPURIFY -D_FORTIFY_SOURCE=2 \ | |
-L"$M_LOCAL/lib/" -Wl,-rpath,"$M_LOCAL/lib/" &>> "$M_LOGS/openssl.txt"; error | |
make depend &>> "$M_LOGS/openssl.txt"; error | |
make &>> "$M_LOGS/openssl.txt"; error | |
make install &>> "$M_LOGS/openssl.txt"; error | |
# Fool Autotools checks into thinking this is a normal OpenSSL install (e.g., ClamAV) | |
if [ ! -d lib ]; then ln -s `pwd` lib ; fi | |
;; | |
openssl-check) | |
cd "$M_SOURCES/openssl"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make test &>> "$M_LOGS/openssl.txt"; error | |
;; | |
openssl-check-full) | |
cd "$M_SOURCES/openssl"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make test &>> "$M_LOGS/openssl.txt"; error | |
;; | |
openssl-clean) | |
cd "$M_SOURCES/openssl"; error | |
make clean &>> "$M_LOGS/openssl.txt"; error | |
;; | |
openssl-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/openssl.txt"; error | |
;; | |
openssl-log) | |
cat "$M_LOGS/openssl.txt"; error | |
;; | |
openssl) | |
openssl "openssl-extract" | |
openssl "openssl-prep" | |
openssl "openssl-build" | |
if [ "$QUICK" != "yes" ]; then openssl "openssl-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/openssl.txt" | |
return $? | |
} | |
googtap() { | |
if [[ $1 == "googtap-extract" ]]; then | |
rm -f "$M_LOGS/googtap.txt"; error | |
elif [[ $1 != "googtap-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/googtap.txt" | |
fi | |
case "$1" in | |
googtap-extract) | |
extract $GOOGTAP "googtap" &>> "$M_LOGS/googtap.txt" | |
;; | |
googtap-prep) | |
cd "$M_SOURCES/googtap"; error | |
;; | |
googtap-build) | |
cd "$M_SOURCES/googtap"; error | |
;; | |
googtap-check) | |
cd "$M_SOURCES/googtap"; error | |
;; | |
googtap-check-full) | |
cd "$M_SOURCES/googtap"; error | |
;; | |
googtap-clean) | |
cd "$M_SOURCES/googtap"; error | |
;; | |
googtap-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/googtap.txt"; error | |
;; | |
googtap-log) | |
cat "$M_LOGS/googtap.txt"; error | |
;; | |
googtap) | |
googtap "googtap-extract" | |
googtap "googtap-prep" | |
googtap "googtap-build" | |
if [ "$QUICK" != "yes" ]; then googtap "googtap-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/googtap.txt" | |
return $? | |
} | |
googtest() { | |
if [[ $1 == "googtest-extract" ]]; then | |
rm -f "$M_LOGS/googtest.txt"; error | |
elif [[ $1 != "googtest-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/googtest.txt" | |
fi | |
case "$1" in | |
googtest-extract) | |
extract $GOOGTEST "googtest" &>> "$M_LOGS/googtest.txt" | |
;; | |
googtest-prep) | |
cd "$M_SOURCES/googtest"; error | |
;; | |
googtest-build) | |
cd "$M_SOURCES/googtest"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O $M_CXXFLAGS" | |
autoreconf --install &>> "$M_LOGS/googtest.txt"; error | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/googtest.txt"; error | |
unset CFLAGS; unset CXXFLAGS | |
make &>> "$M_LOGS/googtest.txt"; error | |
;; | |
googtest-check) | |
cd "$M_SOURCES/googtest"; error | |
make check &>> "$M_LOGS/googtest.txt"; error | |
if [ ! -d build ]; then mkdir build ; error ; fi | |
cd build; error | |
cmake -Dgtest_build_samples=ON "$M_SOURCES/googtest" &>> "$M_LOGS/googtest.txt"; error | |
make &>> "$M_LOGS/googtest.txt"; error | |
./sample1_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample2_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample3_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample4_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample5_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample6_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample7_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample8_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample9_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample10_unittest &>> "$M_LOGS/googtest.txt"; error | |
;; | |
googtest-check-full) | |
cd "$M_SOURCES/googtest"; error | |
make check &>> "$M_LOGS/googtest.txt"; error | |
if [ ! -d build ]; then mkdir build ; error ; fi | |
cd build; error | |
cmake -Dgtest_build_samples=ON "$M_SOURCES/googtest" &>> "$M_LOGS/googtest.txt"; error | |
make &>> "$M_LOGS/googtest.txt"; error | |
./sample1_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample2_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample3_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample4_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample5_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample6_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample7_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample8_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample9_unittest &>> "$M_LOGS/googtest.txt"; error | |
./sample10_unittest &>> "$M_LOGS/googtest.txt"; error | |
;; | |
googtest-clean) | |
cd "$M_SOURCES/googtest"; error | |
make clean &>> "$M_LOGS/googtest.txt"; error | |
;; | |
googtest-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/googtest.txt"; error | |
;; | |
googtest-log) | |
cat "$M_LOGS/googtest.txt"; error | |
;; | |
googtest) | |
googtest "googtest-extract" | |
googtest "googtest-prep" | |
googtest "googtest-build" | |
if [ "$QUICK" != "yes" ]; then googtest "googtest-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/googtest.txt" | |
return $? | |
} | |
jansson() { | |
if [[ $1 == "jansson-extract" ]]; then | |
rm -f "$M_LOGS/jansson.txt"; error | |
elif [[ $1 != "jansson-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/jansson.txt" | |
fi | |
case "$1" in | |
jansson-extract) | |
extract $JANSSON "jansson" &>> "$M_LOGS/jansson.txt" | |
;; | |
jansson-prep) | |
cd "$M_SOURCES/jansson"; error | |
cat "$M_PATCHES/jansson/"jansson-version.patch | patch -p1 --batch &>> "$M_LOGS/jansson.txt"; error | |
if [ -e "/usr/bin/sphinx-1.0-build" ]; then | |
cat "$M_PATCHES/jansson/"jansson-sphinx.patch | patch -p3 --batch &>> "$M_LOGS/jansson.txt"; error | |
fi | |
echo "$M_PATCHES/jansson/"jansson-inlines.patch &>> "$M_LOGS/jansson.txt"; error | |
cat "$M_PATCHES/jansson/"jansson-inlines.patch | patch -p1 --batch &>> "$M_LOGS/jansson.txt"; error | |
echo "$M_PATCHES/jansson/"jansson-optional-params.patch &>> "$M_LOGS/jansson.txt"; error | |
cat "$M_PATCHES/jansson/"jansson-optional-params.patch | patch -p1 --batch &>> "$M_LOGS/jansson.txt"; error | |
echo "$M_PATCHES/jansson/"jansson-typeof-string.patch &>> "$M_LOGS/jansson.txt"; error | |
cat "$M_PATCHES/jansson/"jansson-typeof-string.patch | patch -p1 --batch &>> "$M_LOGS/jansson.txt"; error | |
echo "$M_PATCHES/jansson/"jansson-error-text-length.patch &>> "$M_LOGS/jansson.txt"; error | |
cat "$M_PATCHES/jansson/"jansson-error-text-length.patch | patch -p1 --batch &>> "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-build) | |
cd "$M_SOURCES/jansson"; error | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 -O $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/jansson.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS | |
make &>> "$M_LOGS/jansson.txt"; error | |
if [ -e "/usr/bin/sphinx-1.0-build" ] || [ -e "/usr/bin/sphinx-build" ]; then | |
make html &>> "$M_LOGS/jansson.txt"; error | |
fi | |
make install &>> "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-check) | |
cd "$M_SOURCES/jansson"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-check-full) | |
cd "$M_SOURCES/jansson"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-clean) | |
cd "$M_SOURCES/jansson"; error | |
make clean &>> "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/jansson.txt"; error | |
;; | |
jansson-log) | |
cat "$M_LOGS/jansson.txt"; error | |
;; | |
jansson) | |
jansson "jansson-extract" | |
jansson "jansson-prep" | |
jansson "jansson-build" | |
if [ "$QUICK" != "yes" ]; then jansson "jansson-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/jansson.txt" | |
return $? | |
} | |
freetype() { | |
if [[ $1 == "freetype-extract" ]]; then | |
rm -f "$M_LOGS/freetype.txt"; error | |
elif [[ $1 != "freetype-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/freetype.txt" | |
fi | |
case "$1" in | |
freetype-extract) | |
extract $FREETYPE "freetype" &>> "$M_LOGS/freetype.txt" | |
;; | |
freetype-prep) | |
cd "$M_SOURCES/freetype"; error | |
;; | |
freetype-build) | |
cd "$M_SOURCES/freetype"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before freetype.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libpng.so ] || [ ! -f "$M_LDPATH"/libpng.a ] || [ ! -f "$M_PKGPATH"/libpng.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build png before freetype.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libbz2.so ] || [ ! -f "$M_LDPATH"/libbz2.a ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build bzip2 before freetype.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
# We need to override the PNG flags, otherwise the system include files/libraries might be used by mistake. | |
export PKG_CONFIG_LIBDIR="$M_PKGPATH" | |
export LIBPNG_LIBS=" `pkg-config --libs libpng` " | |
export LIBPNG_CFLAGS=" `pkg-config --cflags libpng` " | |
unset PKG_CONFIG_LIBDIR | |
./configure --prefix="$M_LOCAL" --without-harfbuzz &>> "$M_LOGS/freetype.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS; unset LIBPNG_LIBS; unset LIBPNG_CFLAGS | |
make --jobs=4 &>> "$M_LOGS/freetype.txt"; error | |
make install &>> "$M_LOGS/freetype.txt"; error | |
;; | |
freetype-check) | |
cd "$M_SOURCES/freetype"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/freetype.txt"; error | |
;; | |
freetype-check-full) | |
cd "$M_SOURCES/freetype"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/freetype.txt"; error | |
;; | |
freetype-clean) | |
cd "$M_SOURCES/freetype"; error | |
make clean &>> "$M_LOGS/freetype.txt"; error | |
;; | |
freetype-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/freetype.txt"; error | |
;; | |
freetype-log) | |
cat "$M_LOGS/freetype.txt"; error | |
;; | |
freetype) | |
freetype "freetype-extract" | |
freetype "freetype-prep" | |
freetype "freetype-build" | |
if [ "$QUICK" != "yes" ]; then freetype "freetype-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/freetype.txt" | |
return $? | |
} | |
utf8proc() { | |
if [[ $1 == "utf8proc-extract" ]]; then | |
rm -f "$M_LOGS/utf8proc.txt"; error | |
elif [[ $1 != "utf8proc-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/utf8proc.txt" | |
fi | |
case "$1" in | |
utf8proc-extract) | |
extract $UTF8PROC "utf8proc" &>> "$M_LOGS/utf8proc.txt" | |
tar xzvf "$M_ARCHIVES/$UTF8PROCTEST.tar.gz" --directory="$M_SOURCES/utf8proc/data" &>> "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc-prep) | |
cd "$M_SOURCES/utf8proc"; error | |
if [[ $UTF8PROC =~ "utf8proc-1.3.1" ]]; then | |
cat "$M_PATCHES/utf8proc/"utf8proc.release.version.patch | patch -p1 --verbose &>> "$M_LOGS/utf8proc.txt"; error | |
fi | |
;; | |
utf8proc-build) | |
cd "$M_SOURCES/utf8proc"; error | |
if [ `which curl &> /dev/null; echo $?` != 0 ] && [ ! -f "$M_BNPATH"/curl ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build curl before utf8proc.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
elif [ `which curl &> /dev/null; echo $?` != 0 ]; then | |
alias curl="$M_BNPATH"/curl | |
fi | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
make prefix="$M_LOCAL" &>> "$M_LOGS/utf8proc.txt"; error | |
make prefix="$M_LOCAL" install &>> "$M_LOGS/utf8proc.txt"; error | |
unset CFLAGS; | |
;; | |
utf8proc-check) | |
cd "$M_SOURCES/utf8proc"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc-check-full) | |
cd "$M_SOURCES/utf8proc"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc-clean) | |
cd "$M_SOURCES/utf8proc"; error | |
make clean &>> "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc-log) | |
cat "$M_LOGS/utf8proc.txt"; error | |
;; | |
utf8proc) | |
utf8proc "utf8proc-extract" | |
utf8proc "utf8proc-prep" | |
utf8proc "utf8proc-build" | |
utf8proc "utf8proc-check" | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/spf2.txt" | |
return $? | |
} | |
memcached() { | |
if [[ $1 == "memcached-extract" ]]; then | |
rm -f "$M_LOGS/memcached.txt"; error | |
elif [[ $1 != "memcached-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/memcached.txt" | |
fi | |
case "$1" in | |
memcached-extract) | |
extract $MEMCACHED "memcached" &>> "$M_LOGS/memcached.txt" | |
;; | |
memcached-prep) | |
cd "$M_SOURCES/memcached"; error | |
if [[ $MEMCACHED == "libmemcached-0.50" ]]; then | |
cat "$M_PATCHES/memcached/951_950.diff" | patch -p0 -verbose &>> "$M_LOGS/memcached.txt"; error; | |
elif [[ $MEMCACHED == "libmemcached-1.0.8" ]]; then | |
# Add the shutdown and clean up functions. | |
cat "$M_PATCHES/memcached/"srandom_fix.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
else | |
# Fix memcached memory function unit tests. | |
cat "$M_PATCHES/memcached/"memfunction_test_fix_1.0.18.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Disable portable instruction executables so profiling capable builds work properly. Technically this is only | |
# needed so "-pg" can be used, even though the "-pg" flag isn't enabled by default. | |
cat "$M_PATCHES/memcached/"configure_1.0.18.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# On some IPv6 systems localhost resolves to ::1 which results in the memcached binary getting port binding failures, | |
# and without a server to test against, the unit tests will fail. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_ipv6_and_udp_test_failures.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Fix the return code comparison for the missing binary unit test. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_unittest_doesnotexist.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Overhauled dump function, fixing unit test failures. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_dump_function.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# The memcached dump code doesn't work properly on all platforms. This patch will rule out compiler | |
# optimization as the culprit. | |
cat "$M_PATCHES/memcached/"1.0.18_disable_compiler_optimizations.patch | patch -p1 --set-time --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Remove the invalid comparison test triggering the need for -fpermissive. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_invalid_comparison.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Some non-GNU platforms need a couple of syntax tweaks to compile properly. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_alt_platform_build_errors.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# If the ketama algorithm is being used, and the server context is reset, it will leave behind variables which will | |
# trigger a segmentation fault when the context is reused. This patch fixes the problem by properly clearing the variables. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_ketama_segfaults.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Handle systems which require the use of -nostdlib by adding -lpthread to the linker flags. | |
cat "$M_PATCHES/memcached/"1.0.18_fix_pthread_linking.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Return key responses from lru_crawler requests. | |
cat "$M_PATCHES/memcached/"1.0.18_add_key_response_support.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Enable parallel builds. Note man pages must be made with --jobs=1 or it will fail. | |
cat "$M_PATCHES/memcached/"1.0.18_enable_parallel_build.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# We need to reset the modification time on these files after applying the parallelization patch, or an autoreconf will be triggered. | |
touch -t 201402090552.42 Makefile.am && touch -t 201402090552.42 man/include.am | |
# New versions of aclocal fail if the AC_CONFIG_AUX_DIR directive follows the AC_PROG_{CC,CXX} lines. | |
# cat "$M_PATCHES/memcached/"1.0.18_fix_aclocal_errors.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
# Automatically retry the calls to the dump function before allowing a count value of 0 to fail the test. | |
# cat "$M_PATCHES/memcached/"1.0.18_retry_failed_dump_tests.patch | patch -p1 --verbose &>> "$M_LOGS/memcached.txt"; error | |
fi | |
;; | |
memcached-build) | |
cd "$M_SOURCES/memcached"; error | |
# # The libmemcached code (as of version 1.0.18) includes comparisons between integers and pointers. This violates | |
# # the ISO C++ standard, which means conformant compilers will fail without the -fpermissive command line option. | |
# printf "\n#include <stdlib.h>\n\nint main(int argc, char *argv[]) { return 0; }\n\n" | gcc -o /dev/null -x c++ -fpermissive - &> /dev/null | |
# if [ $? -eq 0 ]; then | |
# M_EXTRA="-fpermissive" | |
# else | |
# M_EXTRA="" | |
# fi | |
export CFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
# Recent versions of gcc require libmemcached to be explicitly linked with libm.so and libstdc++.so, and configure | |
# doesn't appear to include these libraries automatically. | |
export LIBS="-lm -lstdc++" | |
# For some reason, the unit tests will fail if this environment variable is configured. | |
unset MEMCACHED_SERVERS | |
# export GEARMAND_BINARY="/usr/local/sbin/gearmand" | |
# export MEMCACHED_BINARY="/usr/local/bin/memcached" | |
# --with-memcached="/usr/local/bin/memcached" | |
# Options used for 1.0.3+ | |
./configure --disable-silent-rules --disable-dtrace --disable-sasl --enable-static --enable-shared --with-pic \ | |
--prefix="$M_LOCAL" &>> "$M_LOGS/memcached.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LIBS; unset M_EXTRA | |
# unset GEARMAND_BINARY; unset MEMCACHED_BINARY | |
make --jobs=4 &>> "$M_LOGS/memcached.txt"; error | |
make install &>> "$M_LOGS/memcached.txt"; error | |
;; | |
memcached-check) | |
cd "$M_SOURCES/memcached"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
# For some reason, the unit tests will fail when using this environment variable to find the memcached server. | |
unset MEMCACHED_SERVERS | |
# Doesn't appear to be necessary anymore... | |
# rm -vf /tmp/memcached.pid* &>> "$M_LOGS/memcached.txt"; error | |
# For some reason the included version of memcached is being used and causing the unit tests to fail, so overwrite the binary | |
# cp /usr/local/bin/memcached "$M_SOURCES/memcached/memcached" | |
make check &>> "$M_LOGS/memcached.txt"; error | |
;; | |
memcached-check-full) | |
cd "$M_SOURCES/memcached"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
# For some reason, the unit tests will fail when using this environment variable to find the memcached server. | |
unset MEMCACHED_SERVERS | |
# Doesn't appear to be necessary anymore... | |
# rm -vf /tmp/memcached.pid* &>> "$M_LOGS/memcached.txt"; error | |
make check &>> "$M_LOGS/memcached.txt"; error | |
make valgrind &>> "$M_LOGS/memcached.txt"; error | |
make helgrind &>> "$M_LOGS/memcached.txt"; error | |
make drd &>> "$M_LOGS/memcached.txt"; error | |
;; | |
memcached-clean) | |
cd "$M_SOURCES/memcached"; error | |
make clean &>> "$M_LOGS/memcached.txt"; error | |
;; | |
memcached-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/memcached.txt"; error | |
;; | |
memcached-log) | |
cat "$M_LOGS/memcached.txt"; error | |
;; | |
memcached) | |
memcached "memcached-extract" | |
memcached "memcached-prep" | |
memcached "memcached-build" | |
if [ "$QUICK" != "yes" ]; then memcached "memcached-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/memcached.txt" | |
return $? | |
} | |
tokyocabinet() { | |
if [[ $1 == "tokyocabinet-extract" ]]; then | |
rm -f "$M_LOGS/tokyocabinet.txt"; error | |
elif [[ $1 != "tokyocabinet-log" ]]; then | |
date +"%n%nStarted $1 at %r on %x%n%n" &>> "$M_LOGS/tokyocabinet.txt" | |
fi | |
case "$1" in | |
tokyocabinet-extract) | |
extract $TOKYOCABINET "tokyocabinet" &>> "$M_LOGS/tokyocabinet.txt" | |
;; | |
tokyocabinet-prep) | |
cd "$M_SOURCES/tokyocabinet" &>> "$M_LOGS/tokyocabinet.txt"; error | |
# Adds tctreegetboth() and tcndbgetboth(). | |
cat "$M_PATCHES/tokyocabinet/"getboth.patch | patch -p1 --verbose &>> "$M_LOGS/tokyocabinet.txt"; error | |
cat "$M_PATCHES/tokyocabinet/"tcndbdup.patch | patch -p3 --verbose &>> "$M_LOGS/tokyocabinet.txt"; error | |
cat "$M_PATCHES/tokyocabinet/"fileopts.patch | patch -p3 --verbose &>> "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-build) | |
cd "$M_SOURCES/tokyocabinet"; error | |
if [ ! -f "$M_LDPATH"/libz.so ] || [ ! -f "$M_LDPATH"/libz.a ] || [ ! -f "$M_PKGPATH"/zlib.pc ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build zlib before tokyocabinet.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
if [ ! -f "$M_LDPATH"/libbz2.so ] || [ ! -f "$M_LDPATH"/libbz2.a ]; then | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 3 || true; printf "\nPlease build bzip2 before tokyocabinet.\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
return 3 | |
fi | |
export LDFLAGS="-L$M_LDPATH -Wl,-rpath,$M_LDPATH $M_LDFLAGS" | |
export CFLAGS="$M_SYM_INCLUDES-fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CFLAGS" | |
export CXXFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CXXFLAGS" | |
export CPPFLAGS="$M_SYM_INCLUDES -fPIC -g3 -rdynamic -D_FORTIFY_SOURCE=2 $M_CPPFLAGS" | |
./configure --prefix="$M_LOCAL" &>> "$M_LOGS/tokyocabinet.txt"; error | |
unset CFLAGS; unset CXXFLAGS; unset CPPFLAGS; unset LDFLAGS | |
make --jobs=4 &>> "$M_LOGS/tokyocabinet.txt"; error | |
make install &>> "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-check) | |
cd "$M_SOURCES/tokyocabinet"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-check-full) | |
cd "$M_SOURCES/tokyocabinet"; error | |
export LD_LIBRARY_PATH="$M_LDPATH"; error | |
export PATH="$M_BNPATH:$PATH"; error | |
make check &>> "$M_LOGS/tokyocabinet.txt"; error | |
make check-valgrind &>> "$M_LOGS/tokyocabinet.txt"; error | |
make check-large &>> "$M_LOGS/tokyocabinet.txt"; error | |
make check-compare &>> "$M_LOGS/tokyocabinet.txt"; error | |
make check-thread &>> "$M_LOGS/tokyocabinet.txt"; error | |
make check-race &>> "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-clean) | |
cd "$M_SOURCES/tokyocabinet"; error | |
make clean &>> "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet-log) | |
cat "$M_LOGS/tokyocabinet.txt"; error | |
;; | |
tokyocabinet) | |
tokyocabinet "tokyocabinet-extract" | |
tokyocabinet "tokyocabinet-prep" | |
tokyocabinet "tokyocabinet-build" | |
if [ "$QUICK" != "yes" ]; then tokyocabinet "tokyocabinet-check"; fi | |
;; | |
*) | |
printf "\nUnrecognized request.\n" | |
exit 2 | |
;; | |
esac | |
date +"Finished $1 at %r on %x" | |
date +"%n%nFinished $1 at %r on %x%n%n" &>> "$M_LOGS/tokyocabinet.txt" | |
return $? | |
} | |
combine() { | |
case "$1" in | |
combine-tail) | |
tail --lines=30 --follow=name --retry "$M_LOGS/combine.txt"; error | |
exit 0 | |
;; | |
combine-log) | |
cat "$M_LOGS/combine.txt"; error | |
exit 0 | |
;; | |
combine-static) | |
printf "Creating the static archive... " | |
;; | |
*) | |
rm -f "$M_SO" &>> "$M_LOGS/combine.txt"; error | |
printf "Creating the shared object... " | |
;; | |
esac | |
if [[ ! -f "$M_SOURCES/gd/src/.libs/libgd.a" || \ | |
! -f "$M_SOURCES/png/.libs/libpng16.a" || \ | |
! -f "$M_SOURCES/lzo/src/.libs/liblzo2.a" || \ | |
! -f "$M_SOURCES/pcre/.libs/libpcre2-8.a" || \ | |
! -f "$M_SOURCES/jpeg/.libs/libjpeg.a" || \ | |
! -f "$M_SOURCES/spf2/src/libspf2/.libs/libspf2.a" || \ | |
! -f "$M_SOURCES/curl/lib/.libs/libcurl.a" || \ | |
! -f "$M_SOURCES/xml2/.libs/libxml2.a" || \ | |
! -f "$M_SOURCES/dkim/libopendkim/.libs/libopendkim.a" || \ | |
! -f "$M_SOURCES/zlib/libz.a" || \ | |
! -f "$M_SOURCES/bzip2/libbz2.a" || \ | |
! -f "$M_SOURCES/dspam/src/.libs/libdspam.a" || \ | |
! -f "$M_SOURCES/mariadb/build/libmariadb/libmariadbclient.a" || \ | |
! -f "$M_SOURCES/geoip/libGeoIP/.libs/libGeoIP.a" || \ | |
! -f "$M_SOURCES/clamav/libclamav/.libs/libclamav.a" || \ | |
! -f "$M_SOURCES/clamav/libclamav/.libs/libclamunrar.a" || \ | |
! -f "$M_SOURCES/clamav/libclamav/.libs/libclamunrar_iface.a" || \ | |
! -f "$M_SOURCES/clamav/libclamav/libmspack-0.5alpha/.libs/libclammspack.a" || \ | |
! -f "$M_SOURCES/clamav/libltdl/.libs/libltdlc.a" || \ | |
! -f "$M_SOURCES/openssl/libcrypto.a" || \ | |
! -f "$M_SOURCES/openssl/libssl.a" || \ | |
! -f "$M_SOURCES/jansson/src/.libs/libjansson.a" || \ | |
! -f "$M_SOURCES/freetype/objs/.libs/libfreetype.a" || \ | |
! -f "$M_SOURCES/utf8proc/libutf8proc.a" || \ | |
! -f "$M_SOURCES/memcached/libmemcached/.libs/libmemcached.a" || \ | |
! -f "$M_SOURCES/tokyocabinet/libtokyocabinet.a" ]]; then | |
printf " a required dependency is missing. \n\nCreate the dependencies by running \"build.lib.sh all\" and then try again." | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 1 || true | |
date +"%n%nFinished $COMMAND failed at %r on %x%n" | |
[[ -t 0 ]] && ${TPUT} sgr0 || true | |
exit 1 | |
fi | |
rm -rf "$M_OBJECTS/gd" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/gd" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/gd" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/gd/src/.libs/libgd.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/png" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/png" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/png" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/png/.libs/libpng16.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/lzo" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/lzo" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/lzo" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/lzo/src/.libs/liblzo2.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/pcre" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/pcre" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/pcre" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/pcre/.libs/libpcre2-8.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/jpeg" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/jpeg" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/jpeg" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/jpeg/.libs/libjpeg.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/spf2" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/spf2" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/spf2" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/spf2/src/libspf2/.libs/libspf2.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/curl" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/curl" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/curl" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/curl/lib/.libs/libcurl.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/xml2" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/xml2" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/xml2" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/xml2/.libs/libxml2.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/dkim" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/dkim" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/dkim" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/dkim/libopendkim/.libs/libopendkim.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/zlib" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/zlib" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/zlib" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/zlib/libz.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/bzip2" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/bzip2" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/bzip2" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/bzip2/libbz2.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/dspam" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/dspam" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/dspam" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/dspam/src/.libs/libdspam.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/mariadb" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/mariadb" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/mariadb" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/mariadb/build/libmariadb/libmariadbclient.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/geoip" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/geoip" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/geoip" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/geoip/libGeoIP/.libs/libGeoIP.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/clamav" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/clamav" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/clamav" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/clamav/libclamav/.libs/libclamav.a" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/clamav/libltdl/.libs/libltdlc.a" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/clamav/unrar" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/clamav/unrar" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/clamav/libclamav/.libs/libclamunrar.a" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/clamav/unrar_iface" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/clamav/unrar_iface" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/clamav/libclamav/.libs/libclamunrar_iface.a" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/clamav/mspack" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/clamav/mspack" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/clamav/libclamav/libmspack-0.5alpha/.libs/libclammspack.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/crypto" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/crypto" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/crypto" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/openssl/libcrypto.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/ssl" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/ssl" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/ssl" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/openssl/libssl.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/jansson" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/jansson" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/jansson" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/jansson/src/.libs/libjansson.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/freetype" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/freetype" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/freetype" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/freetype/objs/.libs/libfreetype.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/utf8proc" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/utf8proc" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/utf8proc" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/utf8proc/libutf8proc.a" &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/memcached" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/memcached" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/memcached" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/memcached/libmemcached/.libs/libmemcached.a" &>> "$M_LOGS/combine.txt"; error | |
# If libmemcached is built with Dtrace support, this object file will need to be included. | |
# cp "$M_SOURCES/memcached/libmemcached/libmemcached_probes.o" . &>> "$M_LOGS/combine.txt"; error | |
rm -rf "$M_OBJECTS/tokyocabinet" &>> "$M_LOGS/combine.txt"; error | |
mkdir "$M_OBJECTS/tokyocabinet" &>> "$M_LOGS/combine.txt"; error | |
cd "$M_OBJECTS/tokyocabinet" &>> "$M_LOGS/combine.txt"; error | |
ar xv "$M_SOURCES/tokyocabinet/libtokyocabinet.a" &>> "$M_LOGS/combine.txt"; error | |
case "$1" in | |
combine-static) | |
# Commands for creating a static version of the library. | |
rm -f "$M_AR"; error | |
ar rs "$M_AR" \ | |
"$M_OBJECTS"/lzo/*.o "$M_OBJECTS"/zlib/*.o \ | |
"$M_OBJECTS"/bzip2/*.o "$M_OBJECTS"/pcre/*.o \ | |
"$M_OBJECTS"/clamav/*.o "$M_OBJECTS"/clamav/unrar/*.o \ | |
"$M_OBJECTS"/clamav/unrar_iface/*.o "$M_OBJECTS"/clamav/mspack/*.o \ | |
"$M_OBJECTS"/tokyocabinet/*.o "$M_OBJECTS"/crypto/*.o "$M_OBJECTS"/ssl/*.o \ | |
"$M_OBJECTS"/mariadb/*.o "$M_OBJECTS"/xml2/*.o "$M_OBJECTS"/spf2/*.o "$M_OBJECTS"/geoip/*.o \ | |
"$M_OBJECTS"/curl/*.o "$M_OBJECTS"/memcached/*.o "$M_OBJECTS"/utf8proc/*.o \ | |
"$M_OBJECTS"/png/*.o "$M_OBJECTS"/jpeg/*.o "$M_OBJECTS"/freetype/*.o "$M_OBJECTS"/gd/*.o \ | |
"$M_OBJECTS"/dkim/*.o "$M_OBJECTS"/dspam/*.o "$M_OBJECTS"/jansson/*.o &>> "$M_LOGS/combine.txt"; error | |
find $M_LOCAL -type f -exec touch {} \; | |
date +"%n%nFinished creating the static archive at %r on %x%n" | |
;; | |
*) | |
rm -f "$M_SO" | |
gcc -Wl,-Bsymbolic -g3 -fPIC -rdynamic -shared -o "$M_SO" \ | |
"$M_OBJECTS"/lzo/*.o "$M_OBJECTS"/zlib/*.o \ | |
"$M_OBJECTS"/bzip2/*.o "$M_OBJECTS"/pcre/*.o \ | |
"$M_OBJECTS"/clamav/*.o "$M_OBJECTS"/clamav/unrar/*.o \ | |
"$M_OBJECTS"/clamav/unrar_iface/*.o "$M_OBJECTS"/clamav/mspack/*.o \ | |
"$M_OBJECTS"/tokyocabinet/*.o "$M_OBJECTS"/crypto/*.o "$M_OBJECTS"/ssl/*.o \ | |
"$M_OBJECTS"/mariadb/*.o "$M_OBJECTS"/xml2/*.o "$M_OBJECTS"/spf2/*.o "$M_OBJECTS"/geoip/*.o \ | |
"$M_OBJECTS"/curl/*.o "$M_OBJECTS"/memcached/*.o "$M_OBJECTS"/utf8proc/*.o \ | |
"$M_OBJECTS"/png/*.o "$M_OBJECTS"/jpeg/*.o "$M_OBJECTS"/freetype/*.o "$M_OBJECTS"/gd/*.o \ | |
"$M_OBJECTS"/dkim/*.o "$M_OBJECTS"/dspam/*.o "$M_OBJECTS"/jansson/*.o \ | |
-lm -lrt -ldl -lnsl -lresolv -lpthread -lstdc++ &>> "$M_LOGS/combine.txt"; error | |
# This will update the time stamps for the various standalone dependencies, which should prevent make from rebuilding them. | |
find "$M_LOCAL/include" -type f -exec touch -c -m -r "$M_SO" -d '-1 minutes' {} \; | |
find "$M_LDPATH" -type f -iname "libz.a" -or -iname "libz.lib" -exec touch -c -m -r "$M_SO" -d '+2 minutes' {} \; | |
find "$M_LDPATH" -type f -iname "libcrypto.a" -or -iname "libcrypto.lib" -exec touch -c -m -r "$M_SO" -d '+4 minutes' {} \; | |
find "$M_LDPATH" -type f -iname "libssl.a" -or -iname "libssl.lib" -exec touch -c -m -r "$M_SO" -d '+6 minutes' {} \; | |
find "$M_LDPATH" -type f -iname "libutf8proc.a" -or -iname "libutf8proc.lib" -exec touch -c -m -r "$M_SO" -d '+8 minutes' {} \; | |
find "$M_LDPATH" -type f -iname "libcheck.a" -or -iname "libcheck.lib" -exec touch -c -m -r "$M_SO" -d '+10 minutes' {} \; | |
find "$M_SOURCES/googtest/lib/.libs/" -type f -iname "libgtest.a" -or -iname "libgtest.lib" -exec touch -c -m -r "$M_SO" -d '+12 minutes' {} \; | |
date +"%n%nFinished creating the shared object at %r on %x%n" | |
;; | |
esac | |
if [ "$MASTER" == "yes" ]; then | |
echo "" | |
fi | |
exit 0 | |
} | |
load() { | |
if [ "$MASTER" == "yes" ]; then | |
echo "" | |
fi | |
printf "Checking the shared object... " | |
if [ ! -f "$M_SO" ]; then | |
printf " the magmad.so file is missing.\n\nCreate the shared object by running \"build.lib.sh all\" and then try again." | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} setaf 1 || true | |
date +"%n%nFinished $COMMAND failed at %r on %x%n%n" | |
[[ -t 0 ]] && ${TPUT} sgr0 || true | |
exit 1 | |
fi | |
if [ ! -d $M_CHECK ]; then mkdir -p "$M_CHECK" ; error ; fi | |
cd "$M_CHECK"; error | |
# Copy the current symbols file over. | |
cat $M_SYM_FILE | egrep -v $M_SYM_SKIP > magma.open.symbols.h; error | |
# Create a file with a function that assigns the original symbols to the dynamic version. | |
echo "#include \"magma.open.check.h\"" > magma.open.symbols.c; error | |
echo "#include \"magma.open.symbols.h\"" >> magma.open.symbols.c; error | |
cat magma.open.symbols.h | \ | |
grep "extern" | \ | |
sed "s/extern //" | \ | |
sed "s/;/ = NULL;/g" \ | |
>> magma.open.symbols.c; error | |
echo "const char * symbols_check(void *magma) {" >> magma.open.symbols.c; error | |
cat magma.open.symbols.h | \ | |
grep "extern" | \ | |
awk -F'(' '{print $2}' | \ | |
grep -v '^$' | \ | |
tr -d '*' | sed 's/_d)//' | \ | |
sed 's/SSL_COMP)/SSL_COMP_get_compression_methods/g' | \ | |
awk '{ print "if ((*(void **)&(" $1 "_d) = dlsym(magma, \"" $1 "\")) == NULL) return \"" $1 "\";"}' >> magma.open.symbols.c; error | |
echo "return NULL;" >> magma.open.symbols.c; error | |
echo "}" >> magma.open.symbols.c; error | |
## Because GeoIPDBDescription is an array of pointers it doesn't need the leading ampersand. | |
# sed -i -e "s/GeoIPDBDescription_d = &GeoIPDBDescription;/GeoIPDBDescription_d = GeoIPDBDescription;/g" magma.open.symbols.c; error | |
## This function prototype is prefixed with a macro in parentheses which fools the default parsing rules. | |
# sed -i -e "s/SSL_COMP)/SSL_COMP_get_compression_methods/g" magma.open.symbols.c; error | |
# The name dkim_getsighdr_d is taken by the OpenDKIM library, so we had to break convention and use dkim_getsighdrx_d. | |
sed -i -e "s/\"dkim_getsighdrx\"/\"dkim_getsighdr\"/g" magma.open.symbols.c; error | |
# Compile the source files. If an error occurs at compile time it is probably because we have a mismatch somewhere. | |
gcc -D_REENTRANT -D_GNU_SOURCE -DHAVE_NS_TYPE -D_LARGEFILE64_SOURCE $M_SYM_INCLUDES $M_SO \ | |
-g3 -rdynamic -Wall -Wextra -Werror -o magma.open.check magma.open.check.c magma.open.symbols.c -ldl; error | |
# If errors are generated from invalid symbols, this should print out the specific lines that are invalid. | |
if [ $? -ne 0 ]; then | |
LNS=`gcc -D_REENTRANT -D_GNU_SOURCE -DHAVE_NS_TYPE -D_LARGEFILE64_SOURCE $M_SYM_INCLUDES $M_SO -g3 -rdynamic -Wall -Wextra -Werror \ | |
-o magma.open.check magma.open.check.c magma.open.symbols.c -ldl 2>&1 | grep "magma.open.symbols.c" | awk -F':' '{ print $2 }' | \ | |
grep "[0-9*]" | awk '{print $1 ", " }' | sort -gu | uniq | tr -d "\n" | sed "s/, $//g"` | |
# Only output the symbol info we found lines to print. | |
if [ "$LNS" != "" ]; then | |
printf "printing invalid symbols...\n" | |
echo "lines = " $LNS | |
echo "" | |
LNS=`gcc -D_REENTRANT -D_GNU_SOURCE -DHAVE_NS_TYPE -D_LARGEFILE64_SOURCE $M_SYM_INCLUDES $M_SO -g3 -rdynamic -Wall -Wextra -Werror \ | |
-o magma.open.check magma.open.check.c magma.open.symbols.c -ldl 2>&1 | grep "magma.open.symbols.c" | awk -F':' '{ print $2 }' | \ | |
grep "[0-9*]" | awk '{print $1 "p;" }' | sort -gu | uniq | tr -d "\n"` | |
cat magma.open.symbols.c | sed -n "$LNS"; error | |
fi | |
echo "" | |
exit 1 | |
fi | |
# Execute the program to see if the library can be loaded successfully at run time. | |
./magma.open.check "$M_SO"; error | |
echo "" | |
return 0 | |
} | |
keys() { | |
printf "Fixing the permissions for the DIME, DKIM and TLS keys in the magma sandbox...\n" | |
if [ "$MASTER" == "yes" ]; then | |
echo "" | |
fi | |
chmod 600 "$M_PROJECT_ROOT/sandbox/etc/tls.localhost.localdomain.pem"; error | |
chmod 600 "$M_PROJECT_ROOT/sandbox/etc/dkim.localhost.localdomain.pem"; error | |
chmod 600 "$M_PROJECT_ROOT/sandbox/etc/dime.localhost.localdomain.key"; error | |
chmod 600 "$M_PROJECT_ROOT/sandbox/etc/dime.localhost.localdomain.signet"; error | |
# Tell git to skip checking for changes to these SQL files, but we only do this if git is on the system and the files | |
# are stored inside a repo. | |
GIT_IS_AVAILABLE=`which git &> /dev/null && git log &> /dev/null && echo 1` | |
if [[ "$GIT_IS_AVAILABLE" == "1" ]]; then | |
git update-index --skip-worktree "$M_PROJECT_ROOT/sandbox/etc/tls.localhost.localdomain.pem" | |
git update-index --skip-worktree "$M_PROJECT_ROOT/sandbox/etc/dkim.localhost.localdomain.pub" | |
git update-index --skip-worktree "$M_PROJECT_ROOT/sandbox/etc/dime.localhost.localdomain.key" | |
git update-index --skip-worktree "$M_PROJECT_ROOT/sandbox/etc/dime.localhost.localdomain.signet" | |
fi | |
} | |
generate() { | |
printf "Generating DIME, DKIM and TLS keys for the magma sandbox...\n" | |
# Generate a DKIM private key. | |
"$M_LOCAL/bin/"openssl genrsa -out "$M_PROJECT_ROOT/sandbox/etc/dkim.localhost.localdomain.pem" 2048 2>&1 >& /dev/null | |
# Derive the DKIM public DNS record based on the generated key. | |
"$M_LOCAL/bin/"openssl rsa -in "$M_PROJECT_ROOT/sandbox/etc/dkim.localhost.localdomain.pem" -pubout -outform PEM 2> /dev/null | \ | |
sed -r "s/-----BEGIN PUBLIC KEY-----$//" | sed -r "s/-----END PUBLIC KEY-----//" | tr -d [:space:] | \ | |
awk "{ print \"bazinga._domainkey IN TXT \\\"v=DKIM1; k=rsa; p=\" substr(\$1, 1, 208) \"\\\" \\\"\" substr(\$1, 209) \"\\\" ; ----- DKIM bazinga key\" }" > \ | |
"$M_PROJECT_ROOT/sandbox/etc/dkim.localhost.localdomain.pub" ; error | |
# The TLS private key and a self-signed certificate. | |
"$M_LOCAL/bin/"openssl req -x509 -nodes -batch -days 1826 -newkey rsa:4096 \ | |
-keyout "$M_PROJECT_ROOT/sandbox/etc/tls.localhost.localdomain.pem" \ | |
-out "$M_PROJECT_ROOT/sandbox/etc/tls.localhost.localdomain.pem" >& /dev/null ; error | |
keys | |
} | |
combo() { | |
date +"%nStarting $1 at %r on %x%n" &>> "$M_LOGS/build.txt" | |
# If compiling, then proceed sequentially to ensure dependencies are compiled in order. | |
if [[ $1 == "build" ]]; then | |
# These libraries don't have any pre-requisites or dependencies. | |
($M_BUILD "zlib-$1") & ZLIB_PID=$! | |
($M_BUILD "bzip2-$1") & BZIP2_PID=$! | |
($M_BUILD "jpeg-$1") & JPEG_PID=$! | |
($M_BUILD "lzo-$1") & LZO_PID=$! | |
($M_BUILD "pcre-$1") & PCRE_PID=$! | |
($M_BUILD "spf2-$1") & SPF2_PID=$! | |
($M_BUILD "checker-$1") & CHECKER_PID=$! | |
($M_BUILD "jansson-$1") & JANSSON_PID=$! | |
($M_BUILD "memcached-$1") & MEMCACHED_PID=$! | |
($M_BUILD "googtest-$1") & GOOGTEST_PID=$! | |
($M_BUILD "googtap-$1") & GOOGTAP_PID=$! | |
# These libraries require zlib, but nothing else. | |
wait $ZLIB_PID; error | |
($M_BUILD "png-$1") & PNG_PID=$! | |
($M_BUILD "xml2-$1") & XML2_PID=$! | |
($M_BUILD "openssl-$1") & OPENSSL_PID=$! | |
($M_BUILD "geoip-$1") & GEOIP_PID=$! | |
# These libraries require zlib (above) and openssl. | |
wait $OPENSSL_PID; error | |
($M_BUILD "curl-$1") & CURL_PID=$! | |
($M_BUILD "dkim-$1") & DKIM_PID=$! | |
($M_BUILD "mariadb-$1") & MARIADB_PID=$! | |
# These libraries require zlib (above), bzip2, png and jpeg. | |
wait $PNG_PID; error | |
wait $JPEG_PID; error | |
wait $BZIP2_PID; error | |
($M_BUILD "freetype-$1") & FREETYPE_PID=$! | |
($M_BUILD "tokyocabinet-$1") & TOKYOCABINET_PID=$! | |
# ClamAV requires zlib (above) and bzip (above), pcre and xml2. | |
wait $XML2_PID; error | |
wait $PCRE_PID; error | |
($M_BUILD "clamav-$1") & CLAMAV_PID=$! | |
# The gd library requires zlib (above), png (above), jpeg (above) and freetype. | |
wait $FREETYPE_PID; error | |
($M_BUILD "gd-$1") & GD_PID=$! | |
# The dspam library requires MariaDB/MySQL client library. | |
wait $MARIADB_PID; error | |
($M_BUILD "dspam-$1") & DSPAM_PID=$! | |
# The utf8proc library requires curl. | |
wait $CURL_PID; error | |
($M_BUILD "utf8proc-$1") & UTF8PROC_PID=$! | |
# Wait on any remaining build jobs. | |
wait $GD_PID; error | |
wait $LZO_PID; error | |
wait $SPF2_PID; error | |
wait $DKIM_PID; error | |
wait $GEOIP_PID; error | |
wait $DSPAM_PID; error | |
wait $CLAMAV_PID; error | |
wait $CHECKER_PID; error | |
wait $GOOGTAP_PID; error | |
wait $JANSSON_PID; error | |
wait $GOOGTEST_PID; error | |
wait $UTF8PROC_PID; error | |
wait $FREETYPE_PID; error | |
wait $MEMCACHED_PID; error | |
wait $TOKYOCABINET_PID; error | |
else | |
# If this isn't a build, then we kick off everything in parallel. | |
($M_BUILD "clamav-$1") & CLAMAV_PID=$! | |
($M_BUILD "curl-$1") & CURL_PID=$! | |
($M_BUILD "mariadb-$1") & MARIADB_PID=$! | |
($M_BUILD "gd-$1") & GD_PID=$! | |
($M_BUILD "png-$1") & PNG_PID=$! | |
($M_BUILD "lzo-$1") & LZO_PID=$! | |
($M_BUILD "pcre-$1") & PCRE_PID=$! | |
($M_BUILD "jpeg-$1") & JPEG_PID=$! | |
($M_BUILD "spf2-$1") & SPF2_PID=$! | |
($M_BUILD "xml2-$1") & XML2_PID=$! | |
($M_BUILD "dkim-$1") & DKIM_PID=$! | |
($M_BUILD "zlib-$1") & ZLIB_PID=$! | |
($M_BUILD "bzip2-$1") & BZIP2_PID=$! | |
($M_BUILD "dspam-$1") & DSPAM_PID=$! | |
($M_BUILD "geoip-$1") & GEOIP_PID=$! | |
($M_BUILD "checker-$1") & CHECKER_PID=$! | |
($M_BUILD "openssl-$1") & OPENSSL_PID=$! | |
($M_BUILD "googtest-$1") & GOOGTEST_PID=$! | |
($M_BUILD "googtap-$1") & GOOGTAP_PID=$! | |
($M_BUILD "jansson-$1") & JANSSON_PID=$! | |
($M_BUILD "freetype-$1") & FREETYPE_PID=$! | |
($M_BUILD "utf8proc-$1") & UTF8PROC_PID=$! | |
($M_BUILD "memcached-$1") & MEMCACHED_PID=$! | |
($M_BUILD "tokyocabinet-$1") & TOKYOCABINET_PID=$! | |
wait $GD_PID; error | |
wait $PNG_PID; error | |
wait $LZO_PID; error | |
wait $PCRE_PID; error | |
wait $JPEG_PID; error | |
wait $CURL_PID; error | |
wait $SPF2_PID; error | |
wait $XML2_PID; error | |
wait $DKIM_PID; error | |
wait $ZLIB_PID; error | |
wait $BZIP2_PID; error | |
wait $DSPAM_PID; error | |
wait $MARIADB_PID; error | |
wait $GEOIP_PID; error | |
wait $CLAMAV_PID; error | |
wait $CHECKER_PID; error | |
wait $OPENSSL_PID; error | |
wait $GOOGTEST_PID; error | |
wait $GOOGTAP_PID; error | |
wait $JANSSON_PID; error | |
wait $UTF8PROC_PID; error | |
wait $FREETYPE_PID; error | |
wait $MEMCACHED_PID; error | |
wait $TOKYOCABINET_PID; error | |
fi | |
date +"%nFinished $1 at %r on %x%n" | |
date +"%nFinished $1 at %r on %x%n" &>> "$M_LOGS/build.txt" | |
} | |
follow() { | |
# Note that the build.txt and combo.txt log files are intentionally excluded from this list because they don't belong to a bundled package file. | |
tail -n 0 -F "$M_LOGS/clamav.txt" "$M_LOGS/curl.txt" "$M_LOGS/dspam.txt" "$M_LOGS/jansson.txt" "$M_LOGS/memcached.txt" "$M_LOGS/openssl.txt" \ | |
"$M_LOGS/tokyocabinet.txt" "$M_LOGS/zlib.txt" "$M_LOGS/bzip2.txt" "$M_LOGS/dkim.txt" "$M_LOGS/geoip.txt" "$M_LOGS/lzo.txt" \ | |
"$M_LOGS/mariadb.txt" "$M_LOGS/spf2.txt" "$M_LOGS/xml2.txt" "$M_LOGS/gd.txt" "$M_LOGS/png.txt" "$M_LOGS/jpeg.txt" "$M_LOGS/freetype.txt" \ | |
"$M_LOGS/utf8proc.txt" "$M_LOGS/checker.txt" "$M_LOGS/pcre.txt" | |
} | |
log() { | |
# Note that the build.txt and combo.txt log files are intentionally excluded from this list because they don't belong to a bundled package file. | |
cat "$M_LOGS/clamav.txt" "$M_LOGS/curl.txt" "$M_LOGS/dspam.txt" "$M_LOGS/jansson.txt" "$M_LOGS/memcached.txt" "$M_LOGS/openssl.txt" \ | |
"$M_LOGS/tokyocabinet.txt" "$M_LOGS/zlib.txt" "$M_LOGS/bzip2.txt" "$M_LOGS/dkim.txt" "$M_LOGS/geoip.txt" "$M_LOGS/lzo.txt" \ | |
"$M_LOGS/mariadb.txt" "$M_LOGS/spf2.txt" "$M_LOGS/xml2.txt" "$M_LOGS/gd.txt" "$M_LOGS/png.txt" "$M_LOGS/jpeg.txt" "$M_LOGS/freetype.txt" \ | |
"$M_LOGS/utf8proc.txt" "$M_LOGS/checker.txt" "$M_LOGS/pcre.txt" | |
} | |
advance() { | |
shift | |
echo "$@" | |
} | |
status() { | |
CPU=`iostat cpu | head -4 | tail -2` | |
DISK=`iostat -m -x sda sdb sdc vda vdb vdc | tail -n +6 | sed "s/Device:/device:/" | awk '{print $1 "\t " $6 "\t" $7 "\t" $14}'` | |
while true; do | |
clear | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} sgr 0 1 || true; [[ -t 0 ]] && ${TPUT} setaf 6 || true; printf "\n# Commands\n\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
ps --no-headers -C build -C build.sh -C build.lib -C build.lib.sh -o command:100,etime | grep -v status | cat - | | |
while read line; do | |
BASE=`echo "$line" | awk '{print $1}'` | |
line=`eval "advance $line"` | |
C=`basename "$BASE"` | |
if [[ "$C" == "bash" ]]; then | |
BASE=`echo "$line" | awk '{print $1}'` | |
line=`eval "advance $line"` | |
C=`basename "$BASE"` | |
fi | |
echo "$C $line" | |
done | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} sgr 0 1 || true; [[ -t 0 ]] && ${TPUT} setaf 6 || true; printf "\n# Load\n\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
uptime | sed "s/^.*load average://" | awk -F',' '{print "avg-load: " $1 ", " $2 ", " $3 }' | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} sgr 0 1 || true; [[ -t 0 ]] && ${TPUT} setaf 6 || true; printf "\n# Processor\n\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
echo "$CPU" | |
[[ -t 0 ]] && ${TPUT} sgr0 || true; [[ -t 0 ]] && ${TPUT} sgr 0 1 || true; [[ -t 0 ]] && ${TPUT} setaf 6 || true; printf "\n# Disk\n\n"; [[ -t 0 ]] && ${TPUT} sgr0 || true | |
echo "$DISK" | |
# Refresh the stats for the next loop; note that this takes 4 seconds to complete. | |
CPU=`iostat cpu 4 2 | tail -5 | head -2` | |
DISK=`iostat -m -x sda sdb sdc vda vdb vdc 4 2 | tail -3 | head -2 | sed "s/Device:/device:/"` | |
# If the status code isn't 0, it means iostat hasn't been installed. | |
if [ $? != 0 ]; then | |
sleep 1; | |
fi | |
done | |
} | |
all() { | |
rm -f "$M_LOGS/build.txt"; silent | |
date +"%nStarting at %r on %x%n" | |
date +"Starting at %r on %x" &>> "$M_LOGS/build.txt" | |
$M_BUILD "extract"; silent | |
$M_BUILD "prep"; silent | |
$M_BUILD "build"; silent | |
$M_BUILD "combine"; silent | |
$M_BUILD "load"; silent | |
$M_BUILD "keys"; silent | |
# Quick builds don't run the dependency checks, and/or unit tests. | |
if [ "$QUICK" != "yes" ]; then | |
$M_BUILD "check"; silent | |
fi | |
date +"Finished at %r on %x%n" | |
date +"Finished at %r on %x" &>> "$M_LOGS/build.txt" | |
} | |
# Store the command for failure messages | |
COMMAND="$@" | |
# Parent | |
if [[ "$PARENT" == "" ]]; then | |
MASTER="yes" | |
export PARENT="$BASHPID" | |
fi | |
# Setup | |
if [ ! -d "$M_SOURCES" ]; then mkdir "$M_SOURCES"; error; fi | |
if [ ! -d "$M_OBJECTS" ]; then mkdir "$M_OBJECTS"; error; fi | |
if [ ! -d "$M_LOCAL" ]; then mkdir "$M_LOCAL"; error; fi | |
if [ ! -d "$M_LOGS" ]; then mkdir "$M_LOGS"; error; fi | |
# Aggregations | |
if [[ $1 == "extract" ]]; then combo "$1" | |
elif [[ $1 == "prep" ]]; then combo "$1" | |
elif [[ $1 == "build" ]]; then combo "$1" | |
elif [[ $1 == "check" ]]; then combo "$1" | |
elif [[ $1 == "check-full" ]]; then combo "$1" | |
elif [[ $1 == "clean" ]]; then combo "$1" | |
# Libraries | |
elif [[ $1 =~ "gd" ]]; then gd "$1" | |
elif [[ $1 =~ "png" ]]; then png "$1" | |
elif [[ $1 =~ "lzo" ]]; then lzo "$1" | |
elif [[ $1 =~ "pcre" ]]; then pcre "$1" | |
elif [[ $1 =~ "jpeg" ]]; then jpeg "$1" | |
elif [[ $1 =~ "curl" ]]; then curl "$1" | |
elif [[ $1 =~ "spf2" ]]; then spf2 "$1" | |
elif [[ $1 =~ "xml2" ]]; then xml2 "$1" | |
elif [[ $1 =~ "dkim" ]]; then dkim "$1" | |
elif [[ $1 =~ "zlib" ]]; then zlib "$1" | |
elif [[ $1 =~ "bzip2" ]]; then bzip2 "$1" | |
elif [[ $1 =~ "dspam" ]]; then dspam "$1" | |
elif [[ $1 =~ "geoip" ]]; then geoip "$1" | |
elif [[ $1 =~ "clamav" ]]; then clamav "$1" | |
elif [[ $1 =~ "mariadb" ]]; then mariadb "$1" | |
elif [[ $1 =~ "checker" ]]; then checker "$1" | |
elif [[ $1 =~ "openssl" ]]; then openssl "$1" | |
elif [[ $1 =~ "googtap" ]]; then googtap "$1" | |
elif [[ $1 =~ "googtest" ]]; then googtest "$1" | |
elif [[ $1 =~ "jansson" ]]; then jansson "$1" | |
elif [[ $1 =~ "freetype" ]]; then freetype "$1" | |
elif [[ $1 =~ "utf8proc" ]]; then utf8proc "$1" | |
elif [[ $1 =~ "memcached" ]]; then memcached "$1" | |
elif [[ $1 =~ "tokyocabinet" ]]; then tokyocabinet "$1" | |
# Globals | |
elif [[ $1 =~ "combine" ]]; then combine "$1" | |
elif [[ $1 == "generate" ]]; then generate | |
elif [[ $1 == "status" ]]; then status | |
elif [[ $1 == "follow" ]]; then follow | |
elif [[ $1 == "load" ]]; then load | |
elif [[ $1 == "keys" ]]; then keys | |
elif [[ $1 == "log" ]]; then log | |
elif [[ $1 == "all" ]]; then all | |
# If follow were called tail it would create a keyword conflict, but we still want to be able to use tail on the command line. | |
elif [[ $1 == "tail" ]]; then follow | |
# Catchall | |
else | |
echo "" | |
echo " Libraries" | |
echo $" `basename $0` {gd|png|lzo|pcre|jpeg|curl|spf2|xml2|dkim|zlib|bzip2|dspam|geoip|clamav|mariadb|checker|openssl|freetype|utf8proc|memcached|tokyocabinet} and/or " | |
echo "" | |
echo " Stages (which may be combined via a dash with the above)" | |
echo $" `basename $0` {extract|prep|build|check|check-full|clean|tail|log} or " | |
echo "" | |
echo " Global Commands" | |
echo $" `basename $0` {combine|load|keys|generate|follow|log|status|all}" | |
echo "" | |
echo " Please specify a library, a stage, a global command or a combination of library and stage." | |
echo "" | |
exit 2 | |
fi | |
# Beep the speaker 4 times to let us know when 'all' is done or 2 times when a more specific target finishes. | |
if [[ "$PARENT" == "$BASHPID" ]]; then | |
if [[ $1 == "all" ]]; then | |
NUMS="1 2 3 4" | |
else | |
NUMS="1 2" | |
fi | |
for i in $NUMS; do | |
printf "\a"; sleep 1 | |
done | |
fi | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment