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