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