]> git.saurik.com Git - wxWidgets.git/blame - wxPython/distrib/mac/wxPythonOSX/build
Add "inplace" build option that allows the distribution to be built
[wxWidgets.git] / wxPython / distrib / mac / wxPythonOSX / build
CommitLineData
1e4a197e
RD
1#!/bin/sh -e
2#----------------------------------------------------------------------
3# Build wxMac and wxPythonOSX from the tarball and then make an
4# Installer package out of it.
5
6spectemplate=distrib/wxPythonFull.spec.in
7
8if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
9 echo "Please run this script from the root wxPython directory."
10 exit 1
11fi
12
81de4ba3 13if [ "$UID" != "0" ]; then
132ae51e
RD
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 "-------------------------------------------------------"
18fi
19
1e4a197e
RD
20#----------------------------------------------------------------------
21# Check Parameters
22
23function usage {
24 echo ""
dd35b09a 25 echo "Usage: $0 [panther|jaguar] [command flags...]"
1e4a197e 26 echo ""
c6387bc1
RD
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"
46456f61
RD
29 echo ""
30 echo "optional command flags:"
1e4a197e 31 echo " skiptar Don't unpack the tarball"
81de4ba3
RD
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.)"
1e4a197e 34 echo " skipconfig Don't run configure"
b42b447c 35 echo " skipbuild Don't build wxWidgets or wxPython"
1e4a197e
RD
36 echo " skipinstall Don't do the installation step"
37 echo " skipdmg Don't make the package or diskimage"
38 echo " skipclean Don't do the cleanup at the end"
46456f61 39 echo ""
1e4a197e
RD
40}
41
42
46456f61 43if [ $# -lt 1 ]; then
1e4a197e
RD
44 usage
45 exit 1
46fi
47
46456f61
RD
48KIND=$1
49case $KIND in
c6387bc1
RD
50 panther) PYTHON=/usr/bin/python ;;
51 jaguar) PYTHON=/usr/local/bin/python ;;
52 *) usage; exit 1 ;;
46456f61
RD
53esac
54PYTHONW=${PYTHON}w
55shift
1e4a197e 56
81de4ba3
RD
57skiptar=no
58skipconfig=no
59skipbuild=no
60skipinstall=no
61skipdmg=no
62skipclean=no
63inplace=no
1e4a197e
RD
64
65for flag in $*; do
66 case ${flag} in
81de4ba3
RD
67 skiptar) skiptar=yes ;;
68 skipconfig) skipconfig=yes; skiptar=yes ;;
69 skipbuild) skipbuild=yes; skipconfig=yes; skiptar=yes ;;
70 skipinstall) skipinstall=yes ;;
71 skipdmg) skipdmg=yes ;;
72 skipclean) skipclean=yes ;;
73 inplace) inplace=yes; skiptar=yes ;;
1e4a197e
RD
74
75 *) echo "Unknown flag \"${flag}\""
76 usage
77 exit 1
78 esac
79done
80
81
46456f61
RD
82VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
83PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
84PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
c6387bc1
RD
85PYLIB=$PYPREFIX/lib/python$PYVER
86SITEPACKAGES=$PYLIB/site-packages
46456f61 87
81de4ba3
RD
88
89
132ae51e 90if [ -z "$TARBALLDIR" ]; then
81de4ba3
RD
91 # this is a spot on my fileserver where the tarballs go, adjust
92 # as needed for where you put the wxPython tarball, or set
93 # TARBALLDIR before invoking this script...
132ae51e
RD
94 TARBALLDIR=/stuff/Development/wxPython/dist/$VERSION
95fi
b42b447c 96TARBALL=$TARBALLDIR/wxPythonSrc-$VERSION.tar.gz
1e4a197e 97
81de4ba3
RD
98if [ ! -e $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz ]; then
99 echo "-------------------------------------------------------"
100 echo " WARNING: Demo tarball not found, will skip building "
101 echo " the Demo app bundle and etc."
102 echo " $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz"
103 echo "-------------------------------------------------------"
104fi
105
106if [ ! -e $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz ]; then
107 echo "-------------------------------------------------------"
108 echo " WARNING: Docs tarball not found, will skip building "
109 echo " the the wxDocsViewer app bundle and etc."
110 echo " $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz"
111 echo "-------------------------------------------------------"
112fi
113
114
115
116
132ae51e
RD
117PREFIX=/usr/local/lib/wxPython-$VERSION
118BINPREFIX=/usr/local/bin
1e4a197e 119
46456f61 120WXROOT=`dirname $PWD`
1e4a197e
RD
121PROGDIR="`dirname \"$0\"`"
122TMPDIR=$PWD/_build_dmg
123
124BUILDROOT=$TMPDIR/build
125INSTALLROOT=$TMPDIR/install
126INSTALLDEVEL=$TMPDIR/install-devel
127DMGDIR=$TMPDIR/dmg
128RESOURCEDIR=$PROGDIR/resources
129DESTDIR=$PWD/dist
b42b447c 130SRCROOT=$BUILDROOT/wxPythonSrc-$VERSION
1e4a197e
RD
131
132
133#----------------------------------------------------------------------
134# Setup builddirs
135
136mkdir -p $BUILDROOT
137mkdir -p $INSTALLROOT
46456f61 138#mkdir -p $INSTALLDEVEL
1e4a197e 139rm -rf $DMGDIR
b42b447c
RD
140mkdir -p $DMGDIR/root/Apps
141mkdir -p $DMGDIR/root/Docs
142mkdir -p $DMGDIR/root/Samples
143
1e4a197e
RD
144
145pushd $BUILDROOT
146
147
148#----------------------------------------------------------------------
149# Unpack the tarball
150
81de4ba3 151if [ $skiptar != yes ]; then
46456f61
RD
152 echo Unarchiving tarball...
153 tar xzf $TARBALL
1e4a197e
RD
154fi
155
81de4ba3
RD
156if [ $inplace = no ]; then
157 # make a build dir and cd to it.
158 cd wxPythonSrc-$VERSION
159 WXDIR=`pwd`
160 mkdir -p $WXDIR/bld
161 cd $WXDIR/bld
162 WXBLD=$WXDIR/bld
163else
164 # If building "inplace" then our build dir will be BUILDROOT,
165 # adjust the variables to find things that way.
166 WXDIR=$WXROOT
167 SRCROOT=$WXROOT
168 WXBLD=$BUILDROOT
169fi
170
171echo "Using source tree: $WXDIR"
172echo "Using build dir: $WXBLD"
1e4a197e
RD
173
174#----------------------------------------------------------------------
175
176
b42b447c 177# Configure wxWidgets
81de4ba3
RD
178if [ $skipconfig != yes ]; then
179 $WXDIR/configure \
46456f61
RD
180 --prefix=$PREFIX \
181 --with-mac \
182 --disable-monolithic \
1e4a197e 183 --with-opengl \
ec656cfe
RD
184 --enable-sound \
185 --enable-display \
e2f7f062 186 --enable-geometry \
46456f61 187 --enable-precomp=no \
46456f61 188 --enable-debug_flag
1e4a197e 189
e2f7f062
RD
190## --enable-optimise \
191## --with-libjpeg=builtin \
192## --with-libpng=builtin \
193## --with-libtiff=builtin \
194## --with-zlib=builtin \
195
1e4a197e
RD
196fi
197
b42b447c 198# Build wxWidgets and wxPython
81de4ba3 199if [ $skipbuild != yes ]; then
1e4a197e 200
b42b447c 201 # Make wxWidgets and some contribs
81de4ba3
RD
202 make
203 make -C contrib/src/gizmos
46456f61
RD
204 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
205 make -C contrib/src/stc
206 make -C contrib/src/xrc
207
46456f61 208 # Build wxPython
1e4a197e 209 cd $WXDIR/wxPython
46456f61
RD
210 $PYTHON setup.py \
211 NO_SCRIPTS=1 \
81de4ba3
RD
212 WX_CONFIG="$WXBLD/wx-config --inplace" \
213 BUILD_BASE=$WXBLD/wxPython \
1e4a197e
RD
214 build
215
216
81de4ba3
RD
217 # Build wxrc (XRC resource tool)
218 cd $WXBLD/contrib/utils/wxrc
219 make
1e4a197e
RD
220 strip wxrc
221
222fi
223
224#----------------------------------------------------------------------
1e4a197e 225
81de4ba3 226if [ $skipinstall != yes ]; then
b42b447c 227 # Install wxWidgets
81de4ba3 228 cd $WXBLD
46456f61
RD
229 make prefix=$INSTALLROOT$PREFIX install
230 make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
231 make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install
232 make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
233 make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install
1e4a197e
RD
234
235
236 # and wxPython
237 cd $WXDIR/wxPython
46456f61
RD
238 $PYTHON setup.py \
239 NO_SCRIPTS=1 \
240 WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
81de4ba3 241 BUILD_BASE=$WXBLD/wxPython \
1e4a197e
RD
242 install \
243 --root=$INSTALLROOT
244
46456f61 245
c6387bc1
RD
246 # Apple's Python (on Panther) sym-links the site-packages dir to
247 # /Library/Python/$PYVER so we need to move the files so they are
248 # installed in the physical location, not the virtual one.
249 if [ "$KIND" = "panther" ]; then
81de4ba3
RD
250 if [ -e $INSTALLROOT/Library/Python/$PYVER ]; then
251 rm -r $INSTALLROOT/Library/Python/$PYVER
252 fi
c6387bc1
RD
253 mkdir -p $INSTALLROOT/Library/Python/$PYVER
254 mv $INSTALLROOT/$SITEPACKAGES/* $INSTALLROOT/Library/Python/$PYVER
255 rm -r $INSTALLROOT/System
256 SITEPACKAGES=/Library/Python/$PYVER
257 fi
258
259
1e4a197e 260 # install wxPython's tool scripts
46456f61 261 mkdir -p $INSTALLROOT$BINPREFIX
1e4a197e 262 cd $WXDIR/wxPython/scripts
46456f61 263 python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
1e4a197e 264
c6387bc1 265
1e4a197e 266 # Install wxrc
81de4ba3 267 cp $WXBLD/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX
1e4a197e
RD
268
269
81de4ba3 270 # Set premissions for files in $INSTALLROOT
132ae51e
RD
271 if [ "$UID" = "0" ]; then
272 chown -R root:admin $INSTALLROOT
273 chmod -R g+w $INSTALLROOT
274 fi
1e4a197e
RD
275fi
276
277popd
278
279#----------------------------------------------------------------------
280
281# Make the Installer packages and disk image
81de4ba3 282if [ $skipdmg != yes ]; then
1e4a197e
RD
283
284 # Remove the .pyc/.pyo files they just take up space and can be recreated
285 # during the install.
81de4ba3 286 $PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT > /dev/null
1e4a197e
RD
287
288
289 # Make the welcome message
46456f61 290 case $KIND in
c6387bc1
RD
291 panther) W_MSG="the Panther (OS X 10.3.x) version of" ;;
292 jaguar) W_MSG="the Jaguar (OS X 10.2.x) version of" ;;
46456f61 293 esac
1e4a197e
RD
294 cat > $RESOURCEDIR/Welcome.txt <<EOF
295Welcome!
296
46456f61 297This program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
1e4a197e 298
c6387bc1
RD
299You must install onto your current boot disk, even though the installer does not enforce this, otherwise things will not work.
300
1e4a197e
RD
301Build date: `date`
302EOF
303
304 # make the preflight script
305 cat > $RESOURCEDIR/preflight <<EOF
306#!/bin/sh
307# Cleanup any old install of the wxPython package
308rm -rf \$2$SITEPACKAGES/wxPython
46456f61 309rm -rf \$2$SITEPACKAGES/wx
1e4a197e
RD
310exit 0
311EOF
312 chmod +x $RESOURCEDIR/preflight
313
314 # make the postflight script
315 cat > $RESOURCEDIR/postflight <<EOF
316#!/bin/sh -e
317# Compile the .py files in the wxPython pacakge
c6387bc1
RD
318$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
319$PYTHON \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
320$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wxPython
321$PYTHON -O \$2$PYLIB/compileall.py \$2$SITEPACKAGES/wx
1e4a197e 322
1e4a197e 323
c6387bc1 324# and all of the wxPython pacakge should be group writable
1e4a197e 325chgrp -R admin \$2$SITEPACKAGES/wxPython
1e4a197e 326chmod -R g+w \$2$SITEPACKAGES/wxPython
46456f61
RD
327chgrp -R admin \$2$SITEPACKAGES/wx
328chmod -R g+w \$2$SITEPACKAGES/wx
1e4a197e
RD
329
330exit 0
331EOF
332 chmod +x $RESOURCEDIR/postflight
333
334
335
c6387bc1 336 # Build the main Installer Package...
46456f61 337 rm -rf wxPythonOSX-$KIND.pkg
1e4a197e 338 python $PROGDIR/../buildpkg.py \
46456f61 339 --Title=wxPythonOSX-$KIND \
1e4a197e 340 --Version=$VERSION \
46456f61 341 --Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
1e4a197e
RD
342 --NeedsAuthorization="YES" \
343 --Relocatable="NO" \
344 --InstallOnly="YES" \
345 $INSTALLROOT \
346 $RESOURCEDIR
347
46456f61 348 mv wxPythonOSX-$KIND.pkg $DMGDIR/root
1e4a197e
RD
349
350
1e4a197e
RD
351
352 # Make a README.txt to go on the disk image
c6387bc1 353 cat > "$DMGDIR/root/README 1st.txt" <<EOF
46456f61
RD
354Welcome to wxPython!
355
81de4ba3 356On this disk image you will find the installer for wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. MacPython-OSX is not included.
46456f61 357
81de4ba3 358 wxPython-$KIND.pkg The installer package. It contains the wxPython
46456f61 359 extension modules, wxMac dynamic libraries and
81de4ba3
RD
360 headers, and some scripts for the command-line
361 tools.
1e4a197e 362
81de4ba3
RD
363Everything else here is optional and you can drag them out of the disk
364image and drop them wherever you want. You do need to install the above
c6387bc1 365package before you can use any of the items below.
1e4a197e 366
46456f61 367
b42b447c 368 Apps/wxPython Demo An application bundle version of the demo.
c6387bc1
RD
369 (This has it's own copy of the sources within
370 the bundle.)
371
b42b447c 372 Apps/XRCed An application for editing wxPython resource
c6387bc1
RD
373 files (XRC files.)
374
81de4ba3 375 Apps/PyCrust An application that provides an interactive
c6387bc1
RD
376 Python shell and also namespace inspectors.
377
b42b447c
RD
378
379
81de4ba3 380 Docs/wxDocsViewer An application that allows you to view the
dcb1fb69 381 wxWidgets documentation.
b42b447c
RD
382
383 Docs/licence License files.
384
81de4ba3 385 Docs/other A few readmes, change log, etc.
b42b447c
RD
386
387
81de4ba3 388 Samples/samples Several small sample applications that
b42b447c
RD
389 demonstrate how to use wxPython.
390
81de4ba3 391 Samples/demo A copy of the wxPython demo source code,
b42b447c
RD
392 just open the folder and run demo.pyw.
393
1e4a197e
RD
394Happy Hacking!
395EOF
396
81de4ba3 397# PyAlaMode An extension of PyCrust that includes source
c6387bc1
RD
398# file editing capabilities.
399
1e4a197e 400
b42b447c 401 # wxDocs
81de4ba3
RD
402 if [ ! -e $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz ]; then
403 cat > "$DMGDIR/root/Docs/Build ERROR.txt" <<EOF
dcb1fb69 404
81de4ba3
RD
405The wxPythonDocs tarball was not found when building this disk image!
406
407EOF
408
409 else
410 pushd $BUILDROOT
411 tar xzvf $TARBALLDIR/wxPythonDocs-$VERSION.tar.gz
412 popd
dcb1fb69 413
81de4ba3
RD
414 # Make an app to launch viewdocs.py
415 $PYTHONW $PROGDIR/../buildapp.py \
416 --builddir=$DMGDIR/root/Docs \
417 --name=wxDocsViewer \
418 --mainprogram=$BUILDROOT/wxPython-$VERSION/docs/viewdocs.py \
419 --iconfile=$PROGDIR/Info.icns \
420 build
dcb1fb69 421
81de4ba3
RD
422 cp $BUILDROOT/wxPython-$VERSION/docs/*.zip $DMGDIR/root/Docs/wxDocsViewer.app/Contents/Resources
423
424 cat > "$DMGDIR/root/Docs/README 1st.txt" <<EOF
dcb1fb69
RD
425
426The wxDocsViewer application needs to be copied to your Desktop (or
427someplace else you have write access to) before you can run it, so it
428can cache some indexes within its bundle.
429
430EOF
46456f61 431
81de4ba3
RD
432 fi
433
b42b447c 434 # license files, docs, etc.
dcb1fb69 435 pushd $DMGDIR/root/Docs
b42b447c
RD
436 cp -pR $SRCROOT/wxPython/licence .
437 cp -pR $SRCROOT/wxPython/docs .
438 rm -rf docs/bin
439 rm -rf docs/xml-raw
440 mv docs other
441 popd
81de4ba3
RD
442
443
444 if [ ! -e $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz ]; then
445 cat > "$DMGDIR/root/Samples/Build ERROR.txt" <<EOF
446
447The wxPythonDemo tarball was not found when building this disk image!
448
449EOF
450 cp "$DMGDIR/root/Samples/Build ERROR.txt" $DMGDIR/root/Apps
451
452 else
453
454 # Copy the demo and samples to the disk image from the tarball
455 pushd $DMGDIR/root/Samples
456 tar xzvf $TARBALLDIR/wxPythonDemo-$VERSION.tar.gz
457 mv wxPython-$VERSION/* .
458 rm -rf wxPython-$VERSION
459 rm demo/b demo/.setup.sh
460 mv demo/demo.py demo/demo.pyw
461 popd
462
463 # Make an app bundle to run the demo
464 $PYTHONW $PROGDIR/../buildapp.py \
465 --builddir=$DMGDIR/root/Apps \
466 --name="wxPython Demo" \
467 --mainprogram=$DMGDIR/root/Samples/demo/demo.pyw \
468 --iconfile=$PROGDIR/RunDemo.icns \
469 build
470 cp -pR $DMGDIR/root/Samples/demo/* "$DMGDIR/root/Apps/wxPython Demo.app/Contents/Resources"
471 fi
472
b42b447c 473
46456f61
RD
474 # Make an app bundle to launch PyCrust
475 $PYTHONW $PROGDIR/../buildapp.py \
b42b447c 476 --builddir=$DMGDIR/root/Apps \
46456f61
RD
477 --name=PyCrust \
478 --mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
479 --iconfile=$PROGDIR/PieShell.icns \
480 build
481
c6387bc1
RD
482# # and PyAlaMode
483# $PYTHONW $PROGDIR/../buildapp.py \
484# --builddir=$DMGDIR/root \
485# --name=PyAlaMode \
486# --mainprogram=$INSTALLROOT$BINPREFIX/pyalamode.py \
487# --iconfile=$PROGDIR/PieShell.icns \
488# build
489
46456f61
RD
490 # Make an app to launch XRCed
491 $PYTHONW $PROGDIR/../buildapp.py \
b42b447c 492 --builddir=$DMGDIR/root/Apps \
46456f61
RD
493 --name=XRCed \
494 --mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
495 --iconfile=$PROGDIR/XRCed.icns \
496 build
497
81de4ba3 498
1e4a197e
RD
499
500 # and then finally make a disk image containing the packages and etc.
46456f61 501 $PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
1e4a197e 502
46456f61
RD
503 echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
504 mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR
1e4a197e
RD
505fi
506
507
508# Cleanup build/install dirs
81de4ba3 509if [ $skipclean != yes ]; then
1e4a197e
RD
510 echo "Cleaning up..."
511 rm -rf $TMPDIR
512else
513 echo "Cleanup is disabled. You should remove $TMPDIR when finished"
514fi
515