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