]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/distrib/mac/wxPythonOSX/build
2 #----------------------------------------------------------------------
3 # Build wxMac and wxPythonOSX from the tarball and then make an
4 # Installer package out of it.
8 spectemplate
= distrib
/ wxPythonFull.spec.
in
10 if [ ! -d wxPython
-o ! -e ${spectemplate} ]; then
11 echo "Please run this script from the root wxPython directory."
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 "-------------------------------------------------------"
22 #----------------------------------------------------------------------
27 echo "Usage: $0 PYVER [jaguar|panther] [command flags...]"
29 echo " PYVER Python version to use to do the build"
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"
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"
54 if which python
$PYVER && which pythonw
$PYVER ; then
55 PYTHON
= `which python $PYVER `
56 PYTHONW
= `which pythonw $PYVER `
64 panther
) TAG
= macosx10.3
;;
65 jaguar
) TAG
= macosx10.2
;;
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 ;;
91 *) echo "Unknown flag \" ${flag} \" "
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
104 if [ $unicode == yes ]; then
106 UNICODEOPT
= --enable-unicode
110 UNICODEOPT
= --disable-unicode
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.
119 if [ -e / Library
/ Python
/ $PYVER ] && [ `dirname $PYTHON ` == "/usr/bin" ]; then
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
131 TARBALL
= $TARBALLDIR / wxPython
-src- $VERSION .
tar .gz
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 "-------------------------------------------------------"
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 "-------------------------------------------------------"
152 PREFIX
=/ usr
/ local
/ lib
/ wxPython
- $CHARTYPE - $VERSION
153 BINPREFIX
=/ usr
/ local
/ bin
155 WXROOT
= `dirname $PWD `
156 PROGDIR
= "`dirname \" $0 \" `"
157 TMPDIR
= $PWD / _build_dmg
159 BUILDROOT
= $TMPDIR / build
161 INSTALLROOT
= $TMPDIR / install -root
162 INSTALLAPPS
= $TMPDIR / install -apps
168 RESOURCEDIR
= $PROGDIR / resources
170 SRCROOT
= $BUILDROOT / wxPython
-src- $VERSION
173 #----------------------------------------------------------------------
177 mkdir -p $INSTALLROOT
178 mkdir -p $INSTALLAPPS
182 mkdir -p $DMGAPPS / Docs
183 mkdir -p $DMGAPPS / Samples
185 if [ ! -d $DESTDIR ]; then
192 #----------------------------------------------------------------------
195 if [ $skiptar != yes ]; then
196 echo Unarchiving tarball...
200 if [ $inplace = no
]; then
201 # make a build dir and cd to it.
202 cd wxPython
-src- $VERSION
209 # If building "inplace" then our build dir will be off of the
210 # WXROOT like normal, adjust the variables to find things that
212 WXBLD
= $WXROOT / build
- $CHARTYPE
219 echo "Using wx root dir: $WXROOT "
220 echo "Using build dir: $WXBLD "
221 echo "Using source tree: $WXDIR "
223 #----------------------------------------------------------------------
225 if [ $KIND = panther
]; then
226 OTHER_CFG_OPTS
= --enable-mediactrl
229 # Configure wxWidgets
230 if [ $skipconfig != yes ]; then
234 --enable-monolithic \
239 --enable-debug_flag \
240 --enable-precomp = no \
242 --disable-debugreport \
243 $UNICODEOPT $OTHER_CFG_OPTS
247 # Build wxWidgets and wxPython
248 if [ $skipbuild != yes ]; then
250 # Make wxWidgets and some contribs
252 # # For some reason Rez and DeRez have started locking up if run via
253 # # an ssh terminal. Figure out why, but in the meantime...
254 # if [ "$CHARTYPE" = "ansi" ]; then
255 # echo cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
256 # cp /projects/wx2.5/bld/lib/libwx_macd-2.5.?.r* lib
258 # echo cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
259 # cp /projects/wx2.5/bld-unicode/lib/libwx_macud-2.5.?.r* lib
261 # touch lib/libwx*.r*
264 make $MAKEJOBS -C contrib
/ src
/ animate
265 make $MAKEJOBS -C contrib
/ src
/ gizmos
266 make $MAKEJOBS -C contrib
/ src
/ stc
271 UNICODE
= $PYUNICODEOPT \
274 WX_CONFIG
= " $WXBLD /wx-config --inplace" \
275 BUILD_BASE
= $WXBLD / wxPython \
279 #----------------------------------------------------------------------
281 if [ $skipinstall != yes ]; then
284 make prefix
= $INSTALLROOT$PREFIX install
285 make -C contrib
/ src
/ animate prefix
= $INSTALLROOT$PREFIX install
286 make -C contrib
/ src
/ gizmos prefix
= $INSTALLROOT$PREFIX install
287 make -C contrib
/ src
/ stc prefix
= $INSTALLROOT$PREFIX install
290 # relink wx-config with a relative link
291 cd $INSTALLROOT$PREFIX / bin
293 ln -s ..
/ lib
/ wx
/ config
/* wx
-config
298 UNICODE
= $PYUNICODEOPT \
301 WX_CONFIG
= " $INSTALLROOT / $PREFIX /bin/wx-config --prefix= $INSTALLROOT / $PREFIX " \
302 BUILD_BASE
= $WXBLD / wxPython \
307 # Apple's Python Framework (such as what comes with Panther)
308 # sym-links the site-packages dir in the framework to
309 # /Library/Python/$PYVER so we need to move the files so they are
310 # installed in the physical location, not the virtual one.
311 if [ $APPLE_PYTHON == yes ]; then
312 if [ -e $INSTALLROOT / Library
/ Python
/ $PYVER ]; then
313 rm -r $INSTALLROOT / Library
/ Python
/ $PYVER
315 mkdir -p $INSTALLROOT / Library
/ Python
/ $PYVER
316 mv $INSTALLROOT / $SITEPACKAGES /* $INSTALLROOT / Library
/ Python
/ $PYVER
317 rm -r $INSTALLROOT / System
318 SITEPACKAGES
=/ Library
/ Python
/ $PYVER
321 # install wxPython's tool scripts
322 mkdir -p $INSTALLROOT$BINPREFIX
323 cd $WXROOT / wxPython
/ scripts
324 python
$PYVER CreateMacScripts.py
$INSTALLROOT $BINPREFIX
327 # Remove the .pyc/.pyo files they just take up space and can be recreated
328 # during the install.
329 pushd $WXROOT / wxPython
330 $PYTHON $PROGDIR / ..
/ zappycfiles.py
$INSTALLROOT > / dev
/ null
333 # Set premissions for files in $INSTALLROOT
334 if [ " $UID " = "0" ]; then
335 chown
-R root
: admin
$INSTALLROOT
336 chmod -R g
+ w
$INSTALLROOT
340 if [ $APPLE_PYTHON == yes ]; then
341 SITEPACKAGES
=/ Library
/ Python
/ $PYVER
343 PKGDIR
= `cat $INSTALLROOT $SITEPACKAGES /wx.pth`
347 #----------------------------------------------------------------------
349 # Make the Installer packages and disk image
350 if [ $skipdmg != yes ]; then
352 #-----------------------------------------------
353 # The main runtime installer package
355 # Make the welcome message
357 panther
) W_MSG
= "the Panther (OS X 10.3.x) version of" ;;
358 jaguar
) W_MSG
= "the Jaguar (OS X 10.2.x) version of" ;;
362 cat > $RESOURCEDIR / Welcome.txt
<<EOF
365 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER . This includes:
367 * The wxPython packages and modules
368 * The wxWidgets shared libraries and headers
369 * Some command line tool scripts, installed to /usr/local/bin.
371 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
373 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.
378 # make the preflight script
379 cat > $RESOURCEDIR / preflight
<<EOF
381 # Cleanup any old install of the wxPython package
382 rm -rf \ $2 $SITEPACKAGES /wxPython
383 rm -rf \ $2 $SITEPACKAGES /wx
384 rm -rf \ $2 $SITEPACKAGES / $PKGDIR
387 chmod + x
$RESOURCEDIR / preflight
389 # make the postflight script
390 cat > $RESOURCEDIR / postflight
<<EOF
392 # Compile the .py files in the wxPython pacakge
393 $PYTHON \ $2 $PYLIB /compileall.py \ $2 $SITEPACKAGES / $PKGDIR
394 $PYTHON -O \ $2 $PYLIB /compileall.py \ $2 $SITEPACKAGES / $PKGDIR
396 # and all of the wxPython pacakge should be group writable
397 chgrp -R admin \ $2 $SITEPACKAGES / $PKGDIR
398 chmod -R g+w \ $2 $SITEPACKAGES / $PKGDIR
402 chmod + x
$RESOURCEDIR / postflight
406 # Build the main Installer Package...
407 PKGNAME
= wxPython
${SHORTVER} -osx- $CHARTYPE - $KIND
408 if [ $PYVER != 2.3 ]; then
409 PKGNAME
= wxPython
${SHORTVER} -osx- $CHARTYPE - $KIND -py $PYVER
412 $PYTHON $PROGDIR / ..
/ buildpkg.py \
415 --Description = "wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER " \
416 --NeedsAuthorization = "YES" \
418 --InstallOnly = "YES" \
422 mv $PKGNAME .pkg
$DMGROOT
424 rm $RESOURCEDIR / postflight
425 rm $RESOURCEDIR / preflight
426 rm $RESOURCEDIR / Welcome.txt
429 #-----------------------------------------------
430 # Make a README to go on the disk image
431 cat > " $DMGROOT /README 1st.txt" <<EOF
434 This disk image contains the following items:
436 wxPython ${SHORTVER} -osx- $CHARTYPE - $VERSION - $KIND
438 This Installer contains the wxPython runtime, compiled on a
439 $KIND OS X system, using the $CHARTYPE build of the wxWidgets
440 library. It includes the Python modules and extension
441 modules, as well as the wxWidgets libraries.
443 It is possible to have more than one version of the runtime
444 installed at once if you wish. The most recently installed
445 version will be the default wxPython, but you can choose
446 another by setting the PYTHONPATH or by using the wxversion
447 module. For more details see:
448 http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
451 uninstall_wxPython.py
453 A simple tool to help you manage your installed versions of
454 wxPython. It will allow you to choose from the currently
455 installed wxPython packages and to select one for
456 uninstallation. It is a text-mode tool so you can either run
457 it from a Terminal command line, or you can open it with
458 PythonLauncher and let it create a Terminal to run it in.
460 NOTE: If you have versions prior to 2.5.3.1 installed, please
461 do run this uninstall tool to remove the older version.
467 cp $PROGDIR / ..
/ uninstall_wxPython.py
$DMGROOT
470 #-----------------------------------------------
471 # Make a disk image to hold these files
472 dmgname
= wxPython
${SHORTVER} -osx- $CHARTYPE - $VERSION - $TAG -py $PYVER
473 $PROGDIR / ..
/ makedmg
$DMGROOT $DMGDIR $dmgname
475 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
476 mv $DMGDIR / $dmgname .dmg
$DESTDIR / $dmgname .dmg
479 #---------------------------------------------------------------------------
480 # Now create app bundles for the demo, docs, and tools and make another
481 # disk image to hold it all.
482 #---------------------------------------------------------------------------
484 cat > " $DMGAPPS /README 1st.txt" <<EOF
487 On this disk image you will find Demo, Tools, Docs, and etc. for
488 wxPython $VERSION . Everything here is optional and you can drag them
489 out of the disk image and drop them wherever you want. You will need
490 to have an installed wxPython runtime to be able to use any of them.
493 wxPython Demo An application bundle version of the demo.
494 (This has it's own copy of the demo sources
497 XRCed An application for editing wxPython resource
500 PyCrust An application that provides an interactive
501 Python shell and also namespace inspectors.
505 Docs/wxDocsViewer An application that allows you to view the
506 wxWidgets documentation.
508 Docs/licence License files.
510 Docs/other A few readmes, change log, etc.
513 Samples/samples Several small sample applications that
514 demonstrate how to use wxPython.
516 Samples/demo A copy of the wxPython demo source code,
517 just open the folder and run demo.pyw.
522 # PyAlaMode An extension of PyCrust that includes source
523 # file editing capabilities.
527 if [ ! -e $TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
]; then
528 cat > " $DMGAPPS /Docs/Build ERROR.txt" <<EOF
530 The wxPython-docs tarball was not found when building this disk image!
536 tar xzvf
$TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
539 # Make an app to launch viewdocs.py
540 $PYTHONW $PROGDIR / ..
/ buildapp.py \
541 --builddir = $DMGAPPS / Docs \
542 --name = wxDocsViewer \
543 --mainprogram = $BUILDROOT / wxPython
- $VERSION / docs
/ viewdocs.py \
544 --iconfile = $PROGDIR / Info.icns \
547 cp $BUILDROOT / wxPython
- $VERSION / docs
/* .
zip $DMGAPPS / Docs
/ wxDocsViewer.app
/ Contents
/ Resources
549 cat > " $DMGAPPS /Docs/README 1st.txt" <<EOF
551 The wxDocsViewer application needs to be copied to your Desktop (or
552 someplace else you have write access to) before you can run it, so it
553 can cache some indexes within its bundle.
559 # license files, docs, etc.
561 cp -pR $SRCROOT / wxPython
/ licence .
562 cp -pR $SRCROOT / wxPython
/ docs .
569 if [ ! -e $TARBALLDIR / wxPython
-demo- $VERSION .
tar .gz
]; then
570 cat > " $DMGAPPS /Samples/Build ERROR.txt" <<EOF
572 The wxPython-demo tarball was not found when building this disk image!
575 cp " $DMGAPPS /Samples/Build ERROR.txt" $DMGAPPS
579 # Copy the demo and samples to the disk image from the tarball
580 pushd $DMGAPPS / Samples
581 tar xzvf
$TARBALLDIR / wxPython
-demo- $VERSION .
tar .gz
582 mv wxPython
- $VERSION /* .
583 rm -rf wxPython
- $VERSION
584 rm demo
/ b demo
/ .setup.sh
585 mv demo
/ demo.py demo
/ demo.pyw
588 # Make an app bundle to run the demo
589 $PYTHONW $PROGDIR / ..
/ buildapp.py \
590 --builddir = $DMGAPPS \
591 --name = "wxPython Demo" \
592 --mainprogram = $DMGAPPS / Samples
/ demo
/ demo.pyw \
593 --iconfile = $PROGDIR / RunDemo.icns \
595 cp -pR $DMGAPPS / Samples
/ demo
/* " $DMGAPPS /wxPython Demo.app/Contents/Resources"
599 # Make an app bundle to launch PyCrust
600 $PYTHONW $PROGDIR / ..
/ buildapp.py \
601 --builddir = $DMGAPPS \
603 --mainprogram = $INSTALLROOT$BINPREFIX / pycrust.py \
604 --iconfile = $PROGDIR / PieShell.icns \
607 ## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
608 ## needs to know to ignore command line parameters and etc...
610 # $PYTHONW $PROGDIR/../buildapp.py \
611 # --builddir=$DMGAPPS \
613 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
614 # --iconfile=$PROGDIR/PieShell.icns \
617 # Make an app to launch XRCed
618 $PYTHONW $PROGDIR / ..
/ buildapp.py \
619 --builddir = $DMGAPPS \
621 --mainprogram = $INSTALLROOT$BINPREFIX / xrced.py \
622 --iconfile = $PROGDIR / XRCed.icns \
627 # and then finally make a disk image containing everything
628 dmgname
= wxPython
${SHORTVER} -osx-docs-demos- $VERSION - $TAG -py $PYVER
629 $PROGDIR / ..
/ makedmg
$DMGAPPS $DMGDIR $dmgname
631 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
632 mv $DMGDIR / $dmgname .dmg
$DESTDIR / $dmgname .dmg
636 # Cleanup build/install dirs
637 if [ $skipclean != yes ]; then
638 echo "Cleaning up..."
641 echo "Cleanup is disabled. You should remove $TMPDIR when finished"