]>
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
189 #----------------------------------------------------------------------
192 if [ $skiptar != yes ]; then
193 echo Unarchiving tarball...
197 if [ $inplace = no
]; then
198 # make a build dir and cd to it.
199 cd wxPython
-src- $VERSION
206 # If building "inplace" then our build dir will be off of the
207 # WXROOT like normal, adjust the variables to find things that
209 WXBLD
= $WXROOT / build
- $CHARTYPE
216 echo "Using wx root dir: $WXROOT "
217 echo "Using build dir: $WXBLD "
218 echo "Using source tree: $WXDIR "
220 #----------------------------------------------------------------------
222 if [ $KIND = panther
]; then
223 OTHER_CFG_OPTS
= --enable-mediactrl
226 # Configure wxWidgets
227 if [ $skipconfig != yes ]; then
231 --enable-monolithic \
236 --enable-debug_flag \
237 --enable-precomp = no \
239 --disable-debugreport \
240 $UNICODEOPT $OTHER_CFG_OPTS
244 # Build wxWidgets and wxPython
245 if [ $skipbuild != yes ]; then
247 # Make wxWidgets and some contribs
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
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
261 make $MAKEJOBS -C contrib
/ src
/ animate
262 make $MAKEJOBS -C contrib
/ src
/ gizmos
263 make $MAKEJOBS -C contrib
/ src
/ stc
268 UNICODE
= $PYUNICODEOPT \
271 WX_CONFIG
= " $WXBLD /wx-config --inplace" \
272 BUILD_BASE
= $WXBLD / wxPython \
276 #----------------------------------------------------------------------
278 if [ $skipinstall != yes ]; then
281 make prefix
= $INSTALLROOT$PREFIX install
282 make -C contrib
/ src
/ animate prefix
= $INSTALLROOT$PREFIX install
283 make -C contrib
/ src
/ gizmos prefix
= $INSTALLROOT$PREFIX install
284 make -C contrib
/ src
/ stc prefix
= $INSTALLROOT$PREFIX install
287 # relink wx-config with a relative link
288 cd $INSTALLROOT$PREFIX / bin
290 ln -s ..
/ lib
/ wx
/ config
/* wx
-config
295 UNICODE
= $PYUNICODEOPT \
298 WX_CONFIG
= " $INSTALLROOT / $PREFIX /bin/wx-config --prefix= $INSTALLROOT / $PREFIX " \
299 BUILD_BASE
= $WXBLD / wxPython \
304 # Apple's Python Framework (such as what comes with Panther)
305 # sym-links the site-packages dir in the framework to
306 # /Library/Python/$PYVER so we need to move the files so they are
307 # installed in the physical location, not the virtual one.
308 if [ $APPLE_PYTHON == yes ]; then
309 if [ -e $INSTALLROOT / Library
/ Python
/ $PYVER ]; then
310 rm -r $INSTALLROOT / Library
/ Python
/ $PYVER
312 mkdir -p $INSTALLROOT / Library
/ Python
/ $PYVER
313 mv $INSTALLROOT / $SITEPACKAGES /* $INSTALLROOT / Library
/ Python
/ $PYVER
314 rm -r $INSTALLROOT / System
315 SITEPACKAGES
=/ Library
/ Python
/ $PYVER
318 # install wxPython's tool scripts
319 mkdir -p $INSTALLROOT$BINPREFIX
320 cd $WXROOT / wxPython
/ scripts
321 python
$PYVER CreateMacScripts.py
$INSTALLROOT $BINPREFIX
324 # Remove the .pyc/.pyo files they just take up space and can be recreated
325 # during the install.
326 pushd $WXROOT / wxPython
327 $PYTHON $PROGDIR / ..
/ zappycfiles.py
$INSTALLROOT > / dev
/ null
330 # Set premissions for files in $INSTALLROOT
331 if [ " $UID " = "0" ]; then
332 chown
-R root
: admin
$INSTALLROOT
333 chmod -R g
+ w
$INSTALLROOT
337 if [ $APPLE_PYTHON == yes ]; then
338 SITEPACKAGES
=/ Library
/ Python
/ $PYVER
340 PKGDIR
= `cat $INSTALLROOT $SITEPACKAGES /wx.pth`
344 #----------------------------------------------------------------------
346 # Make the Installer packages and disk image
347 if [ $skipdmg != yes ]; then
349 #-----------------------------------------------
350 # The main runtime installer package
352 # Make the welcome message
354 panther
) W_MSG
= "the Panther (OS X 10.3.x) version of" ;;
355 jaguar
) W_MSG
= "the Jaguar (OS X 10.2.x) version of" ;;
359 cat > $RESOURCEDIR / Welcome.txt
<<EOF
362 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER . This includes:
364 * The wxPython packages and modules
365 * The wxWidgets shared libraries and headers
366 * Some command line tool scripts, installed to /usr/local/bin.
368 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
370 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.
375 # make the preflight script
376 cat > $RESOURCEDIR / preflight
<<EOF
378 # Cleanup any old install of the wxPython package
379 rm -rf \ $2 $SITEPACKAGES /wxPython
380 rm -rf \ $2 $SITEPACKAGES /wx
381 rm -rf \ $2 $SITEPACKAGES / $PKGDIR
384 chmod + x
$RESOURCEDIR / preflight
386 # make the postflight script
387 cat > $RESOURCEDIR / postflight
<<EOF
389 # Compile the .py files in the wxPython pacakge
390 $PYTHON \ $2 $PYLIB /compileall.py \ $2 $SITEPACKAGES / $PKGDIR
391 $PYTHON -O \ $2 $PYLIB /compileall.py \ $2 $SITEPACKAGES / $PKGDIR
393 # and all of the wxPython pacakge should be group writable
394 chgrp -R admin \ $2 $SITEPACKAGES / $PKGDIR
395 chmod -R g+w \ $2 $SITEPACKAGES / $PKGDIR
399 chmod + x
$RESOURCEDIR / postflight
403 # Build the main Installer Package...
404 PKGNAME
= wxPython
${SHORTVER} -osx- $CHARTYPE - $KIND
405 if [ $PYVER != 2.3 ]; then
406 PKGNAME
= wxPython
${SHORTVER} -osx- $CHARTYPE - $KIND -py $PYVER
409 $PYTHON $PROGDIR / ..
/ buildpkg.py \
412 --Description = "wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER " \
413 --NeedsAuthorization = "YES" \
415 --InstallOnly = "YES" \
419 mv $PKGNAME .pkg
$DMGROOT
421 rm $RESOURCEDIR / postflight
422 rm $RESOURCEDIR / preflight
423 rm $RESOURCEDIR / Welcome.txt
426 #-----------------------------------------------
427 # Make a README to go on the disk image
428 cat > " $DMGROOT /README 1st.txt" <<EOF
431 This disk image contains the following items:
433 wxPython ${SHORTVER} -osx- $CHARTYPE - $VERSION - $KIND
435 This Installer contains the wxPython runtime, compiled on a
436 $KIND OS X system, using the $CHARTYPE build of the wxWidgets
437 library. It includes the Python modules and extension
438 modules, as well as the wxWidgets libraries.
440 It is possible to have more than one version of the runtime
441 installed at once if you wish. The most recently installed
442 version will be the default wxPython, but you can choose
443 another by setting the PYTHONPATH or by using the wxversion
444 module. For more details see:
445 http://wiki.wxpython.org/index.cgi/MultiVersionInstalls
448 uninstall_wxPython.py
450 A simple tool to help you manage your installed versions of
451 wxPython. It will allow you to choose from the currently
452 installed wxPython packages and to select one for
453 uninstallation. It is a text-mode tool so you can either run
454 it from a Terminal command line, or you can open it with
455 PythonLauncher and let it create a Terminal to run it in.
457 NOTE: If you have versions prior to 2.5.3.1 installed, please
458 do run this uninstall tool to remove the older version.
464 cp $PROGDIR / ..
/ uninstall_wxPython.py
$DMGROOT
467 #-----------------------------------------------
468 # Make a disk image to hold these files
469 dmgname
= wxPython
${SHORTVER} -osx- $CHARTYPE - $VERSION - $TAG -py $PYVER
470 $PROGDIR / ..
/ makedmg
$DMGROOT $DMGDIR $dmgname
472 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
473 mv $DMGDIR / $dmgname .dmg
$DESTDIR
476 #---------------------------------------------------------------------------
477 # Now create app bundles for the demo, docs, and tools and make another
478 # disk image to hold it all.
479 #---------------------------------------------------------------------------
481 cat > " $DMGAPPS /README 1st.txt" <<EOF
484 On this disk image you will find Demo, Tools, Docs, and etc. for
485 wxPython $VERSION . Everything here is optional and you can drag them
486 out of the disk image and drop them wherever you want. You will need
487 to have an installed wxPython runtime to be able to use any of them.
490 wxPython Demo An application bundle version of the demo.
491 (This has it's own copy of the demo sources
494 XRCed An application for editing wxPython resource
497 PyCrust An application that provides an interactive
498 Python shell and also namespace inspectors.
502 Docs/wxDocsViewer An application that allows you to view the
503 wxWidgets documentation.
505 Docs/licence License files.
507 Docs/other A few readmes, change log, etc.
510 Samples/samples Several small sample applications that
511 demonstrate how to use wxPython.
513 Samples/demo A copy of the wxPython demo source code,
514 just open the folder and run demo.pyw.
519 # PyAlaMode An extension of PyCrust that includes source
520 # file editing capabilities.
524 if [ ! -e $TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
]; then
525 cat > " $DMGAPPS /Docs/Build ERROR.txt" <<EOF
527 The wxPython-docs tarball was not found when building this disk image!
533 tar xzvf
$TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
536 # Make an app to launch viewdocs.py
537 $PYTHONW $PROGDIR / ..
/ buildapp.py \
538 --builddir = $DMGAPPS / Docs \
539 --name = wxDocsViewer \
540 --mainprogram = $BUILDROOT / wxPython
- $VERSION / docs
/ viewdocs.py \
541 --iconfile = $PROGDIR / Info.icns \
544 cp $BUILDROOT / wxPython
- $VERSION / docs
/* .
zip $DMGAPPS / Docs
/ wxDocsViewer.app
/ Contents
/ Resources
546 cat > " $DMGAPPS /Docs/README 1st.txt" <<EOF
548 The wxDocsViewer application needs to be copied to your Desktop (or
549 someplace else you have write access to) before you can run it, so it
550 can cache some indexes within its bundle.
556 # license files, docs, etc.
558 cp -pR $SRCROOT / wxPython
/ licence .
559 cp -pR $SRCROOT / wxPython
/ docs .
566 if [ ! -e $TARBALLDIR / wxPython
-demo- $VERSION .
tar .gz
]; then
567 cat > " $DMGAPPS /Samples/Build ERROR.txt" <<EOF
569 The wxPython-demo tarball was not found when building this disk image!
572 cp " $DMGAPPS /Samples/Build ERROR.txt" $DMGAPPS
576 # Copy the demo and samples to the disk image from the tarball
577 pushd $DMGAPPS / Samples
578 tar xzvf
$TARBALLDIR / wxPython
-demo- $VERSION .
tar .gz
579 mv wxPython
- $VERSION /* .
580 rm -rf wxPython
- $VERSION
581 rm demo
/ b demo
/ .setup.sh
582 mv demo
/ demo.py demo
/ demo.pyw
585 # Make an app bundle to run the demo
586 $PYTHONW $PROGDIR / ..
/ buildapp.py \
587 --builddir = $DMGAPPS \
588 --name = "wxPython Demo" \
589 --mainprogram = $DMGAPPS / Samples
/ demo
/ demo.pyw \
590 --iconfile = $PROGDIR / RunDemo.icns \
592 cp -pR $DMGAPPS / Samples
/ demo
/* " $DMGAPPS /wxPython Demo.app/Contents/Resources"
596 # Make an app bundle to launch PyCrust
597 $PYTHONW $PROGDIR / ..
/ buildapp.py \
598 --builddir = $DMGAPPS \
600 --mainprogram = $INSTALLROOT$BINPREFIX / pycrust.py \
601 --iconfile = $PROGDIR / PieShell.icns \
604 ## TODO: PyAlaMode needs tweaked to be able to run from a bundle. It
605 ## needs to know to ignore command line parameters and etc...
607 # $PYTHONW $PROGDIR/../buildapp.py \
608 # --builddir=$DMGAPPS \
610 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
611 # --iconfile=$PROGDIR/PieShell.icns \
614 # Make an app to launch XRCed
615 $PYTHONW $PROGDIR / ..
/ buildapp.py \
616 --builddir = $DMGAPPS \
618 --mainprogram = $INSTALLROOT$BINPREFIX / xrced.py \
619 --iconfile = $PROGDIR / XRCed.icns \
624 # and then finally make a disk image containing everything
625 dmgname
= wxPython
${SHORTVER} -osx-docs-demos- $VERSION - $TAG -py $PYVER
626 $PROGDIR / ..
/ makedmg
$DMGAPPS $DMGDIR $dmgname
628 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
629 mv $DMGDIR / $dmgname .dmg
$DESTDIR
633 # Cleanup build/install dirs
634 if [ $skipclean != yes ]; then
635 echo "Cleaning up..."
638 echo "Cleanup is disabled. You should remove $TMPDIR when finished"