1*5afab0e5SDag-Erling Smørgrav#!/usr/bin/env bash 2*5afab0e5SDag-Erling Smørgrav 3*5afab0e5SDag-Erling Smørgrav# compile ldns for windows 4*5afab0e5SDag-Erling Smørgravcdir="$(echo ldns.win.$$)" 5*5afab0e5SDag-Erling Smørgravtmpdir=$(pwd) 6*5afab0e5SDag-Erling Smørgravmkdir "$cdir" 7*5afab0e5SDag-Erling Smørgravcd "$cdir" 8*5afab0e5SDag-Erling Smørgrav#configure="mingw32-configure" 9*5afab0e5SDag-Erling Smørgrav#strip="i686-w64-mingw32-strip" 10*5afab0e5SDag-Erling Smørgrav#warch="i686" 11*5afab0e5SDag-Erling Smørgravconfigure="mingw64-configure" 12*5afab0e5SDag-Erling Smørgravstrip="x86_64-w64-mingw32-strip" 13*5afab0e5SDag-Erling Smørgravwarch="x86_64" 14*5afab0e5SDag-Erling SmørgravWINSSL="$HOME/Downloads/openssl-1.1.0h.tar.gz" 15*5afab0e5SDag-Erling Smørgravcross_flag="" 16*5afab0e5SDag-Erling Smørgravcross_flag_nonstatic="" 17*5afab0e5SDag-Erling SmørgravRC="no" 18*5afab0e5SDag-Erling SmørgravSNAPSHOT="no" 19*5afab0e5SDag-Erling SmørgravCHECKOUT="" 20*5afab0e5SDag-Erling Smørgrav# the destination is a zipfile in the start directory ldns-a.b.c.zip 21*5afab0e5SDag-Erling Smørgrav# the start directory is a git repository, and it is copied to build from. 22*5afab0e5SDag-Erling Smørgrav 23*5afab0e5SDag-Erling Smørgravinfo () { 24*5afab0e5SDag-Erling Smørgrav echo "info: $1" 25*5afab0e5SDag-Erling Smørgrav} 26*5afab0e5SDag-Erling Smørgrav 27*5afab0e5SDag-Erling Smørgraverror_cleanup () { 28*5afab0e5SDag-Erling Smørgrav echo "$1" 29*5afab0e5SDag-Erling Smørgrav cd "$tmpdir" 30*5afab0e5SDag-Erling Smørgrav rm -rf "$cdir" 31*5afab0e5SDag-Erling Smørgrav exit 1 32*5afab0e5SDag-Erling Smørgrav} 33*5afab0e5SDag-Erling Smørgrav 34*5afab0e5SDag-Erling Smørgravreplace_text () { 35*5afab0e5SDag-Erling Smørgrav (cp "$1" "$1".orig && \ 36*5afab0e5SDag-Erling Smørgrav sed -e "s/$2/$3/g" < "$1".orig > "$1" && \ 37*5afab0e5SDag-Erling Smørgrav rm "$1".orig) || error_cleanup "Replacement for $1 failed." 38*5afab0e5SDag-Erling Smørgrav} 39*5afab0e5SDag-Erling Smørgrav 40*5afab0e5SDag-Erling Smørgrav# Parse command line arguments 41*5afab0e5SDag-Erling Smørgravwhile [ "$1" ]; do 42*5afab0e5SDag-Erling Smørgrav case "$1" in 43*5afab0e5SDag-Erling Smørgrav "-h") 44*5afab0e5SDag-Erling Smørgrav echo "Compile a zip file with static executables, and" 45*5afab0e5SDag-Erling Smørgrav echo "dynamic library, static library, include dir and" 46*5afab0e5SDag-Erling Smørgrav echo "manual pages." 47*5afab0e5SDag-Erling Smørgrav echo "" 48*5afab0e5SDag-Erling Smørgrav echo " -h This usage information." 49*5afab0e5SDag-Erling Smørgrav echo " -s snapshot, current date appended to version" 50*5afab0e5SDag-Erling Smørgrav echo " -rc <nr> release candidate, the number is added to version" 51*5afab0e5SDag-Erling Smørgrav echo " ldns-<version>rc<nr>." 52*5afab0e5SDag-Erling Smørgrav echo " -c <tag/br> Checkout this tag or branch, (defaults to current" 53*5afab0e5SDag-Erling Smørgrav echo " branch)." 54*5afab0e5SDag-Erling Smørgrav echo " -wssl <file> Pass openssl.tar.gz file, use absolute path." 55*5afab0e5SDag-Erling Smørgrav echo "" 56*5afab0e5SDag-Erling Smørgrav exit 1 57*5afab0e5SDag-Erling Smørgrav ;; 58*5afab0e5SDag-Erling Smørgrav "-c") 59*5afab0e5SDag-Erling Smørgrav CHECKOUT="$2" 60*5afab0e5SDag-Erling Smørgrav shift 61*5afab0e5SDag-Erling Smørgrav ;; 62*5afab0e5SDag-Erling Smørgrav "-s") 63*5afab0e5SDag-Erling Smørgrav SNAPSHOT="yes" 64*5afab0e5SDag-Erling Smørgrav ;; 65*5afab0e5SDag-Erling Smørgrav "-rc") 66*5afab0e5SDag-Erling Smørgrav RC="$2" 67*5afab0e5SDag-Erling Smørgrav shift 68*5afab0e5SDag-Erling Smørgrav ;; 69*5afab0e5SDag-Erling Smørgrav "-wssl") 70*5afab0e5SDag-Erling Smørgrav WINSSL="$2" 71*5afab0e5SDag-Erling Smørgrav shift 72*5afab0e5SDag-Erling Smørgrav ;; 73*5afab0e5SDag-Erling Smørgrav *) 74*5afab0e5SDag-Erling Smørgrav error_cleanup "Unrecognized argument -- $1" 75*5afab0e5SDag-Erling Smørgrav ;; 76*5afab0e5SDag-Erling Smørgrav esac 77*5afab0e5SDag-Erling Smørgrav shift 78*5afab0e5SDag-Erling Smørgravdone 79*5afab0e5SDag-Erling Smørgravif [ -z "$CHECKOUT" ] 80*5afab0e5SDag-Erling Smørgravthen 81*5afab0e5SDag-Erling Smørgrav if [ "$RC" = "no" ] 82*5afab0e5SDag-Erling Smørgrav then 83*5afab0e5SDag-Erling Smørgrav CHECKOUT=$( (git status | head -n 1 | awk '{print$3}') || echo master) 84*5afab0e5SDag-Erling Smørgrav else 85*5afab0e5SDag-Erling Smørgrav CHECKOUT=$( (git status | head -n 1 | awk '{print$3}') || echo develop) 86*5afab0e5SDag-Erling Smørgrav fi 87*5afab0e5SDag-Erling Smørgravfi 88*5afab0e5SDag-Erling Smørgrav 89*5afab0e5SDag-Erling Smørgrav# this script creates a temp directory $cdir. 90*5afab0e5SDag-Erling Smørgrav# this directory contains subdirectories: 91*5afab0e5SDag-Erling Smørgrav# ldns/ : ldns source compiled 92*5afab0e5SDag-Erling Smørgrav# openssl-a.b.c/ : the openSSL source compiled 93*5afab0e5SDag-Erling Smørgrav# ldnsinstall/ : install of ldns here. 94*5afab0e5SDag-Erling Smørgrav# sslinstall/ : install of ssl here. 95*5afab0e5SDag-Erling Smørgrav# file/ : directory to gather the components of the zipfile distribution 96*5afab0e5SDag-Erling Smørgrav# ldns-nonstatic/ : ldns source compiled nonstatic 97*5afab0e5SDag-Erling Smørgrav# ldnsinstall-nonstatic/ : install of ldns nonstatic compile 98*5afab0e5SDag-Erling Smørgrav# openssl-nonstatic/ : nonstatic openssl source compiled 99*5afab0e5SDag-Erling Smørgrav# sslinstall-nonstatic/ : install of nonstatic openssl compile 100*5afab0e5SDag-Erling Smørgrav 101*5afab0e5SDag-Erling Smørgravinfo "exporting source into $cdir/ldns" 102*5afab0e5SDag-Erling Smørgravgit clone git://git.nlnetlabs.nl/ldns/ ldns || error_cleanup "git command failed" 103*5afab0e5SDag-Erling Smørgrav(cd ldns; git checkout "$CHECKOUT") || error_cleanup "Could not checkout $CHECKOUT" 104*5afab0e5SDag-Erling Smørgrav#svn export . $cdir/ldns 105*5afab0e5SDag-Erling Smørgravinfo "exporting source into $cdir/ldns-nonstatic" 106*5afab0e5SDag-Erling Smørgravgit clone git://git.nlnetlabs.nl/ldns/ ldns-nonstatic || error_cleanup "git command failed" 107*5afab0e5SDag-Erling Smørgrav(cd ldns-nonstatic; git checkout "$CHECKOUT") || error_cleanup "Could not checkout $CHECKOUT" 108*5afab0e5SDag-Erling Smørgrav#svn export . $cdir/ldns-nonstatic 109*5afab0e5SDag-Erling Smørgrav 110*5afab0e5SDag-Erling Smørgrav# Fix up the version number if necessary 111*5afab0e5SDag-Erling Smørgrav(cd ldns; if test ! -f install-sh -a -f ../../install-sh; then cp ../../install-sh . ; fi; libtoolize -ci; autoreconf -fi) 112*5afab0e5SDag-Erling Smørgravversion=$(./ldns/configure --version | head -1 | awk '{ print $3 }') || \ 113*5afab0e5SDag-Erling Smørgrav error_cleanup "Cannot determine version number." 114*5afab0e5SDag-Erling Smørgravinfo "LDNS version: $version" 115*5afab0e5SDag-Erling Smørgravif [ "$RC" != "no" ]; then 116*5afab0e5SDag-Erling Smørgrav info "Building LDNS release candidate $RC." 117*5afab0e5SDag-Erling Smørgrav version2="${version}-rc$RC" 118*5afab0e5SDag-Erling Smørgrav info "Version number: $version2" 119*5afab0e5SDag-Erling Smørgrav replace_text "ldns/configure.ac" "AC_INIT(ldns, $version" "AC_INIT(ldns, $version2" 120*5afab0e5SDag-Erling Smørgrav replace_text "ldns-nonstatic/configure.ac" "AC_INIT(ldns, $version" "AC_INIT(ldns, $version2" 121*5afab0e5SDag-Erling Smørgrav version="$version2" 122*5afab0e5SDag-Erling Smørgravfi 123*5afab0e5SDag-Erling Smørgravif [ "$SNAPSHOT" = "yes" ]; then 124*5afab0e5SDag-Erling Smørgrav info "Building LDNS snapshot." 125*5afab0e5SDag-Erling Smørgrav version2="${version}_$(date +%Y%m%d)" 126*5afab0e5SDag-Erling Smørgrav info "Snapshot version number: $version2" 127*5afab0e5SDag-Erling Smørgrav replace_text "ldns/configure.ac" "AC_INIT(ldns, $version" "AC_INIT(ldns, $version2" 128*5afab0e5SDag-Erling Smørgrav replace_text "ldns-nonstatic/configure.ac" "AC_INIT(ldns, $version" "AC_INIT(ldns, $version2" 129*5afab0e5SDag-Erling Smørgrav version="$version2" 130*5afab0e5SDag-Erling Smørgravfi 131*5afab0e5SDag-Erling Smørgrav 132*5afab0e5SDag-Erling Smørgrav# Build OpenSSL 133*5afab0e5SDag-Erling Smørgravgzip -cd "$WINSSL" | tar xf - || error_cleanup "tar unpack of $WINSSL failed" 134*5afab0e5SDag-Erling Smørgravsslinstall="$(pwd)/sslinstall" 135*5afab0e5SDag-Erling Smørgravcd openssl-* || error_cleanup "no openssl-X dir in tarball" 136*5afab0e5SDag-Erling Smørgravif test $configure = "mingw64-configure"; then 137*5afab0e5SDag-Erling Smørgrav sslflags="no-shared no-asm -DOPENSSL_NO_CAPIENG mingw64" 138*5afab0e5SDag-Erling Smørgravelse 139*5afab0e5SDag-Erling Smørgrav sslflags="no-shared no-asm -DOPENSSL_NO_CAPIENG mingw" 140*5afab0e5SDag-Erling Smørgravfi 141*5afab0e5SDag-Erling Smørgravinfo "winssl: Configure $sslflags" 142*5afab0e5SDag-Erling SmørgravCC="${warch}-w64-mingw32-gcc" AR="${warch}-w64-mingw32-ar" RANLIB="${warch}-w64-mingw32-ranlib" WINDRES="${warch}-w64-mingw32-windres" ./Configure --prefix="$sslinstall" "$sslflags" || error_cleanup "OpenSSL Configure failed" 143*5afab0e5SDag-Erling Smørgravinfo "winssl: make" 144*5afab0e5SDag-Erling Smørgravmake || error_cleanup "make failed for $WINSSL" 145*5afab0e5SDag-Erling Smørgravinfo "winssl: make install_sw" 146*5afab0e5SDag-Erling Smørgravmake install_sw || error_cleanup "OpenSSL install failed" 147*5afab0e5SDag-Erling Smørgravcross_flag="$cross_flag --with-ssl=$sslinstall" 148*5afab0e5SDag-Erling Smørgravcd .. 149*5afab0e5SDag-Erling Smørgrav 150*5afab0e5SDag-Erling Smørgrav# Build ldns 151*5afab0e5SDag-Erling Smørgravldnsinstall="$(pwd)/ldnsinstall" 152*5afab0e5SDag-Erling Smørgravcd ldns 153*5afab0e5SDag-Erling Smørgravinfo "ldns: autoconf" 154*5afab0e5SDag-Erling Smørgrav# cp install-sh because one at ../.. means libtoolize won't install it for us. 155*5afab0e5SDag-Erling Smørgravif test ! -f install-sh -a -f ../../install-sh; then cp ../../install-sh . ; fi 156*5afab0e5SDag-Erling Smørgravlibtoolize -ci 157*5afab0e5SDag-Erling Smørgravautoreconf -fi 158*5afab0e5SDag-Erling Smørgravldns_flag="--with-examples --with-drill" 159*5afab0e5SDag-Erling Smørgravinfo "ldns: Configure $cross_flag $ldns_flag" 160*5afab0e5SDag-Erling Smørgrav$configure "$cross_flag" "$ldns_flag" || error_cleanup "ldns configure failed" 161*5afab0e5SDag-Erling Smørgravinfo "ldns: make" 162*5afab0e5SDag-Erling Smørgravmake || error_cleanup "ldns make failed" 163*5afab0e5SDag-Erling Smørgrav# do not strip debug symbols, could be useful for stack traces 164*5afab0e5SDag-Erling Smørgrav# $strip lib/*.dll || error_cleanup "cannot strip ldns dll" 165*5afab0e5SDag-Erling Smørgravmake doc || error_cleanup "ldns make doc failed" 166*5afab0e5SDag-Erling SmørgravDESTDIR=$ldnsinstall make install || error_cleanup "ldns make install failed" 167*5afab0e5SDag-Erling Smørgravcd .. 168*5afab0e5SDag-Erling Smørgrav 169*5afab0e5SDag-Erling Smørgrav# Build OpenSSL nonstatic 170*5afab0e5SDag-Erling Smørgravsslinstallnonstatic="$(pwd)/sslinstallnonstatic" 171*5afab0e5SDag-Erling Smørgravmkdir openssl-nonstatic 172*5afab0e5SDag-Erling Smørgravcd openssl-nonstatic 173*5afab0e5SDag-Erling Smørgrav# remove openssl-a.b.c/ and put in openssl-nonstatic directory 174*5afab0e5SDag-Erling Smørgravgzip -cd "$WINSSL" | tar xf - --strip-components=1 || error_cleanup "tar unpack of $WINSSL failed" 175*5afab0e5SDag-Erling Smørgravif test "$configure" = "mingw64-configure"; then 176*5afab0e5SDag-Erling Smørgrav sslflags_nonstatic="shared no-asm -DOPENSSL_NO_CAPIENG mingw64" 177*5afab0e5SDag-Erling Smørgravelse 178*5afab0e5SDag-Erling Smørgrav sslflags_nonstatic="shared no-asm -DOPENSSL_NO_CAPIENG mingw" 179*5afab0e5SDag-Erling Smørgravfi 180*5afab0e5SDag-Erling Smørgravinfo "winsslnonstatic: Configure $sslflags_nonstatic" 181*5afab0e5SDag-Erling SmørgravCC="${warch}-w64-mingw32-gcc" AR="${warch}-w64-mingw32-ar" RANLIB="${warch}-w64-mingw32-ranlib" WINDRES="${warch}-w64-mingw32-windres" ./Configure --prefix="$sslinstallnonstatic" "$sslflags_nonstatic" || error_cleanup "OpenSSL Configure failed" 182*5afab0e5SDag-Erling Smørgravinfo "winsslnonstatic: make" 183*5afab0e5SDag-Erling Smørgravmake || error_cleanup "make failed for $WINSSL" 184*5afab0e5SDag-Erling Smørgravinfo "winsslnonstatic: make install_sw" 185*5afab0e5SDag-Erling Smørgravmake install_sw || error_cleanup "OpenSSL install failed" 186*5afab0e5SDag-Erling Smørgravcross_flag_nonstatic="$cross_flag_nonstatic --with-ssl=$sslinstallnonstatic" 187*5afab0e5SDag-Erling Smørgravcd .. 188*5afab0e5SDag-Erling Smørgrav 189*5afab0e5SDag-Erling Smørgrav# Build ldns nonstatic 190*5afab0e5SDag-Erling Smørgravldnsinstallnonstatic="$(pwd)/ldnsinstall-nonstatic" 191*5afab0e5SDag-Erling Smørgravcd ldns-nonstatic 192*5afab0e5SDag-Erling Smørgravinfo "ldnsnonstatic: autoconf" 193*5afab0e5SDag-Erling Smørgrav# cp install-sh because one at ../.. means libtoolize won't install it for us. 194*5afab0e5SDag-Erling Smørgravif test ! -f install-sh -a -f ../../install-sh; then cp ../../install-sh . ; fi 195*5afab0e5SDag-Erling Smørgravlibtoolize -ci 196*5afab0e5SDag-Erling Smørgravautoreconf -fi 197*5afab0e5SDag-Erling Smørgravldns_flag_nonstatic="--with-examples --with-drill" 198*5afab0e5SDag-Erling Smørgravinfo "ldnsnonstatic: Configure $cross_flag_nonstatic $ldns_flag_nonstatic" 199*5afab0e5SDag-Erling Smørgrav$configure "$cross_flag_nonstatic" "$ldns_flag_nonstatic" || error_cleanup "ldns configure failed" 200*5afab0e5SDag-Erling Smørgravinfo "ldnsnonstatic: make" 201*5afab0e5SDag-Erling Smørgravmake || error_cleanup "ldns make failed" 202*5afab0e5SDag-Erling Smørgrav# do not strip debug symbols, could be useful for stack traces 203*5afab0e5SDag-Erling Smørgrav# $strip lib/*.dll || error_cleanup "cannot strip ldns dll" 204*5afab0e5SDag-Erling Smørgravmake doc || error_cleanup "ldns make doc failed" 205*5afab0e5SDag-Erling SmørgravDESTDIR=$ldnsinstallnonstatic make install || error_cleanup "ldns make install failed" 206*5afab0e5SDag-Erling Smørgravcd .. 207*5afab0e5SDag-Erling Smørgrav 208*5afab0e5SDag-Erling Smørgrav# create zipfile 209*5afab0e5SDag-Erling Smørgravfile="ldns-$version.zip" 210*5afab0e5SDag-Erling Smørgravrm -f "$file" 211*5afab0e5SDag-Erling Smørgravinfo "Creating $file" 212*5afab0e5SDag-Erling Smørgravmkdir file 213*5afab0e5SDag-Erling Smørgravcd file 214*5afab0e5SDag-Erling Smørgravinstallplace="$ldnsinstall/usr/$warch-w64-mingw32/sys-root/mingw" 215*5afab0e5SDag-Erling Smørgravinstallplacenonstatic="$ldnsinstallnonstatic/usr/$warch-w64-mingw32/sys-root/mingw" 216*5afab0e5SDag-Erling Smørgravcp "$installplace"/lib/libldns.a . 217*5afab0e5SDag-Erling Smørgravcp "$installplacenonstatic"/lib/libldns.dll.a . 218*5afab0e5SDag-Erling Smørgravcp "$installplacenonstatic"/bin/*.dll . 219*5afab0e5SDag-Erling Smørgravcp "$sslinstallnonstatic"/lib/*.dll.a . 220*5afab0e5SDag-Erling Smørgravcp "$sslinstallnonstatic"/bin/*.dll . 221*5afab0e5SDag-Erling Smørgravcp "$sslinstallnonstatic"/lib/engines-*/*.dll . 222*5afab0e5SDag-Erling Smørgravcp ../ldns/LICENSE . 223*5afab0e5SDag-Erling Smørgravcp ../ldns/README . 224*5afab0e5SDag-Erling Smørgravcp ../ldns/Changelog . 225*5afab0e5SDag-Erling Smørgravinfo "copy static exe" 226*5afab0e5SDag-Erling Smørgravfor x in "$installplace"/bin/* ; do 227*5afab0e5SDag-Erling Smørgrav cp "$x" "$(basename "$x").exe" 228*5afab0e5SDag-Erling Smørgravdone 229*5afab0e5SDag-Erling Smørgrav# but the shell script stays a script file 230*5afab0e5SDag-Erling Smørgravmv ldns-config.exe ldns-config 231*5afab0e5SDag-Erling Smørgravinfo "copy include" 232*5afab0e5SDag-Erling Smørgravmkdir include 233*5afab0e5SDag-Erling Smørgravmkdir include/ldns 234*5afab0e5SDag-Erling Smørgravcp "$installplace"/include/ldns/*.h include/ldns/. 235*5afab0e5SDag-Erling Smørgravinfo "copy man1" 236*5afab0e5SDag-Erling Smørgravmkdir man1 237*5afab0e5SDag-Erling Smørgravcp "$installplace"/share/man/man1/* man1/. 238*5afab0e5SDag-Erling Smørgravinfo "copy man3" 239*5afab0e5SDag-Erling Smørgravmkdir man3 240*5afab0e5SDag-Erling Smørgravcp "$installplace"/share/man/man3/* man3/. 241*5afab0e5SDag-Erling Smørgravinfo "create cat1" 242*5afab0e5SDag-Erling Smørgravmkdir cat1 243*5afab0e5SDag-Erling Smørgravfor x in man1/*.1; do groff -man -Tascii -Z "$x" | grotty -cbu > cat1/"$(basename "$x" .1).txt"; done 244*5afab0e5SDag-Erling Smørgravinfo "create cat3" 245*5afab0e5SDag-Erling Smørgravmkdir cat3 246*5afab0e5SDag-Erling Smørgravfor x in man3/*.3; do groff -man -Tascii -Z "$x" | grotty -cbu > cat3/"$(basename "$x" .3).txt"; done 247*5afab0e5SDag-Erling Smørgravrm -f "../../$file" 248*5afab0e5SDag-Erling Smørgravinfo "$file contents" 249*5afab0e5SDag-Erling Smørgrav# show contents of directory we are zipping up. 250*5afab0e5SDag-Erling Smørgravdu -s ./* 251*5afab0e5SDag-Erling Smørgrav# zip it 252*5afab0e5SDag-Erling Smørgravinfo "zip $file" 253*5afab0e5SDag-Erling Smørgravzip -r ../../"$file" LICENSE README libldns.a *.dll *.dll.a Changelog *.exe include man1 man3 cat1 cat3 254*5afab0e5SDag-Erling Smørgravinfo "Testing $file" 255*5afab0e5SDag-Erling Smørgrav(cd ../.. ; zip -T "$file" ) || error_cleanup "errors in zipfile $file" 256*5afab0e5SDag-Erling Smørgravcd .. 257*5afab0e5SDag-Erling Smørgrav 258*5afab0e5SDag-Erling Smørgrav# cleanup before exit 259*5afab0e5SDag-Erling Smørgravcd "$tmpdir" 260*5afab0e5SDag-Erling Smørgravrm -rf "$cdir" 261*5afab0e5SDag-Erling Smørgravecho "done" 262*5afab0e5SDag-Erling Smørgrav# display 263*5afab0e5SDag-Erling Smørgravls -lG "$file" 264