]> git.saurik.com Git - wxWidgets.git/blame_incremental - wxPython/distrib/mac/wxPythonOSX/build
Add support for Metrowerks compilers.
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
... / ...
CommitLineData
1#!/bin/sh -e
2#----------------------------------------------------------------------
3# Build wxMac and wxPythonOSX from the tarball and then make an
4# Installer package out of it.
5
6spectemplate=distrib/wxPythonFull.spec.in
7
8if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
9 echo "Please run this script from the root wxPython directory."
10 exit 1
11fi
12
13if [ "$UID" != "0" ]; then
14 echo "-------------------------------------------------------"
15 echo " WARNING: will be unable to change ownership of files"
16 echo " unless this script is run as root or via sudo"
17 echo "-------------------------------------------------------"
18fi
19
20#----------------------------------------------------------------------
21# Check Parameters
22
23function usage {
24 echo ""
25 echo "Usage: $0 [panther|jaguar] [command flags...]"
26 echo ""
27 echo " panther Build for Apple's python in /usr/bin, such as on Panther"
28 echo " jaguar Build for a python in /usr/local/bin, such as on Jaguar"
29 echo ""
30 echo "optional command flags:"
31 echo " skiptar Don't unpack the tarball"
32 echo " inplace Don't use the tarball, build from the CVS tree instead"
33 echo " (The Docs and Demo tarballs are still required for a full build.)"
34 echo " unicode Make a unicode build"
35 echo " skipconfig Don't run configure"
36 echo " skipbuild Don't build wxWidgets or wxPython"
37 echo " skipinstall Don't do the installation step"
38 echo " skipdmg Don't make the package or diskimage"
39 echo " skipclean Don't do the cleanup at the end"
40 echo ""
41}
42
43
44if [ $# -lt 1 ]; then
45 usage
46 exit 1
47fi
48
49KIND=$1
50case $KIND in
51 panther) PYTHON=/usr/bin/python ;;
52 jaguar) PYTHON=/usr/local/bin/python ;;
53 *) usage; exit 1 ;;
54esac
55PYTHONW=${PYTHON}w
56shift
57
58skiptar=no
59skipconfig=no
60skipbuild=no
61skipinstall=no
62skipdmg=no
63skipclean=no
64inplace=no
65unicode=no
66
67for flag in $*; do
68 case ${flag} in
69 skiptar) skiptar=yes ;;
70 skipconfig) skipconfig=yes; skiptar=yes ;;
71 skipbuild) skipbuild=yes; skipconfig=yes; skiptar=yes ;;
72 skipinstall) skipinstall=yes ;;
73 skipdmg) skipdmg=yes ;;
74 skipclean) skipclean=yes ;;
75 inplace) inplace=yes; skiptar=yes ;;
76 unicode) unicode=yes ;;
77
78 *) echo "Unknown flag \"${flag}\""
79 usage
80 exit 1
81 esac
82done
83
84
85VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
86PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
87PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
88PYLIB=$PYPREFIX/lib/python$PYVER
89SITEPACKAGES=$PYLIB/site-packages
90SHORTVER=`echo $VERSION | cut -c 1,2,3`
91
92if [ $unicode == yes ]; then
93 CHARTYPE=unicode
94 UNICODEOPT=--enable-unicode
95 PYUNICODEOPT=1
96else
97 CHARTYPE=ansi
98 UNICODEOPT=--disable-unicode
99 PYUNICODEOPT=0
100fi
101
102#if [ "$HOSTNAME" = "bigmac.alldunn.com" ]; then
103# MAKEJOBS="--jobs=2"
104#fi
105
106
107if [ -z "$TARBALLDIR" ]; then
108 # this is a spot on my fileserver where the tarballs go, adjust
109 # as needed for where you put the wxPython tarball, or set
110 # TARBALLDIR before invoking this script...
111 TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
112fi
113TARBALL=$TARBALLDIR/wxPython-src-$VERSION.tar.gz
114
115if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
116 echo "-------------------------------------------------------"
117 echo " WARNING: Demo tarball not found, will skip building "
118 echo " the Demo app bundle and etc."
119 echo " $TARBALLDIR/wxPython-demo-$VERSION.tar.gz"
120 echo "-------------------------------------------------------"
121fi
122
123if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
124 echo "-------------------------------------------------------"
125 echo " WARNING: Docs tarball not found, will skip building "
126 echo " the the wxDocsViewer app bundle and etc."
127 echo " $TARBALLDIR/wxPython-docs-$VERSION.tar.gz"
128 echo "-------------------------------------------------------"
129fi
130
131
132
133
134PREFIX=/usr/local/lib/wxPython-$CHARTYPE-$VERSION
135BINPREFIX=/usr/local/bin
136
137WXROOT=`dirname $PWD`
138PROGDIR="`dirname \"$0\"`"
139TMPDIR=$PWD/_build_dmg
140
141BUILDROOT=$TMPDIR/build
142
143INSTALLROOT=$TMPDIR/install-root
144INSTALLAPPS=$TMPDIR/install-apps
145
146DMGDIR=$TMPDIR/dmg
147DMGROOT=$DMGDIR/root
148DMGAPPS=$DMGDIR/apps
149
150RESOURCEDIR=$PROGDIR/resources
151DESTDIR=$PWD/dist
152SRCROOT=$BUILDROOT/wxPython-src-$VERSION
153
154
155#----------------------------------------------------------------------
156# Setup builddirs
157
158mkdir -p $BUILDROOT
159mkdir -p $INSTALLROOT
160mkdir -p $INSTALLAPPS
161
162rm -rf $DMGDIR
163mkdir -p $DMGROOT
164mkdir -p $DMGAPPS/Docs
165mkdir -p $DMGAPPS/Samples
166
167
168pushd $BUILDROOT
169
170
171#----------------------------------------------------------------------
172# Unpack the tarball
173
174if [ $skiptar != yes ]; then
175 echo Unarchiving tarball...
176 tar xzf $TARBALL
177fi
178
179if [ $inplace = no ]; then
180 # make a build dir and cd to it.
181 cd wxPython-src-$VERSION
182 WXDIR=`pwd`
183 mkdir -p $WXDIR/bld
184 cd $WXDIR/bld
185 WXBLD=$WXDIR/bld
186else
187
188 # If building "inplace" then our build dir will be off of the
189 # WXROOT like normal, adjust the variables to find things that
190 # way.
191 WXBLD=$WXROOT/build-$CHARTYPE
192 mkdir -p $WXBLD
193 cd $WXBLD
194 WXDIR=..
195 SRCROOT=$WXROOT
196fi
197
198echo "Using wx root dir: $WXROOT"
199echo "Using build dir: $WXBLD"
200echo "Using source tree: $WXDIR"
201
202#----------------------------------------------------------------------
203
204
205# Configure wxWidgets
206if [ $skipconfig != yes ]; then
207 $WXDIR/configure \
208 --prefix=$PREFIX \
209 --with-mac \
210 --enable-monolithic \
211 --with-opengl \
212 --enable-sound \
213 --enable-display \
214 --enable-geometry \
215 --enable-debug_flag \
216 --enable-precomp=no \
217 --enable-optimise \
218 $UNICODEOPT
219
220
221fi
222
223# Build wxWidgets and wxPython
224if [ $skipbuild != yes ]; then
225
226 # Make wxWidgets and some contribs
227
228 # For some reason Rez and DeRez have started locking up if run as
229 # root, figure out why, but in the meantime...
230 if [ "$UID" = "0" ]; then
231 chmod a+w lib
232 if [ "$CHARTYPE" = "ansi" ]; then
233 su robind -c "make lib/libwx_macd-2.5.3.r"
234 else
235 su robind -c "make lib/libwx_macud-2.5.3.r"
236 fi
237 fi
238
239 make $MAKEJOBS
240 make $MAKEJOBS -C contrib/src/gizmos
241 make $MAKEJOBS -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
242 make $MAKEJOBS -C contrib/src/stc
243
244 # Build wxPython
245 cd $WXROOT/wxPython
246 $PYTHON setup.py \
247 UNICODE=$PYUNICODEOPT \
248 NO_SCRIPTS=1 \
249 EP_ADD_OPTS=1 \
250 WX_CONFIG="$WXBLD/wx-config --inplace" \
251 BUILD_BASE=$WXBLD/wxPython \
252 build
253fi
254
255#----------------------------------------------------------------------
256
257if [ $skipinstall != yes ]; then
258 # Install wxWidgets
259 cd $WXBLD
260 make prefix=$INSTALLROOT$PREFIX install
261 make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
262 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install
263 make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
264
265
266 # relink wx-config with a relative link
267 cd $INSTALLROOT$PREFIX/bin
268 rm wx-config
269 ln -s ../lib/wx/config/* wx-config
270
271 # and wxPython
272 cd $WXROOT/wxPython
273 $PYTHON setup.py \
274 UNICODE=$PYUNICODEOPT \
275 NO_SCRIPTS=1 \
276 EP_ADD_OPTS=1 \
277 WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
278 BUILD_BASE=$WXBLD/wxPython \
279 install \
280 --root=$INSTALLROOT
281
282
283 # Apple's Python (on Panther) sym-links the site-packages dir to
284 # /Library/Python/$PYVER so we need to move the files so they are
285 # installed in the physical location, not the virtual one.
286 if [ "$KIND" = "panther" ]; then
287 if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then
288 rm -r $INSTALLROOT/Library/Python/$PYVER
289 fi
290 mkdir -p $INSTALLROOT/Library/Python/$PYVER
291 mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
292 rm -r $INSTALLROOT/System
293 SITEPACKAGES=/Library/Python/$PYVER
294 fi
295
296 # install wxPython's tool scripts
297 mkdir -p $INSTALLROOT$BINPREFIX
298 cd $WXROOT/wxPython/scripts
299 python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
300
301
302 # Remove the .pyc/.pyo files they just take up space and can be recreated
303 # during the install.
304 pushd $WXROOT/wxPython
305 $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
306 popd
307
308 # Set premissions for files in $INSTALLROOT
309 if [ "$UID" = "0" ]; then
310 chown -R root:admin $INSTALLROOT
311 chmod -R g+w $INSTALLROOT
312 fi
313fi
314
315if [ "$KIND" = "panther" ]; then
316 SITEPACKAGES=/Library/Python/$PYVER
317fi
318PKGDIR=`cat $INSTALLROOT$SITEPACKAGES/wx.pth`
319
320popd
321
322#----------------------------------------------------------------------
323
324# Make the Installer packages and disk image
325if [ $skipdmg != yes ]; then
326
327 #-----------------------------------------------
328 # The main runtime installer package
329
330 # Make the welcome message
331 case $KIND in
332 panther) W_MSG="the Panther (OS X 10.3.x) version of" ;;
333 jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;;
334 esac
335
336
337 cat > $RESOURCEDIR/Welcome.txt <<EOF
338Welcome!
339
340This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER. This includes:
341
342 * The wxPython packages and modules
343 * The wxWidgets shared libraries and headers
344 * Some command line tool scripts, installed to /usr/local/bin.
345
346You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
347
348You can install more than one version of the wxPython runtime if you desire. The most recently installed version will be the default wxPython, but you can choose another by setting the PYTHONPATH or by using the wxversion module. See http://wiki.wxpython.org/index.cgi/MultiVersionInstalls for more details.
349
350Build date: `date`
351EOF
352
353 # make the preflight script
354 cat > $RESOURCEDIR/preflight <<EOF
355#!/bin/sh
356# Cleanup any old install of the wxPython package
357rm -rf \$2$SITEPACKAGES/wxPython
358rm -rf \$2$SITEPACKAGES/wx
359rm -rf \$2$SITEPACKAGES/$PKGDIR
360exit 0
361EOF
362 chmod +x $RESOURCEDIR/preflight
363
364 # make the postflight script
365 cat > $RESOURCEDIR/postflight <<EOF
366#!/bin/sh -e
367# Compile the .py files in the wxPython pacakge
368$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
369$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/$PKGDIR
370
371# and all of the wxPython pacakge should be group writable
372chgrp -R admin \$2$SITEPACKAGES/$PKGDIR
373chmod -R g+w \$2$SITEPACKAGES/$PKGDIR
374
375exit 0
376EOF
377 chmod +x $RESOURCEDIR/postflight
378
379
380
381 # Build the main Installer Package...
382 rm -rf wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg
383 python $PROGDIR/../buildpkg.py \
384 --Title=wxPython${SHORTVER}-osx-$CHARTYPE-$KIND \
385 --Version=$VERSION \
386 --Description="wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER" \
387 --NeedsAuthorization="YES" \
388 --Relocatable="NO" \
389 --InstallOnly="YES" \
390 $INSTALLROOT \
391 $RESOURCEDIR
392
393 mv wxPython${SHORTVER}-osx-$CHARTYPE-$KIND.pkg $DMGROOT
394
395 rm $RESOURCEDIR/postflight
396 rm $RESOURCEDIR/preflight
397 rm $RESOURCEDIR/Welcome.txt
398
399
400 #-----------------------------------------------
401 # Make a README to go on the disk image
402 cat > "$DMGROOT/README 1st.txt" <<EOF
403Welcome to wxPython!
404
405This disk image contains the following items:
406
407 wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND
408
409 This Installer contains the wxPython runtime, compiled on a
410 $KIND OS X system, using the $CHARTYPE build of the wxWidgets
411 library. It includes the Python modules and extension
412 modules, as well as the wxWidgets libraries.
413
414 It is possible to have more than one version of the runtime
415 installed at once if you wish. The most recently installed
416 version will be the default wxPython, but you can choose
417 another by setting the PYTHONPATH or by using the wxversion
418 module. For more details see:
419 http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
420
421
422 uninstall_wxPython.py
423
424 A simple tool to help you manage your installed versions of
425 wxPython. It will allow you to choose from the currently
426 installed wxPython packages and to select one for
427 uninstallation. It is a text-mode tool so you can either run
428 it from a Terminal command line, or you can open it with
429 PythonLauncher and let it create a Terminal to run it in.
430
431 NOTE: If you have versions prior to 2.5.3.1 installed, please
432 do run this uninstall tool to remove the older version.
433
434EOF
435
436
437
438 cp $PROGDIR/../uninstall_wxPython.py $DMGROOT
439
440
441 #-----------------------------------------------
442 # Make a disk image to hold these files
443 dmgname=wxPython${SHORTVER}-osx-$CHARTYPE-$VERSION-$KIND-py$PYVER
444 $PROGDIR/../makedmg $DMGROOT $DMGDIR $dmgname
445
446 echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
447 mv $DMGDIR/$dmgname.dmg $DESTDIR
448
449
450#---------------------------------------------------------------------------
451# Now create app bundles for the demo, docs, and tools and make another
452# disk image to hold it all.
453#---------------------------------------------------------------------------
454
455 cat > "$DMGAPPS/README 1st.txt" <<EOF
456Welcome to wxPython!
457
458On this disk image you will find Demo, Tools, Docs, and etc. for
459wxPython $VERSION. Everything here is optional and you can drag them
460out of the disk image and drop them wherever you want. You will need
461to have an installed wxPython runtime to be able to use any of them.
462
463
464 wxPython Demo An application bundle version of the demo.
465 (This has it's own copy of the demo sources
466 within the bundle.)
467
468 XRCed An application for editing wxPython resource
469 files (XRC files.)
470
471 PyCrust An application that provides an interactive
472 Python shell and also namespace inspectors.
473
474
475
476 Docs/wxDocsViewer An application that allows you to view the
477 wxWidgets documentation.
478
479 Docs/licence License files.
480
481 Docs/other A few readmes, change log, etc.
482
483
484 Samples/samples Several small sample applications that
485 demonstrate how to use wxPython.
486
487 Samples/demo A copy of the wxPython demo source code,
488 just open the folder and run demo.pyw.
489
490Happy Hacking!
491EOF
492
493# PyAlaMode An extension of PyCrust that includes source
494# file editing capabilities.
495
496
497 # wxDocs
498 if [ ! -e $TARBALLDIR/wxPython-docs-$VERSION.tar.gz ]; then
499 cat > "$DMGAPPS/Docs/Build ERROR.txt" <<EOF
500
501The wxPython-docs tarball was not found when building this disk image!
502
503EOF
504
505 else
506 pushd $BUILDROOT
507 tar xzvf $TARBALLDIR/wxPython-docs-$VERSION.tar.gz
508 popd
509
510 # Make an app to launch viewdocs.py
511 $PYTHONW $PROGDIR/../buildapp.py \
512 --builddir=$DMGAPPS/Docs \
513 --name=wxDocsViewer \
514 --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
515 --iconfile=$PROGDIR/Info.icns \
516 build
517
518 cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGAPPS/Docs/wxDocsViewer.app/Contents/Resources
519
520 cat > "$DMGAPPS/Docs/README 1st.txt" <<EOF
521
522The wxDocsViewer application needs to be copied to your Desktop (or
523someplace else you have write access to) before you can run it, so it
524can cache some indexes within its bundle.
525
526EOF
527
528 fi
529
530 # license files, docs, etc.
531 pushd $DMGAPPS/Docs
532 cp -pR $SRCROOT/wxPython/licence .
533 cp -pR $SRCROOT/wxPython/docs .
534 rm -rf docs/bin
535 rm -rf docs/xml-raw
536 mv docs other
537 popd
538
539
540 if [ ! -e $TARBALLDIR/wxPython-demo-$VERSION.tar.gz ]; then
541 cat > "$DMGAPPS/Samples/Build ERROR.txt" <<EOF
542
543The wxPython-demo tarball was not found when building this disk image!
544
545EOF
546 cp "$DMGAPPS/Samples/Build ERROR.txt" $DMGAPPS
547
548 else
549
550 # Copy the demo and samples to the disk image from the tarball
551 pushd $DMGAPPS/Samples
552 tar xzvf $TARBALLDIR/wxPython-demo-$VERSION.tar.gz
553 mv wxPython-$VERSION/* .
554 rm -rf wxPython-$VERSION
555 rm demo/b demo/.setup.sh
556 mv demo/demo.py demo/demo.pyw
557 popd
558
559 # Make an app bundle to run the demo
560 $PYTHONW $PROGDIR/../buildapp.py \
561 --builddir=$DMGAPPS \
562 --name="wxPython Demo" \
563 --mainprogram=$DMGAPPS/Samples/demo/demo.pyw \
564 --iconfile=$PROGDIR/RunDemo.icns \
565 build
566 cp -pR $DMGAPPS/Samples/demo/* "$DMGAPPS/wxPython Demo.app/Contents/Resources"
567 fi
568
569
570 # Make an app bundle to launch PyCrust
571 $PYTHONW $PROGDIR/../buildapp.py \
572 --builddir=$DMGAPPS \
573 --name=PyCrust \
574 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
575 --iconfile=$PROGDIR/PieShell.icns \
576 build
577
578## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
579## needs to know to ignore command line parameters and etc...
580# # and PyAlaMode
581# $PYTHONW $PROGDIR/../buildapp.py \
582# --builddir=$DMGAPPS \
583# --name=PyAlaMode \
584# --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
585# --iconfile=$PROGDIR/PieShell.icns \
586# build
587
588 # Make an app to launch XRCed
589 $PYTHONW $PROGDIR/../buildapp.py \
590 --builddir=$DMGAPPS \
591 --name=XRCed \
592 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
593 --iconfile=$PROGDIR/XRCed.icns \
594 build
595
596
597
598 # and then finally make a disk image containing everything
599 dmgname=wxPython${SHORTVER}-osx-docs-demos-$VERSION-$KIND
600 $PROGDIR/../makedmg $DMGAPPS $DMGDIR $dmgname
601
602 echo Moving $DMGDIR/$dmgname.dmg to $DESTDIR
603 mv $DMGDIR/$dmgname.dmg $DESTDIR
604fi
605
606
607# Cleanup build/install dirs
608if [ $skipclean != yes ]; then
609 echo "Cleaning up..."
610 rm -rf $TMPDIR
611else
612 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
613fi
614