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