]> wimlib.net Git - wimlib/blob - tools/make-windows-release
Eliminate the dependency on libxml2
[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 [ $# -lt 1 ]; then
14         echo "Usage: $0 i686|x86_64 [EXTRA_CONFIGURE_ARG]..." 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=$(tools/get-version-number)
31 DESTDIR=wimlib-${VERSION}-windows-${ARCH}-bin
32 ZIPFILE=wimlib-${VERSION}-windows-${ARCH}-bin.zip
33 MAKE="make -j $(grep -c processor /proc/cpuinfo)"
34
35 # Compile wimlib
36
37 if ! [ -e config.log ] ||
38         ! grep -q "./configure --host=${ARCH}-w64-mingw32" config.log || \
39         ! grep -q "configure: exit 0" config.log || \
40         [ $# -gt 0 ]
41 then
42         # Note: putting -static-libgcc in CC is a workaround for libtool
43         # stripping it:
44         # http://www.gnu.org/software/libtool/manual/libtool.html#Stripped-link-flags
45         ./configure --host=${ARCH}-w64-mingw32 --disable-static         \
46                 CC="${ARCH}-w64-mingw32-gcc -static-libgcc" "$@"
47         $MAKE clean
48 fi
49 $MAKE
50
51 # Create empty destination directory
52
53 rm -rf $DESTDIR
54 mkdir $DESTDIR
55
56 # Install binaries
57
58 cp .libs/*.{dll,exe} $DESTDIR
59 ${ARCH}-w64-mingw32-strip $DESTDIR/*.{dll,exe}
60
61 # Install text files
62
63 cp NEWS README* COPYING* $DESTDIR
64
65 sed -n '/^#/q; s/^[\/\* ]*//; p' src/divsufsort.c > $DESTDIR/COPYING.libdivsufsort-lite
66 if ! grep -q 'Copyright' $DESTDIR/COPYING.libdivsufsort-lite; then
67         echo "ERROR: failed to extract libdivsufsort-lite license text" 1>&2
68         exit 1
69 fi
70 (
71         cd $DESTDIR
72         for fil in NEWS README* COPYING*; do
73                 sed < $fil > ${fil}.txt -e 's/$/\r/g'
74                 rm $fil
75         done
76 )
77
78
79 # Install man pages
80
81 mkdir $DESTDIR/doc
82
83 function gen_pdf_from_man_page() {
84         local manbase=$1
85         local pdf=${DESTDIR}/doc/${manbase}.pdf
86
87         echo "Generating $pdf"
88
89         MANPATH="./doc" man -t $manbase | ps2pdf - $pdf
90 }
91
92 for fil in ./doc/man1/wim*.1; do
93         manbase=`basename $fil`
94         cmd=${manbase%.1}
95         case $cmd in
96         wimlib-imagex|wimmount|wimmountrw|wimunmount)
97                 continue
98                 ;;
99         esac
100
101         gen_pdf_from_man_page $cmd
102
103         sed 's/$/\r/g' > ${DESTDIR}/${cmd}.cmd <<- EOF
104                 @echo off
105                 "%~dp0\\wimlib-imagex" ${cmd#wim} %*
106         EOF
107         chmod +x ${DESTDIR}/${cmd}.cmd
108 done
109
110 gen_pdf_from_man_page wimlib-imagex
111
112 # Install development files
113
114 mkdir $DESTDIR/devel
115 cp .libs/libwim.dll.a $DESTDIR/devel/libwim.lib
116 cp include/wimlib.h $DESTDIR/devel/
117
118 # Generate ZIP file
119
120 rm -f $ZIPFILE
121 (
122         dir=$PWD
123         cd $DESTDIR
124         7z -mx9 a "$dir/$ZIPFILE" .
125 )