#!/bin/bash # # This script prepares a Windows binary distribution of wimlib on Linux using # MinGW-w64. The desired architecture must be passed as the first argument. set -e if [ ! -e src/wim.c ]; then echo "This script must be run from the toplevel directory" 1>&2 exit 1 fi if [ $# -ne 1 ]; then echo "Usage: $0 i686|x86_64" 1>&2 exit 1 fi ARCH="$1" shift case "$ARCH" in i686|x86_64) ;; *) echo "ERROR: ARCH must be i686 or x86_64" 1>&2 exit 1 ;; esac VERSION=$(grep 'AC_INIT' configure.ac | \ grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+[^]]*') DESTDIR=wimlib-${VERSION}-windows-${ARCH}-bin ZIPFILE=wimlib-${VERSION}-windows-${ARCH}-bin.zip MAKE="make -j $(grep -c processor /proc/cpuinfo)" WINDEPDIR=./tools/windeps SYSROOT=$WINDEPDIR/sysroot_${ARCH} # Prepare third party libraries if [ ! -e $SYSROOT ]; then $MAKE -C $WINDEPDIR sysroot_${ARCH} fi # Compile wimlib if ! grep -q "./configure --host=${ARCH}-w64-mingw32" config.log || \ ! grep -q "configure: exit 0" config.log then extra_args= if [ $ARCH = x86_64 ]; then extra_args="--enable-ssse3-sha1" fi # Note: putting -static-libgcc in CC is a workaround for libtool # stripping it: # http://www.gnu.org/software/libtool/manual/libtool.html#Stripped-link-flags ./configure --host=${ARCH}-w64-mingw32 --disable-static \ CC="${ARCH}-w64-mingw32-gcc -static-libgcc" \ CFLAGS="-O2 -Wall" \ CPPFLAGS="-I$SYSROOT/include -I$SYSROOT/include/libxml2"\ LDFLAGS="-L$SYSROOT/lib" \ $extra_args $MAKE clean fi $MAKE # Create empty destination directory rm -rf $DESTDIR mkdir $DESTDIR # Install binaries cp .libs/*.{dll,exe} $DESTDIR ${ARCH}-w64-mingw32-strip $DESTDIR/*.{dll,exe} # Install text files cp NEWS README* COPYING* $DESTDIR cp $WINDEPDIR/COPYING* $DESTDIR ( cd $DESTDIR for fil in NEWS README* COPYING*; do sed < $fil > ${fil}.txt -e 's/$/\r/g' rm $fil done ) # Install man pages mkdir $DESTDIR/doc function gen_pdf_from_man_page() { local manbase=$1 local pdf=${DESTDIR}/doc/${manbase}.pdf echo "Generating $pdf" MANPATH="./doc" man -t $manbase | ps2pdf - $pdf } for fil in ./doc/man1/wimlib-imagex-*.1; do manbase=`basename $fil` manbase=${manbase%%.1} cmd=$(echo $manbase | sed s/wimlib-imagex-//) if [ $cmd == mount -o $cmd == mountrw -o $cmd == unmount ]; then continue fi gen_pdf_from_man_page $manbase sed 's/$/\r/g' > ${DESTDIR}/wim${cmd}.cmd <<- EOF @echo off %~dp0\\wimlib-imagex $cmd %* EOF chmod +x ${DESTDIR}/wim${cmd}.cmd done gen_pdf_from_man_page wimlib-imagex # Generate ZIP file rm -f $ZIPFILE ( dir=$PWD cd $DESTDIR 7z -mx9 a "$dir/$ZIPFILE" . )