]> git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/mac/wxPythonOSX/build
Updated Installer builder scripts and such for OS X
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
1 #!/bin/sh -e
2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
5
6 spectemplate=distrib/wxPythonFull.spec.in
7
8 if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
9 echo "Please run this script from the root wxPython directory."
10 exit 1
11 fi
12
13 #----------------------------------------------------------------------
14 # Check Parameters
15
16 function usage {
17 echo ""
18 echo "Usage: $0 [apple|local] [command flags...]"
19 echo ""
20 echo " apple Build for Apple's python in /usr/bin"
21 echo " local Build for a locally installed python in /usr/local/bin"
22 echo " (for example Jaguar's MacPython)"
23 echo ""
24 echo "optional command flags:"
25 echo " skiptar Don't unpack the tarball"
26 echo " use_cvs Use the CVS workspace instead of a tarfile"
27 echo " skipconfig Don't run configure"
28 echo " skipbuild Don't build wxWindows or wxPython"
29 echo " skipinstall Don't do the installation step"
30 echo " skipdmg Don't make the package or diskimage"
31 echo " skipclean Don't do the cleanup at the end"
32 echo ""
33 }
34
35
36 if [ $# -lt 1 ]; then
37 usage
38 exit 1
39 fi
40
41 KIND=$1
42 case $KIND in
43 apple) PYTHON=/usr/bin/python ;;
44 local) PYTHON=/usr/local/bin/python ;;
45 *) usage; exit 1 ;;
46 esac
47 PYTHONW=${PYTHON}w
48 shift
49
50
51 for flag in $*; do
52 case ${flag} in
53 skiptar) skiptar=1 ;;
54 use_cvs) skiptar=1; use_cvs=1 ;;
55 skipconfig) skipconfig=1; skiptar=1 ;;
56 skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;;
57 skipinstall) skipinstall=1 ;;
58 skipdmg) skipdmg=1 ;;
59 skipclean) skipclean=1 ;;
60
61 *) echo "Unknown flag \"${flag}\""
62 usage
63 exit 1
64 esac
65 done
66
67
68 VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
69 PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
70 PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
71 SITEPACKAGES=$PYPREFIX/lib/python$PYVER/site-packages
72
73 SRCDIR=/stuff/Development/wxPython/dist/$VERSION
74 TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz
75
76 PREFIX=/usr/lib/wxPython-$VERSION
77 BINPREFIX=/usr/bin
78
79 WXROOT=`dirname $PWD`
80 PROGDIR="`dirname \"$0\"`"
81 TMPDIR=$PWD/_build_dmg
82
83 BUILDROOT=$TMPDIR/build
84 INSTALLROOT=$TMPDIR/install
85 INSTALLDEVEL=$TMPDIR/install-devel
86 DMGDIR=$TMPDIR/dmg
87 RESOURCEDIR=$PROGDIR/resources
88 DESTDIR=$PWD/dist
89
90
91
92 #----------------------------------------------------------------------
93 # Setup builddirs
94
95 mkdir -p $BUILDROOT
96 mkdir -p $INSTALLROOT
97 #mkdir -p $INSTALLDEVEL
98 rm -rf $DMGDIR
99 mkdir -p $DMGDIR/root
100
101 pushd $BUILDROOT
102
103
104 #----------------------------------------------------------------------
105 # Unpack the tarball
106
107 if [ -z "$skiptar" ]; then
108 echo Unarchiving tarball...
109 tar xzf $TARBALL
110 fi
111
112 if [ "$use_cvs" = 1 ]; then
113 # copy the cvs workspace, except for build dirs
114
115 mkdir -p wxPythonSrc-$VERSION
116
117 echo Finding updated files...
118 if [ -e .last_copy ]; then
119 FEXPR="-cnewer .last_copy"
120 fi
121 MEASURE=$WXROOT//
122 find $WXROOT $FEXPR -print \
123 | grep -v $WXROOT/bld \
124 | grep -v wxPython/build \
125 | grep -v wxPython/_build \
126 | grep -v CVS \
127 | grep -v .pyc \
128 | cut -b ${#MEASURE}- > filelist
129
130 for x in `cat filelist`; do
131 if [ -d "$WXROOT/$x" ]; then
132 mkdir -p "wxPythonSrc-$VERSION/$x"
133 else
134 echo $x
135 cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x"
136 fi
137 done
138
139 touch .last_copy
140 fi
141
142
143 cd wxPythonSrc-$VERSION
144 WXDIR=`pwd`
145 mkdir -p $WXDIR/bld
146 cd $WXDIR/bld
147
148 #----------------------------------------------------------------------
149
150
151 # Configure wxWindows
152 if [ -z "$skipconfig" ]; then
153 ../configure \
154 --prefix=$PREFIX \
155 --with-mac \
156 --disable-monolithic \
157 --with-opengl \
158 --enable-geometry \
159 --enable-optimise \
160 --enable-precomp=no \
161 \
162 --with-libjpeg=builtin \
163 --with-libpng=builtin \
164 --with-libtiff=builtin \
165 --with-zlib=builtin \
166 \
167 --enable-debug_flag
168
169 fi
170
171 # Build wxWindows and wxPython
172 if [ -z "$skipbuild" ]; then
173
174 # Make wxWindows and some contribs
175 make
176 make -C contrib/src/gizmos
177 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
178 make -C contrib/src/stc
179 make -C contrib/src/xrc
180
181 if [ ! -e $WXDIR/include/wx/gizmos ]; then
182 # Make some links so the wxPython build can find all the headers it needs
183 pushd $WXDIR/include/wx
184 ln -s ../../contrib/include/wx/* .
185 popd
186 fi
187
188 # Build wxPython
189 cd $WXDIR/wxPython
190 $PYTHON setup.py \
191 NO_SCRIPTS=1 \
192 WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \
193 build
194
195
196 # Build wxrc (XRC resource tool)
197 cd $WXDIR/bld/contrib/utils/wxrc
198 make
199 strip wxrc
200
201 fi
202
203 #----------------------------------------------------------------------
204 # Install wxWindows
205
206 if [ -z "$skipinstall" ]; then
207 cd $WXDIR/bld
208 make prefix=$INSTALLROOT$PREFIX install
209 make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
210 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install
211 make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
212 make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install
213
214
215 # and wxPython
216 cd $WXDIR/wxPython
217 $PYTHON setup.py \
218 NO_SCRIPTS=1 \
219 WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
220 install \
221 --root=$INSTALLROOT
222
223
224 # install wxPython's tool scripts
225 mkdir -p $INSTALLROOT$BINPREFIX
226 cd $WXDIR/wxPython/scripts
227 python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
228
229 # Install wxrc
230 cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX
231
232
233 # install the wxPython headers
234 cd $WXDIR/wxPython
235 cp -R include $INSTALLROOT$PREFIX
236 mkdir -p $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
237 cp src/*.i $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
238
239
240 # TODO for $INSTALLROOT and $INSTALLDEVEL ?
241 #chown -R root:admin $INSTALLROOT
242 #chmod -R g+w $INSTALLROOT
243 fi
244
245 popd
246
247 #----------------------------------------------------------------------
248
249 # Make the Installer packages and disk image
250 if [ -z "$skipdmg" ]; then
251
252 # Remove the .pyc/.pyo files they just take up space and can be recreated
253 # during the install.
254 $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT
255
256
257 # Make the welcome message
258 case $KIND in
259 apple) W_MSG="an Apple installed (Panther) version of" ;;
260 local) W_MSG="a locally built version (or Jaguar version) of" ;;
261 esac
262 cat > $RESOURCEDIR/Welcome.txt <<EOF
263 Welcome!
264
265 This program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
266
267 Build date: `date`
268 EOF
269
270 # make the preflight script
271 cat > $RESOURCEDIR/preflight <<EOF
272 #!/bin/sh
273 # Cleanup any old install of the wxPython package
274 rm -rf \$2$SITEPACKAGES/wxPython
275 rm -rf \$2$SITEPACKAGES/wx
276 exit 0
277 EOF
278 chmod +x $RESOURCEDIR/preflight
279
280 # make the postflight script
281 cat > $RESOURCEDIR/postflight <<EOF
282 #!/bin/sh -e
283 # Compile the .py files in the wxPython pacakge
284 $PYTHON \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
285 $PYTHON \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
286 $PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
287 $PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
288
289
290 # and the wxPython pacakge should be group writable
291 chgrp -R admin \$2$SITEPACKAGES/wxPython
292 chmod -R g+w \$2$SITEPACKAGES/wxPython
293 chgrp -R admin \$2$SITEPACKAGES/wx
294 chmod -R g+w \$2$SITEPACKAGES/wx
295
296 exit 0
297 EOF
298 chmod +x $RESOURCEDIR/postflight
299
300
301
302 # Finally, build the main Installer Package...
303 rm -rf wxPythonOSX-$KIND.pkg
304 python $PROGDIR/../buildpkg.py \
305 --Title=wxPythonOSX-$KIND \
306 --Version=$VERSION \
307 --Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
308 --NeedsAuthorization="YES" \
309 --Relocatable="NO" \
310 --InstallOnly="YES" \
311 $INSTALLROOT \
312 $RESOURCEDIR
313
314 mv wxPythonOSX-$KIND.pkg $DMGDIR/root
315
316
317 # # and the devel package
318 # rm -rf wxPythonOSX-devel.pkg
319 # python $PROGDIR/../buildpkg.py \
320 # --Title=wxPythonOSX-devel \
321 # --Version=$VERSION \
322 # --Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
323 # --NeedsAuthorization="YES" \
324 # --Relocatable="NO" \
325 # --InstallOnly="YES" \
326 # $INSTALLDEVEL
327
328 # mv wxPythonOSX-devel.pkg $DMGDIR/root
329
330
331 # Make a README.txt to go on the disk image
332 cat > $DMGDIR/root/README.txt <<EOF
333 Welcome to wxPython!
334
335 On this disk image you will find the installer for the wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. You must already have MacPython-OSX installed.
336
337 wxPython-$KIND.pkg The installer package. It contains the wxPython
338 extension modules, wxMac dynamic libraries and
339 headers, and some scripts for the command-line
340 tools.
341
342 Everything else here is optional and you can drag them out of the disk
343 image and drop them where ever you want.
344
345 docs/ A few readmes, change log, etc. The full
346 documentation is downloadable separately.
347
348 licence/ License docs.
349
350 demo/ A copy of the wxPython demo.
351
352 samples/ Several small sample applications that
353 demonstrate how to use wxPython.
354
355 Happy Hacking!
356 EOF
357
358
359 # license files, docs, etc.
360 cp -pR $WXDIR/wxPython/licence $DMGDIR/root
361 rm -rf $WXDIR/wxPython/docs/xml-raw
362 cp -pR $WXDIR/wxPython/docs $DMGDIR/root
363 rm -rf $DMGDIR/root/docs/bin
364
365 # Copy the demo and samples to the disk image
366 cp -pR $WXDIR/wxPython/demo $DMGDIR/root
367 cp -pR $WXDIR/wxPython/samples $DMGDIR/root
368 rm $DMGDIR/root/demo/b
369
370
371 # Make an app bundle to launch PyCrust
372 $PYTHONW $PROGDIR/../buildapp.py \
373 --builddir=$DMGDIR/root \
374 --name=PyCrust \
375 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
376 --iconfile=$PROGDIR/PieShell.icns \
377 build
378
379 # Make an app to launch XRCed
380 $PYTHONW $PROGDIR/../buildapp.py \
381 --builddir=$DMGDIR/root \
382 --name=XRCed \
383 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
384 --iconfile=$PROGDIR/XRCed.icns \
385 build
386
387 # Make an app bundle to run the demo
388 $PYTHONW $PROGDIR/../buildapp.py \
389 --builddir=$DMGDIR/root \
390 --name="wxPython Demo" \
391 --mainprogram=$DMGDIR/root/demo/demo.py \
392 --iconfile=$PROGDIR/RunDemo.icns \
393 build
394 cp -pR $DMGDIR/root/demo/* "$DMGDIR/root/wxPython Demo.app/Contents/Resources"
395
396
397 # and then finally make a disk image containing the packages and etc.
398 $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
399
400 echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
401 mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR
402 fi
403
404
405 # Cleanup build/install dirs
406 if [ -z "$skipclean" ]; then
407 echo "Cleaning up..."
408 rm -rf $TMPDIR
409 else
410 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
411 fi
412