fe300691f9ade454130a922fa628d17953908eed
[wimlib] / tools / make-windows-release
1 #!/bin/bash
2 #
3 # This script prepares a Windows binary distribution of wimlib on Linux using
4 # MinGW-w64.  The desired architecture must be passed as the first argument.
5
6 set -e
7
8 if [ ! -e src/wim.c ]; then
9         echo "This script must be run from the toplevel directory" 1>&2
10         exit 1
11 fi
12
13 if [ $# -ne 1 ]; then
14         echo "Usage: $0 i686|x86_64" 1>&2
15         exit 1
16 fi
17
18 ARCH="$1"
19 shift
20
21 case "$ARCH" in
22 i686|x86_64)
23         ;;
24 *)
25         echo "ERROR: ARCH must be i686 or x86_64" 1>&2
26         exit 1
27         ;;
28 esac
29
30 VERSION=$(grep 'AC_INIT' configure.ac | \
31           grep -o '[0-9]\+\.[0-9]\+\.[0-9]\+[^]]*')
32 DESTDIR=wimlib-${VERSION}-windows-${ARCH}-bin
33 ZIPFILE=wimlib-${VERSION}-windows-${ARCH}-bin.zip
34 MAKE="make -j $(grep -c processor /proc/cpuinfo)"
35 WINDEPDIR=./tools/windeps
36 SYSROOT=$WINDEPDIR/sysroot_${ARCH}
37
38 # Prepare third party libraries
39
40 if [ ! -e $SYSROOT ]; then
41         $MAKE -C $WINDEPDIR sysroot_${ARCH}
42 fi
43
44 # Compile wimlib
45
46 if ! grep -q "./configure --host=${ARCH}-w64-mingw32" config.log || \
47         ! grep -q "configure: exit 0" config.log
48 then
49         # Note: putting -static-libgcc in CC is a workaround for libtool
50         # stripping it:
51         # http://www.gnu.org/software/libtool/manual/libtool.html#Stripped-link-flags
52         ./configure --host=${ARCH}-w64-mingw32 --disable-static         \
53                 CC="${ARCH}-w64-mingw32-gcc -static-libgcc"             \
54                 CFLAGS="-O2 -Wall"                                      \
55                 CPPFLAGS="-I$SYSROOT/include -I$SYSROOT/include/libxml2"\
56                 LDFLAGS="-L$SYSROOT/lib"
57         $MAKE clean
58 fi
59 $MAKE
60
61 # Create empty destination directory
62
63 rm -rf $DESTDIR
64 mkdir $DESTDIR
65
66 # Install binaries
67
68 cp .libs/*.{dll,exe} $DESTDIR
69 ${ARCH}-w64-mingw32-strip $DESTDIR/*.{dll,exe}
70
71 # Install text files
72
73 cp NEWS README* COPYING* $DESTDIR
74 cp $WINDEPDIR/COPYING* $DESTDIR
75 (
76         cd $DESTDIR
77         for fil in NEWS README* COPYING*; do
78                 sed < $fil > ${fil}.txt -e 's/$/\r/g'
79                 rm $fil
80         done
81 )
82
83
84 # Install man pages
85
86 mkdir $DESTDIR/doc
87
88 function gen_pdf_from_man_page() {
89         local manbase=$1
90         local pdf=${DESTDIR}/doc/${manbase}.pdf
91
92         echo "Generating $pdf"
93
94         MANPATH="./doc" man -t $manbase | ps2pdf - $pdf
95 }
96
97 for fil in ./doc/man1/wimlib-imagex-*.1; do
98         manbase=`basename $fil`
99         manbase=${manbase%%.1}
100         cmd=$(echo $manbase | sed s/wimlib-imagex-//)
101         if [ $cmd == mount -o $cmd == mountrw -o $cmd == unmount ]; then
102                 continue
103         fi
104
105         gen_pdf_from_man_page $manbase
106
107         sed 's/$/\r/g' > ${DESTDIR}/wim${cmd}.cmd <<- EOF
108                 @echo off
109                 %~dp0\\wimlib-imagex $cmd %*
110         EOF
111         chmod +x ${DESTDIR}/wim${cmd}.cmd
112 done
113
114 gen_pdf_from_man_page wimlib-imagex
115
116 # Generate ZIP file
117
118 rm -f $ZIPFILE
119 (
120         dir=$PWD
121         cd $DESTDIR
122         7z -mx9 a "$dir/$ZIPFILE" .
123 )