]>
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
/ gizmos
262 make $MAKEJOBS -C contrib
/ src
/ stc
267 UNICODE
= $PYUNICODEOPT \
270 WX_CONFIG
= " $WXBLD /wx-config --inplace" \
271 BUILD_BASE
= $WXBLD / wxPython \
275 #----------------------------------------------------------------------
277 if [ $skipinstall != yes ]; then
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
285 # relink wx-config with a relative link
286 cd $INSTALLROOT$PREFIX / bin
288 ln -s ..
/ lib
/ wx
/ config
/* wx
-config
293 UNICODE
= $PYUNICODEOPT \
296 WX_CONFIG
= " $INSTALLROOT / $PREFIX /bin/wx-config --prefix= $INSTALLROOT / $PREFIX " \
297 BUILD_BASE
= $WXBLD / wxPython \
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
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
316 # install wxPython's tool scripts
317 mkdir -p $INSTALLROOT$BINPREFIX
318 cd $WXROOT / wxPython
/ scripts
319 python
$PYVER CreateMacScripts.py
$INSTALLROOT $BINPREFIX
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
328 # Set premissions for files in $INSTALLROOT
329 if [ " $UID " = "0" ]; then
330 chown
-R root
: admin
$INSTALLROOT
331 chmod -R g
+ w
$INSTALLROOT
335 if [ $APPLE_PYTHON == yes ]; then
336 SITEPACKAGES
=/ Library
/ Python
/ $PYVER
338 PKGDIR
= `cat $INSTALLROOT $SITEPACKAGES /wx.pth`
342 #----------------------------------------------------------------------
344 # Make the Installer packages and disk image
345 if [ $skipdmg != yes ]; then
347 #-----------------------------------------------
348 # The main runtime installer package
350 # Make the welcome message
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" ;;
357 cat > $RESOURCEDIR / Welcome.txt
<<EOF
360 This Installer package will install the wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER . This includes:
362 * The wxPython packages and modules
363 * The wxWidgets shared libraries and headers
364 * Some command line tool scripts, installed to /usr/local/bin.
366 You must install onto your current boot disk, eventhough the installer does not enforce this, otherwise things will not work.
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.
373 # make the preflight script
374 cat > $RESOURCEDIR / preflight
<<EOF
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
382 chmod + x
$RESOURCEDIR / preflight
384 # make the postflight script
385 cat > $RESOURCEDIR / postflight
<<EOF
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
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
397 chmod + x
$RESOURCEDIR / postflight
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
407 $PYTHON $PROGDIR / ..
/ buildpkg.py \
410 --Description = "wxPython $CHARTYPE runtime $VERSION for $W_MSG MacPython-OSX $PYVER " \
411 --NeedsAuthorization = "YES" \
413 --InstallOnly = "YES" \
417 mv $PKGNAME .pkg
$DMGROOT
419 rm $RESOURCEDIR / postflight
420 rm $RESOURCEDIR / preflight
421 rm $RESOURCEDIR / Welcome.txt
424 #-----------------------------------------------
425 # Make a README to go on the disk image
426 cat > " $DMGROOT /README 1st.txt" <<EOF
429 This disk image contains the following items:
431 wxPython ${SHORTVER} -osx- $CHARTYPE - $VERSION - $KIND
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.
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
446 uninstall_wxPython.py
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.
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.
462 cp $PROGDIR / ..
/ uninstall_wxPython.py
$DMGROOT
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
470 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
471 mv $DMGDIR / $dmgname .dmg
$DESTDIR
474 #---------------------------------------------------------------------------
475 # Now create app bundles for the demo, docs, and tools and make another
476 # disk image to hold it all.
477 #---------------------------------------------------------------------------
479 cat > " $DMGAPPS /README 1st.txt" <<EOF
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.
488 wxPython Demo An application bundle version of the demo.
489 (This has it's own copy of the demo sources
492 XRCed An application for editing wxPython resource
495 PyCrust An application that provides an interactive
496 Python shell and also namespace inspectors.
500 Docs/wxDocsViewer An application that allows you to view the
501 wxWidgets documentation.
503 Docs/licence License files.
505 Docs/other A few readmes, change log, etc.
508 Samples/samples Several small sample applications that
509 demonstrate how to use wxPython.
511 Samples/demo A copy of the wxPython demo source code,
512 just open the folder and run demo.pyw.
517 # PyAlaMode An extension of PyCrust that includes source
518 # file editing capabilities.
522 if [ ! -e $TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
]; then
523 cat > " $DMGAPPS /Docs/Build ERROR.txt" <<EOF
525 The wxPython-docs tarball was not found when building this disk image!
531 tar xzvf
$TARBALLDIR / wxPython
-docs- $VERSION .
tar .gz
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 \
542 cp $BUILDROOT / wxPython
- $VERSION / docs
/* .
zip $DMGAPPS / Docs
/ wxDocsViewer.app
/ Contents
/ Resources
544 cat > " $DMGAPPS /Docs/README 1st.txt" <<EOF
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.
554 # license files, docs, etc.
556 cp -pR $SRCROOT / wxPython
/ licence .
557 cp -pR $SRCROOT / wxPython
/ docs .
564 if [ ! -e $TARBALLDIR / wxPython
-demo- $VERSION .
tar .gz
]; then
565 cat > " $DMGAPPS /Samples/Build ERROR.txt" <<EOF
567 The wxPython-demo tarball was not found when building this disk image!
570 cp " $DMGAPPS /Samples/Build ERROR.txt" $DMGAPPS
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
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 \
590 cp -pR $DMGAPPS / Samples
/ demo
/* " $DMGAPPS /wxPython Demo.app/Contents/Resources"
594 # Make an app bundle to launch PyCrust
595 $PYTHONW $PROGDIR / ..
/ buildapp.py \
596 --builddir = $DMGAPPS \
598 --mainprogram = $INSTALLROOT$BINPREFIX / pycrust.py \
599 --iconfile = $PROGDIR / PieShell.icns \
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...
605 # $PYTHONW $PROGDIR/../buildapp.py \
606 # --builddir=$DMGAPPS \
608 # --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
609 # --iconfile=$PROGDIR/PieShell.icns \
612 # Make an app to launch XRCed
613 $PYTHONW $PROGDIR / ..
/ buildapp.py \
614 --builddir = $DMGAPPS \
616 --mainprogram = $INSTALLROOT$BINPREFIX / xrced.py \
617 --iconfile = $PROGDIR / XRCed.icns \
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
626 echo Moving
$DMGDIR / $dmgname .dmg to
$DESTDIR
627 mv $DMGDIR / $dmgname .dmg
$DESTDIR
631 # Cleanup build/install dirs
632 if [ $skipclean != yes ]; then
633 echo "Cleaning up..."
636 echo "Cleanup is disabled. You should remove $TMPDIR when finished"