OLD | NEW |
| (Empty) |
1 #!/bin/sh | |
2 # | |
3 ############################################################################### | |
4 # | |
5 # Build a binary package on Windows with MinGW and MSYS | |
6 # | |
7 # Set the paths where MinGW, Mingw-w32, or MinGW-w64 are installed. If both | |
8 # MinGW and MinGW-w32 are specified, MinGW will be used. If there is no | |
9 # 32-bit or 64-bit compiler at all, it is simply skipped. | |
10 # | |
11 # Optionally, 7-Zip is used to create the final .zip and .7z packages. | |
12 # If you have installed it in the default directory, this script should | |
13 # find it automatically. Otherwise adjust the path manually. | |
14 # | |
15 # If you want to use a cross-compiler e.g. on GNU/Linux, this script won't | |
16 # work out of the box. You need to omit "make check" commands and replace | |
17 # u2d with some other tool to convert newlines from LF to CR+LF. You will | |
18 # also need to pass the --host option to configure. | |
19 # | |
20 ############################################################################### | |
21 # | |
22 # Author: Lasse Collin | |
23 # | |
24 # This file has been put into the public domain. | |
25 # You can do whatever you want with this file. | |
26 # | |
27 ############################################################################### | |
28 | |
29 MINGW_DIR=/c/devel/tools/mingw | |
30 MINGW_W32_DIR=/c/devel/tools/mingw-w32 | |
31 MINGW_W64_DIR=/c/devel/tools/mingw-w64 | |
32 | |
33 for SEVENZ_EXE in "$PROGRAMW6432/7-Zip/7z.exe" "$PROGRAMFILES/7-Zip/7z.exe" \ | |
34 "/c/Program Files/7-Zip/7z.exe" | |
35 do | |
36 [ -x "$SEVENZ_EXE" ] && break | |
37 done | |
38 | |
39 | |
40 # Abort immediately if something goes wrong. | |
41 set -e | |
42 | |
43 # White spaces in directory names may break things so catch them immediately. | |
44 case $(pwd) in | |
45 ' ' | ' ' | ' | |
46 ') echo "Error: White space in the directory name" >&2; exit 1 ;; | |
47 esac | |
48 | |
49 # This script can be run either at the top-level directory of the package | |
50 # or in the same directory containing this script. | |
51 if [ ! -f windows/build.sh ]; then | |
52 cd .. | |
53 if [ ! -f windows/build.sh ]; then | |
54 echo "You are in a wrong directory." >&2 | |
55 exit 1 | |
56 fi | |
57 fi | |
58 | |
59 # Run configure and copy the binaries to the given directory. | |
60 # | |
61 # The first argument is the directory where to copy the binaries. | |
62 # The rest of the arguments are passed to configure. | |
63 buildit() | |
64 { | |
65 DESTDIR=$1 | |
66 BUILD=$2 | |
67 CFLAGS=$3 | |
68 | |
69 # Clean up if it was already configured. | |
70 [ -f Makefile ] && make distclean | |
71 | |
72 # Build the size-optimized binaries. Note that I don't want to | |
73 # provide size-optimized liblzma (shared nor static), because | |
74 # that isn't thread-safe now, and depending on bunch of things, | |
75 # maybe it will never be on Windows (pthreads-win32 helps but | |
76 # static liblzma might bit a bit tricky with it). | |
77 ./configure \ | |
78 --prefix= \ | |
79 --disable-nls \ | |
80 --disable-threads \ | |
81 --disable-shared \ | |
82 --enable-small \ | |
83 --build="$BUILD" \ | |
84 CFLAGS="$CFLAGS -Os" | |
85 make check | |
86 | |
87 mkdir -pv "$DESTDIR" | |
88 cp -v src/xzdec/{xz,lzma}dec.exe src/lzmainfo/lzmainfo.exe "$DESTDIR" | |
89 | |
90 make distclean | |
91 | |
92 # Build the normal speed-optimized binaries. Note that while | |
93 # --disable-threads has been documented to make some things | |
94 # thread-unsafe, it's not actually true with this combination | |
95 # of configure flags in XZ Utils 5.0.x. Things can (and probably | |
96 # will) change after 5.0.x, and this script will be updated too. | |
97 ./configure \ | |
98 --prefix= \ | |
99 --disable-nls \ | |
100 --disable-threads \ | |
101 --enable-dynamic=no \ | |
102 --build="$BUILD" \ | |
103 CFLAGS="$CFLAGS -O2" | |
104 make check | |
105 | |
106 cp -v src/xz/xz.exe src/liblzma/.libs/liblzma.a "$DESTDIR" | |
107 cp -v src/liblzma/.libs/liblzma-*.dll "$DESTDIR/liblzma.dll" | |
108 | |
109 strip -v "$DESTDIR/"* | |
110 } | |
111 | |
112 # Copy files and convert newlines from LF to CR+LF. Optinally add a suffix | |
113 # to the destination filename. | |
114 # | |
115 # The first argument is the destination directory. The second argument is | |
116 # the suffix to append to the filenames; use empty string if no extra suffix | |
117 # is wanted. The rest of the arguments are actual the filenames. | |
118 txtcp() | |
119 { | |
120 DESTDIR=$1 | |
121 SUFFIX=$2 | |
122 shift 2 | |
123 for SRCFILE; do | |
124 DESTFILE="$DESTDIR/${SRCFILE##*/}$SUFFIX" | |
125 echo "Converting \`$SRCFILE' -> \`$DESTFILE'" | |
126 u2d < "$SRCFILE" > "$DESTFILE" | |
127 done | |
128 } | |
129 | |
130 # FIXME: Make sure that we don't get i686 or i586 code from the runtime. | |
131 # Actually i586 would be fine, but i686 probably not if the idea is to | |
132 # support even Win95. | |
133 # | |
134 # FIXME: Using i486 in the configure triplet may be wrong. | |
135 if [ -d "$MINGW_DIR" ]; then | |
136 # 32-bit x86, Win95 or later, using MinGW | |
137 PATH=$MINGW_DIR/bin:$PATH \ | |
138 buildit \ | |
139 pkg/bin_i486 \ | |
140 i486-pc-mingw32 \ | |
141 '-march=i486 -mtune=generic' | |
142 elif [ -d "$MINGW_W32_DIR" ]; then | |
143 # 32-bit x86, Win95 or later, using MinGW-w32 | |
144 PATH=$MINGW_W32_DIR/bin:$MINGW_W32_DIR/i686-w64-mingw32/bin:$PATH \ | |
145 buildit \ | |
146 pkg/bin_i486 \ | |
147 i486-w64-mingw32 \ | |
148 '-march=i486 -mtune=generic' | |
149 fi | |
150 | |
151 if [ -d "$MINGW_W64_DIR" ]; then | |
152 # 64-bit x86, WinXP or later, using MinGW-w64 | |
153 PATH=$MINGW_W64_DIR/bin:$MINGW_W64_DIR/x86_64-w64-mingw32/bin:$PATH \ | |
154 buildit \ | |
155 pkg/bin_x86-64 \ | |
156 x86_64-w64-mingw32 \ | |
157 '-march=x86-64 -mtune=generic' | |
158 fi | |
159 | |
160 # Copy the headers, the .def file, and the docs. | |
161 # They are the same for all architectures and builds. | |
162 mkdir -pv pkg/{include/lzma,doc/manuals} | |
163 txtcp pkg/include "" src/liblzma/api/lzma.h | |
164 txtcp pkg/include/lzma "" src/liblzma/api/lzma/*.h | |
165 txtcp pkg/doc "" src/liblzma/liblzma.def | |
166 txtcp pkg/doc .txt AUTHORS COPYING NEWS README THANKS TODO | |
167 txtcp pkg/doc "" doc/*.txt | |
168 txtcp pkg/doc/manuals "" doc/man/txt/{xz,xzdec,lzmainfo}.txt | |
169 cp -v doc/man/pdf-*/{xz,xzdec,lzmainfo}-*.pdf pkg/doc/manuals | |
170 txtcp pkg "" windows/README-Windows.txt | |
171 | |
172 # Create the package. This requires 7z.exe from 7-Zip. If it wasn't found, | |
173 # this step is skipped and you have to zip it yourself. | |
174 VER=$(sh version.sh) | |
175 cd pkg | |
176 if [ -x "$SEVENZ_EXE" ]; then | |
177 "$SEVENZ_EXE" a -tzip ../xz-$VER-windows.zip * | |
178 "$SEVENZ_EXE" a ../xz-$VER-windows.7z * | |
179 else | |
180 echo | |
181 echo "NOTE: 7z.exe was not found. xz-$VER-windows.zip" | |
182 echo " and xz-$VER-windows.7z were not created." | |
183 echo " You can create them yourself from the pkg directory." | |
184 fi | |
185 | |
186 echo | |
187 echo "Build completed successfully." | |
188 echo | |
OLD | NEW |