Merged wxPython 2.4.x to the 2.5 branch (Finally!!!)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19793 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
sourcedir: .
|
||||
builddir: .
|
||||
rpmdir: .
|
||||
srcrpmdir: .
|
||||
|
117
wxPython/distrib/README.1st.txt
Normal file
117
wxPython/distrib/README.1st.txt
Normal file
@@ -0,0 +1,117 @@
|
||||
README for wxPythonSrc-*.tar.gz
|
||||
-------------------------------
|
||||
|
||||
Prior to version 2.3.3 of wxPython I had always made my Linux/Unix
|
||||
binaries based on the released binary of wxGTK and wxGTK-gl. This
|
||||
imposed a few restrictions and so starting with 2.3.3 I have decided
|
||||
to do a combined binary that inlcudes wxGTK as well as wxPython. This
|
||||
allows me a bit more flexibility and is consistent with how the
|
||||
Windows and Mac OS X binaries are built.
|
||||
|
||||
If you are reading this file then you are probably interested in
|
||||
building your own copy of wxPython from the sources contained in this
|
||||
archive. If you wish to use the released wxGTK binary as has been
|
||||
done in the past then you can still follow the old build directions in
|
||||
wxPython/BUILD.unix.txt. If you are building for Windows or Mac OS X
|
||||
then you should look at wxPython/BUILD.win32.txt or
|
||||
wxPython/BUILD.osx.txt respectivly.
|
||||
|
||||
If, on the other hand, you would like to build Linux/Unix binaries
|
||||
with a private copy of wxGTK like what I am now distributing then
|
||||
you'll want to follow the instructions in this file. (You should
|
||||
probably still read wxPython/BUILD.unix.txt though since there are
|
||||
other details there that you may need to be aware of.
|
||||
|
||||
Clear as mud? Good. Let's get started.
|
||||
|
||||
|
||||
1. We'll be making a private copy of wxGTK so it doesn't conflict with
|
||||
one used by wxGTK C++ apps that expect to have the default binary
|
||||
installed from RPM or whatever. I put it in /usr/lib/wxPython, but
|
||||
you can use whatever you like. I'll just set a variable to our wx
|
||||
prefix to reference later:
|
||||
|
||||
export WXPREF=/usr/lib/wxPython
|
||||
|
||||
|
||||
2. Make a build directory and configure wxGTK.
|
||||
|
||||
cd wxPythonGTK-2.3.3 # or whatever the top-level dir is
|
||||
mkdir build
|
||||
cd build
|
||||
../configure --with-gtk \
|
||||
--prefix=$WXPREF \
|
||||
--enable-rpath=$WXPREF/lib \
|
||||
--with-opengl \
|
||||
--enable-geometry \
|
||||
--enable-optimise \
|
||||
--enable-debug_flag \
|
||||
|
||||
You may want to use --enable-debug instead of --enable-optimise if
|
||||
you need to run though a debugger and want full debugging symbols.
|
||||
|
||||
if you want to use the image and zlib libraries included with
|
||||
wxWindows instead of those already installed on your system, (for
|
||||
example, to reduce dependencies on 3rd party libraries) then you
|
||||
can add these flags to the configure command:
|
||||
|
||||
--with-libjpeg=builtin \
|
||||
--with-libpng=builtin \
|
||||
--with-libtiff=builtin \
|
||||
--with-zlib=builtin \
|
||||
|
||||
If you would like to use GTK 2.x and unicode, then add the
|
||||
following flags. Please note that this is still beta-level
|
||||
quality, but does look and work quite nice for the most part:
|
||||
|
||||
--enable-gtk2 \
|
||||
--enable-unicode \
|
||||
|
||||
|
||||
3. Build and install wxGTK. (You may need to be root for the last
|
||||
step, depending on where your WXPREF is.)
|
||||
|
||||
make
|
||||
cd ../build
|
||||
make install
|
||||
|
||||
|
||||
4. Build and install wxPython. If you want to use a different version
|
||||
of Python than is found by default on the PATH then specify the
|
||||
whole pathname in these steps. The version of Python that runs
|
||||
setup.py is the version wxPython will be built and installed for.
|
||||
(You will need to be root for the install step unless your Python
|
||||
is not in a system location.)
|
||||
|
||||
cd ../wxPython
|
||||
python setup.py \
|
||||
WX_CONFIG=$WXPREF/bin/wx-config \
|
||||
build install
|
||||
|
||||
If you are using GTK 2.x and unicode then do it this way instead:
|
||||
|
||||
python setup.py \
|
||||
WX_CONFIG=$WXPREF/bin/wx-config \
|
||||
WXPORT=gtk2 UNICODE=1 \
|
||||
build install
|
||||
|
||||
If you get errors about wxGLCanvas or being unable to find libGLU
|
||||
or something like that then you can add BUILD_GLCANVAS=0 to the
|
||||
setup.py command line to disable the building of the glcanvas
|
||||
module.
|
||||
|
||||
If you would like to install to someplace besides the Python
|
||||
site-packages directory (such as to your home directory) then you
|
||||
can add "--root=<path>" after the "install" command. To use
|
||||
wxPython like this you'll need to ensure that the directory
|
||||
containing wxPyrthon is contained in in the PYTHONPATH environment
|
||||
variable.
|
||||
|
||||
|
||||
5. That's all, except for the having fun part!
|
||||
|
||||
--
|
||||
Robin Dunn
|
||||
Software Craftsman
|
||||
http://wxPython.org Java give you jitters? Relax with wxPython!
|
||||
|
@@ -1,30 +0,0 @@
|
||||
This zip file contains versions of the wxWindows and wxPython binaries
|
||||
that have been compiled with __WXDEBUG__ defined. This adds code to
|
||||
wxWindows that is a bit more agressive about checking parameter
|
||||
values, return values, and etc. When the debugging library senses
|
||||
something is wrong it will popup a message dialog telling you so.
|
||||
Unfortunately the message is specific to the C++ code but it might
|
||||
give you a hint about what went wrong and how to fix it.
|
||||
|
||||
Another debugging feature is when the wxPython program exits, it will
|
||||
print to stdout information about any wxWindows C++ objects that
|
||||
havn't been properly cleaned up.
|
||||
|
||||
This archive contains a new wxWindows DLL named wx[version]d.dll and a
|
||||
debugging version of the core wxPython module, wxc_d.pyd. These
|
||||
should be put into your wxPython package directory. Also included are
|
||||
the debuging version of Python, python_d.exe and python[VER]_d.dll
|
||||
which can be put wherever you like.
|
||||
|
||||
In order to run the debugging version of wxPython sumply run you
|
||||
program with python_d.exe instead of python.exe. This lets the
|
||||
debugging version sit side by side with the production version, with
|
||||
no need for swapping this around. You will also need _d versions of
|
||||
any other extension modules you are using. If you need _d's for any
|
||||
of the other standard Python extensions you can get them here, for 2.0
|
||||
at least:
|
||||
|
||||
http://www.pythonlabs.com/products/python2.0/downloads/BeOpen-Python-2.0-Debug.zip
|
||||
|
||||
|
||||
Robin
|
17
wxPython/distrib/README.viewdocs.txt
Normal file
17
wxPython/distrib/README.viewdocs.txt
Normal file
@@ -0,0 +1,17 @@
|
||||
wxPythonDocs
|
||||
------------
|
||||
|
||||
The wxWindows docs can now be viewed on non-Win32 platforms with a
|
||||
nice viewer modeled after the MS HTMLHelp viewer. Simply execute the
|
||||
viewdocs.py script located in this directory and you're all set.
|
||||
(You'll need to first have wxPython installed and accessible via the
|
||||
PYTHONPATH.)
|
||||
|
||||
You can also add other HTML books to be displayed by the viewer simply
|
||||
by dropping their .zip file here, viewdocs.py will find them
|
||||
automatically and add them to the list. The zip file just needs to
|
||||
contain a .hhp file that defines the contents of the book. See the
|
||||
docs on wxHtmlHelpController for details.
|
||||
|
||||
If you'd still ike to view these docs in your regular browser you can
|
||||
simply unzip each of the books into their own directory.
|
@@ -1,139 +0,0 @@
|
||||
|
||||
|
||||
import sys, os, string, time
|
||||
from ftplib import FTP
|
||||
|
||||
cwd = os.getcwd()
|
||||
|
||||
logfile = 'c:\\temp\\autobuild.log'
|
||||
WXDIR = os.environ['WXWIN']
|
||||
dllVer = '23_0'
|
||||
wxpVer = '2.3b1'
|
||||
dateSt = time.strftime("%Y%m%d", time.localtime(time.time()))
|
||||
|
||||
base = os.path.split(sys.argv[0])[0]
|
||||
base = os.path.join(base, '..')
|
||||
WXPYDIR = os.path.abspath(base)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def do(cmd):
|
||||
st = " " + cmd + " >> " + logfile
|
||||
print st
|
||||
f = open(logfile, "at")
|
||||
f.write(st + '\n')
|
||||
f.close()
|
||||
os.system(cmd + " >>& " + logfile)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def logTruncate():
|
||||
f = open(logfile, "wt")
|
||||
f.close()
|
||||
|
||||
|
||||
def logSeparator(msg=None, f=None, recurse=1):
|
||||
if not f:
|
||||
f = open(logfile, "at")
|
||||
f.write('\n')
|
||||
f.write('--' * 35)
|
||||
f.write('\n')
|
||||
if msg:
|
||||
f.write(msg)
|
||||
f.write('\n')
|
||||
f.write('--' * 35)
|
||||
f.write('\n')
|
||||
if recurse:
|
||||
logSeparator(msg, sys.stdout, 0)
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def validateFile(file):
|
||||
if not os.path.exists(file):
|
||||
logSeparator("***** %s does not exist, exiting! *****" % file)
|
||||
raise SystemExit
|
||||
else:
|
||||
logSeparator("%s found, continuing..." % file, recurse=0)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
logTruncate()
|
||||
|
||||
try:
|
||||
logSeparator("Cleanup")
|
||||
os.chdir(WXDIR + '/src/msw')
|
||||
do('make cleandll FINAL=1')
|
||||
|
||||
logSeparator("Building Documentation...")
|
||||
os.chdir(WXDIR + '/src/msw')
|
||||
do('make touchmanual htmlhelp')
|
||||
validateFile(WXDIR + '/docs/htmlhelp/wx.chm')
|
||||
|
||||
logSeparator("Building wxWindows...")
|
||||
os.chdir(WXDIR + '/src/msw')
|
||||
do('make dll pch FINAL=1')
|
||||
validateFile(WXDIR + '/lib/wx'+dllVer+'.dll')
|
||||
|
||||
|
||||
|
||||
logSeparator("Cleaning wxPython build directory...")
|
||||
os.chdir(WXPYDIR)
|
||||
do('b.bat c')
|
||||
|
||||
logSeparator("Building wxPython...")
|
||||
os.chdir(WXPYDIR + '\\src')
|
||||
do("b.bat f")
|
||||
validateFile(WXPYDIR+'\\wxPython\\wxc.pyd')
|
||||
|
||||
|
||||
logSeparator("Building installer executable...")
|
||||
os.chdir(WXPYDIR+'\\distrib')
|
||||
do("autoit2 wise.aut")
|
||||
srcName = WXPYDIR+'\\distrib\\wxPython-'+wxpVer+'.EXE'
|
||||
destName = WXPYDIR+'\\distrib\\wxPython-'+wxpVer+'-'+dateSt+'.EXE'
|
||||
validateFile(srcName)
|
||||
try:
|
||||
time.sleep(5)
|
||||
os.rename(srcName, destName)
|
||||
validateFile(destName)
|
||||
except:
|
||||
logSeparator("****** UNABLE TO RENAME FILE ******")
|
||||
|
||||
|
||||
logSeparator("Building docs zip file...")
|
||||
os.chdir(WXPYDIR)
|
||||
do("distrib\\zipit.bat %s" % wxpVer)
|
||||
|
||||
srcDName = WXPYDIR+'\\distrib\\wxPython-docs-'+wxpVer+'.tar.gz'
|
||||
destDName = WXPYDIR+'\\distrib\\wxPython-docs-'+wxpVer+'-'+dateSt+'.tar.gz'
|
||||
validateFile(srcDName)
|
||||
try:
|
||||
os.rename(srcDName, destDName)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
# #*#*#*#*#* Comment this out to allow upload...
|
||||
#return
|
||||
|
||||
logSeparator("Uploading to website...")
|
||||
do('python c:\\utils\\sendwxp.py %s' % destName)
|
||||
#do('python c:\\utils\\sendwxp.py %s' % destDName)
|
||||
|
||||
|
||||
logSeparator("Finished!!!")
|
||||
|
||||
finally:
|
||||
os.system("list " + logfile)
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
51
wxPython/distrib/genfilelist.py
Normal file
51
wxPython/distrib/genfilelist.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""
|
||||
Walk a directory tree and output a filename list suitable for use
|
||||
in an RPM spec.
|
||||
|
||||
Usage: genfilelist.py [-r] build_root filespec(s)
|
||||
|
||||
"""
|
||||
|
||||
|
||||
import sys, os, glob, stat
|
||||
|
||||
|
||||
def walktree(names, buildroot, recurse):
|
||||
for name in names:
|
||||
isdir = os.path.isdir(name)
|
||||
printfilename(name, buildroot, isdir)
|
||||
if isdir and recurse:
|
||||
walktree([os.path.join(name, x) for x in os.listdir(name)], buildroot, recurse)
|
||||
|
||||
|
||||
def printfilename(name, buildroot, isdir):
|
||||
s = os.lstat(name)
|
||||
realname = name[len(buildroot):]
|
||||
if isdir:
|
||||
fmt = "%%dir %%attr(%o, root, root) %s"
|
||||
else:
|
||||
fmt = "%%attr(%o, root, root) %s"
|
||||
print fmt % (s[stat.ST_MODE] & 0777, realname)
|
||||
|
||||
|
||||
def main(args):
|
||||
if args[0] == '-r':
|
||||
recurse = 1
|
||||
args = args[1:]
|
||||
else:
|
||||
recurse = 0
|
||||
|
||||
if len(args) < 2:
|
||||
print __str__
|
||||
sys.exit(1)
|
||||
|
||||
buildroot = args[0]
|
||||
for arg in args[1:]:
|
||||
if arg[0] == '/':
|
||||
arg = arg[1:]
|
||||
walktree(glob.glob(os.path.join(buildroot, arg)), buildroot, recurse)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
|
||||
|
1
wxPython/distrib/mac/.cvsignore
Normal file
1
wxPython/distrib/mac/.cvsignore
Normal file
@@ -0,0 +1 @@
|
||||
.DS_Store
|
1
wxPython/distrib/mac/MacPython/.cvsignore
Normal file
1
wxPython/distrib/mac/MacPython/.cvsignore
Normal file
@@ -0,0 +1 @@
|
||||
.DS_Store
|
3
wxPython/distrib/mac/MacPython/README.txt
Normal file
3
wxPython/distrib/mac/MacPython/README.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
This is a set of build scripts and such for MacPython-OSX 2.3 that I
|
||||
will use until there are standard distributions from Jack.
|
||||
|
129
wxPython/distrib/mac/MacPython/build
Executable file
129
wxPython/distrib/mac/MacPython/build
Executable file
@@ -0,0 +1,129 @@
|
||||
#!/bin/sh -e
|
||||
#----------------------------------------------------------------------
|
||||
# Build MacPython 2.3 and make an Installer package of it
|
||||
|
||||
# TODO: Parameterize the versions, builddirs, etc...
|
||||
|
||||
# Script configs
|
||||
PYVERSION=2.3a2
|
||||
PYVER=2.3
|
||||
BUILDNUM=3
|
||||
DOCLEANUP=no
|
||||
|
||||
PROGDIR="`dirname \"$0\"`"
|
||||
TMPDIR=/tmp/_py
|
||||
#TMPDIR=/projects/_py
|
||||
|
||||
BUILDROOT=$TMPDIR/build
|
||||
INSTALLROOT=$TMPDIR/install
|
||||
DMGDIR=$TMPDIR/dmg
|
||||
RESOURCEDIR=$PROGDIR/resources
|
||||
DESTDIR=/projects/wx/wxPython/dist
|
||||
PYTHONSRC=/projects/Python-$PYVERSION
|
||||
WASTEDIR=/projects/waste
|
||||
|
||||
# Setup
|
||||
mkdir -p $BUILDROOT
|
||||
mkdir -p $INSTALLROOT
|
||||
rm -rf $DMGDIR
|
||||
mkdir -p $DMGDIR/root
|
||||
|
||||
|
||||
# Configure and build Python
|
||||
pushd $BUILDROOT
|
||||
|
||||
# Check if we should build and install the docs, but only if it
|
||||
# doesn't appear to be done already. TODO: fix this path to be version independent
|
||||
if [ ! -e "build/temp.darwin-6.3-Power Macintosh-2.3/build-html/build-html idx" ]; then
|
||||
read -p "Build the Python docs? (y/N)? " builddocs
|
||||
fi
|
||||
|
||||
# If the filesystem is case-sensitive then "python" will be built, but
|
||||
# some parts of the install expect "python.exe which is what is built
|
||||
# on a case-insensitive filesystem. Make a link just in case it is
|
||||
# needed.
|
||||
if [ ! -e python.exe ]; then
|
||||
ln -s python python.exe
|
||||
fi
|
||||
|
||||
# Make a link to the waste dir so that lib can be found. This allows
|
||||
# the PythonIDE to be built
|
||||
if [ ! -e waste ]; then
|
||||
ln -s $WASTEDIR waste
|
||||
fi
|
||||
|
||||
$PYTHONSRC/configure --enable-framework=$INSTALLROOT/Library/Frameworks LDFLAGS=-Wl,-x
|
||||
make
|
||||
make frameworkinstall
|
||||
|
||||
if [ "$builddocs" = "y" -o "$builddocs" = "Y" ]; then
|
||||
./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py build
|
||||
echo ""
|
||||
read -p "When the help indexer is done press Enter..." ans
|
||||
./python.exe $PYTHONSRC/Mac/OSX/setupDocs.py install \
|
||||
--prefix=$INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
|
||||
|
||||
# Make the Installer package:
|
||||
# First, remove the unix tools as their paths will be wrong. We'll recreate
|
||||
# them in the postinstall.
|
||||
rm -r $INSTALLROOT/usr
|
||||
|
||||
# Next, remove the .pyc/.pyo files
|
||||
python $PROGDIR/../zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
|
||||
|
||||
# Make the welcome message
|
||||
cat > $RESOURCEDIR/Welcome.txt <<EOF
|
||||
Welcome!
|
||||
|
||||
This program will install Python $PYVERSION for Mac OS X as a Framework.
|
||||
|
||||
Build number: $BUILDNUM
|
||||
Build date: `date`
|
||||
EOF
|
||||
|
||||
|
||||
# fix a bug in the IDLE install
|
||||
IDLERES=$INSTALLROOT/Applications/MacPython-2.3/IDLE.app/Contents/Resources
|
||||
mv $IDLERES/idlelib/idle $IDLERES
|
||||
|
||||
|
||||
# Finally, build the package...
|
||||
rm -rf MacPython-OSX.pkg
|
||||
python $PROGDIR/../buildpkg.py \
|
||||
--Title=MacPython-OSX \
|
||||
--Version=$PYVERSION-$BUILDNUM \
|
||||
--Description="Python $PYVERSION for Mac OS X, framework based" \
|
||||
--NeedsAuthorization="YES" \
|
||||
--Relocatable="NO" \
|
||||
--InstallOnly="YES" \
|
||||
$INSTALLROOT \
|
||||
$RESOURCEDIR
|
||||
|
||||
## --RootVolumeOnly="YES" \
|
||||
|
||||
# ...and then make a disk image containing the package.
|
||||
mv MacPython-OSX.pkg $DMGDIR/root
|
||||
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR MacPython-OSX-$PYVERSION-$BUILDNUM
|
||||
|
||||
echo Moving $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM to $DESTDIR
|
||||
mv $DMGDIR/MacPython-OSX-$PYVERSION-$BUILDNUM.dmg $DESTDIR
|
||||
|
||||
|
||||
# Cleanup build/install dirs
|
||||
if [ $DOCLEANUP = yes ]; then
|
||||
echo "Cleaning up..."
|
||||
rm -rf $BUILDROOT
|
||||
rm -rf $INSTALLROOT
|
||||
rm -rf $DMGDIR
|
||||
else
|
||||
echo "Cleanup is disabled. You should remove these dirs when done:"
|
||||
echo " $BUILDROOT"
|
||||
echo " $INSTALLROOT"
|
||||
echo " $DMGDIR"
|
||||
fi
|
||||
|
6
wxPython/distrib/mac/MacPython/resources/Welcome.txt
Normal file
6
wxPython/distrib/mac/MacPython/resources/Welcome.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Welcome!
|
||||
|
||||
This program will install Python 2.3a2 for Mac OS X as a Framework.
|
||||
|
||||
Build number: 3
|
||||
Build date: Thu Mar 20 18:54:52 PST 2003
|
67
wxPython/distrib/mac/MacPython/resources/postflight
Executable file
67
wxPython/distrib/mac/MacPython/resources/postflight
Executable file
@@ -0,0 +1,67 @@
|
||||
#!/bin/sh
|
||||
#----------------------------------------------------------------------
|
||||
# Create the unix tools and compile the .py files after Python has been
|
||||
# installed.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
PYVER=2.3
|
||||
|
||||
PKG=$1
|
||||
DEST=$2
|
||||
|
||||
|
||||
# if destination is / then use usr/local/bin, otherwise just bin
|
||||
if [ "$DEST" = "/" ]; then
|
||||
TOOLDIR=/usr/local/bin
|
||||
DEST=
|
||||
else
|
||||
TOOLDIR=$DEST/bin
|
||||
fi
|
||||
|
||||
# Make sure the dir exists
|
||||
mkdir -p $TOOLDIR
|
||||
|
||||
# Make some links to the python executable
|
||||
if [ -e $TOOLDIR/python$PYVER ]; then
|
||||
rm $TOOLDIR/python$PYVER
|
||||
fi
|
||||
ln -fs $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin/python $TOOLDIR/python$PYVER
|
||||
|
||||
if [ -e $TOOLDIR/python ]; then
|
||||
rm $TOOLDIR/python
|
||||
fi
|
||||
ln -fs python$PYVER $TOOLDIR/python
|
||||
|
||||
|
||||
# make the pythonw script
|
||||
cat > $TOOLDIR/pythonw <<EOF
|
||||
#!/bin/sh
|
||||
exec "$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/python" "\$@"
|
||||
EOF
|
||||
chmod +x $TOOLDIR/pythonw
|
||||
|
||||
|
||||
# Compile the .py files in the Python library to .pyc's and then .pyo's
|
||||
$TOOLDIR/python -Wi -tt \
|
||||
$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
|
||||
-x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
|
||||
|
||||
$TOOLDIR/python -Wi -tt -O \
|
||||
$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/compileall.py \
|
||||
-x badsyntax -x site-packages $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER
|
||||
|
||||
|
||||
# Make the site-packages and other dirs writable by the admin.
|
||||
for d in $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages \
|
||||
$DEST/Library/Frameworks/Python.framework/Versions/$PYVER/bin \
|
||||
$DEST/Applications/MacPython-$PYVER; do
|
||||
chgrp -R admin $d
|
||||
chmod -R g+w $d
|
||||
done
|
||||
|
||||
|
||||
# The link in the app bundles needs updated.
|
||||
for app in BuildApplet IDLE PackageManager PythonIDE; do
|
||||
ln -s $DEST/Library/Frameworks/Python.framework/Versions/$PYVER/Resources/Python.app/Contents/MacOS/python \
|
||||
$DEST/Applications/MacPython-$PYVER/$app.app/Contents/MacOS
|
||||
done
|
@@ -1,15 +0,0 @@
|
||||
Title MachoPython
|
||||
Version 2.2.1
|
||||
Description The Python Programming Language
|
||||
DefaultLocation /
|
||||
DeleteWarning
|
||||
|
||||
### Package Flags
|
||||
|
||||
NeedsAuthorization YES
|
||||
Required NO
|
||||
Relocatable NO
|
||||
RequiresReboot NO
|
||||
UseUserMask NO
|
||||
OverwritePermissions NO
|
||||
InstallFat NO
|
@@ -1,264 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# build binary wxMacPython package and put it on a disk image
|
||||
#
|
||||
# usage: build [-s dir] [-d dir] [--cvs-update] [--force] [--debug]
|
||||
#
|
||||
# (C)opyright 2002 Frank Vercruesse
|
||||
#
|
||||
# Many modifications by Robin Dunn
|
||||
|
||||
|
||||
PYVER=2.2
|
||||
|
||||
curDir=`pwd`
|
||||
progDir="`dirname \"$0\"`"
|
||||
|
||||
defSrcPath="/projects/wx"
|
||||
defDstPath="/projects/wx/wxPython/dist"
|
||||
|
||||
pkgName="wxPythonOSX"
|
||||
#version=`date +"%Y-%m-%d"`
|
||||
version=`cd $defSrcPath/wxPython; python$PYVER -c 'import setup;print setup.VERSION'`
|
||||
|
||||
dmgRoot="dmg-root"
|
||||
pkgRoot="pkg-root"
|
||||
wxWindowsInst="$pkgRoot/usr/local"
|
||||
wxPythonInst="$pkgRoot/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages"
|
||||
|
||||
pythonExec="python$PYVER"
|
||||
makePkgExec="./makepkg"
|
||||
makeDmgExec="./makedmg"
|
||||
|
||||
|
||||
usage() {
|
||||
echo `basename $0`: ERROR: $* 1>&2
|
||||
echo usage: `basename $0` '[-s dir] [-d dir] [--cvs-update] [--force] [--debug]' 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
quotemeta() {
|
||||
# probably not quite correct, but seems to work
|
||||
echo "$1" | sed -e 's/\([^a-zA-z0-9.,--;_/]\)/\\\1/g'
|
||||
}
|
||||
|
||||
msg()
|
||||
{
|
||||
echo "---------------------------------------------"
|
||||
echo $@
|
||||
}
|
||||
|
||||
msgdo() {
|
||||
echo "--> " $@
|
||||
$@
|
||||
}
|
||||
|
||||
|
||||
user=$1
|
||||
shift
|
||||
|
||||
update=
|
||||
force=
|
||||
debug=
|
||||
srcPath=
|
||||
dstPath=
|
||||
|
||||
while :; do
|
||||
case "$1" in
|
||||
--cvs-update) update=1;;
|
||||
--force) force=1;;
|
||||
--debug) debug=1;;
|
||||
-s) shift; srcPath="$1";;
|
||||
-d) shift; dstPath="$1";;
|
||||
-*) usage "bad argument $1";;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg check and prepare build directories
|
||||
|
||||
if ! test "$srcPath"; then
|
||||
srcPath=$defSrcPath
|
||||
fi
|
||||
if ! test -d "$srcPath"; then
|
||||
echo "no such directory: '$srcPath'" 1>&2
|
||||
exit
|
||||
fi
|
||||
|
||||
if ! test "$dstPath"; then
|
||||
dstPath=$defDstPath
|
||||
fi
|
||||
if ! test -d "$dstPath"; then
|
||||
msgdo mkdir -p -m 775 "$dstPath"
|
||||
msgdo chown ${user}:staff "$dstPath"
|
||||
fi
|
||||
|
||||
temp="tmp$$"
|
||||
if test -e "$dstPath/$temp"; then
|
||||
msgdo rm -rf "$dstPath/$temp"
|
||||
fi
|
||||
msgdo mkdir -m 775 "$dstPath/$temp"
|
||||
|
||||
if test -e "$dstPath/$temp/$pkgRoot"; then
|
||||
msgdo rm -rf "$dstPath/$temp/$pkgRoot"
|
||||
fi
|
||||
msgdo mkdir -m 1775 "$dstPath/$temp/$pkgRoot"
|
||||
msgdo chown root:admin "$dstPath/$temp/$pkgRoot"
|
||||
|
||||
if test -e "$dstPath/$temp/$dmgRoot"; then
|
||||
msgdo rm -rf "$dstPath/$temp/$dmgRoot"
|
||||
fi
|
||||
msgdo mkdir -p -m 775 "$dstPath/$temp/$dmgRoot"
|
||||
msgdo chown $user:staff "$dstPath/$temp/$dmgRoot"
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
# update cvs
|
||||
if [ $update ]; then
|
||||
msg Updating from CVS
|
||||
msgdo cd "$srcPath"
|
||||
msgdo cvs update -dP -A
|
||||
fi
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg configuring wxWindows
|
||||
|
||||
buildDir="$srcPath/build-pkg"
|
||||
dFlag="--enable-debug_flag --enable-optimise"
|
||||
if [ $debug ]; then
|
||||
buildDir="$srcPath/build-pkg-debug"
|
||||
dFlag="--enable-debug"
|
||||
fi
|
||||
if ! test -e "$buildDir"; then
|
||||
force=1
|
||||
fi
|
||||
if [ $force ]; then
|
||||
if test -e "$buildDir"; then
|
||||
rm -rf "$buildDir"
|
||||
fi
|
||||
msgdo mkdir -m 775 "$buildDir"
|
||||
msgdo cd "$buildDir"
|
||||
msgdo ../configure --with-mac --with-opengl --enable-precomp=no $dFlag
|
||||
cd $curDir
|
||||
|
||||
else
|
||||
echo wxWindows already configured
|
||||
fi
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg building wxWindows
|
||||
msgdo cd $buildDir
|
||||
msgdo make
|
||||
msgdo cd ../locale
|
||||
msgdo make allmo
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg installing wxWindows
|
||||
msgdo mkdir -p -m 1755 "$dstPath/$temp/$wxWindowsInst"
|
||||
msgdo cd "$buildDir"
|
||||
|
||||
# install once to the package directory, and once to the
|
||||
# local machine so the wxPython build will get the right wxMac
|
||||
msgdo make install "prefix=`quotemeta \"$dstPath/$temp/$wxWindowsInst\"`"
|
||||
msgdo make install
|
||||
|
||||
msgdo chown -R root:wheel "$dstPath/$temp/$pkgRoot/usr"
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg building wxPython
|
||||
if [ $force ]; then
|
||||
fFlag="--force"
|
||||
else
|
||||
fFlag=
|
||||
fi
|
||||
if [ $debug ]; then
|
||||
dFlag="--debug"
|
||||
wxpBuildDir="build-pkg-debug"
|
||||
else
|
||||
dFlag=
|
||||
wxpBuildDir="build-pkg"
|
||||
fi
|
||||
bbFlag="BUILD_BASE=$wxpBuildDir"
|
||||
|
||||
msgdo cd "$srcPath/wxPython"
|
||||
msgdo $pythonExec setup.py build 'IN_CVS_TREE=1' $bbFlag $fFlag $dFlag
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg installing wxPython
|
||||
msgdo mkdir -p -m 775 "$dstPath/$temp/$wxPythonInst"
|
||||
msgdo cd "$srcPath/wxPython"
|
||||
msgdo $pythonExec setup.py install $bbFlag --install-lib="$dstPath/$temp/$wxPythonInst"
|
||||
cd $curDir
|
||||
|
||||
msgdo chown -R root:admin "$dstPath/$temp/$pkgRoot/Library"
|
||||
msgdo chmod -R g+w "$dstPath/$temp/$pkgRoot/Library"
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg copying additional wxPython files
|
||||
msgdo cp -pR "$srcPath/wxPython/samples" "$dstPath/$temp/$dmgRoot"
|
||||
msgdo cp -pR "$srcPath/wxPython/demo" "$dstPath/$temp/$dmgRoot"
|
||||
msgdo cp -pR "$srcPath/wxPython/licence" "$dstPath/$temp/$dmgRoot"
|
||||
find "$dstPath/$temp/$dmgRoot" -name "CVS" -type d -print0 | xargs -0 rm -rf
|
||||
find "$dstPath/$temp/$dmgRoot" -name ".DS_Store" -type f -print0 | xargs -0 rm
|
||||
find "$dstPath/$temp/$dmgRoot" -name ".cvsignore" -type f -print0 | xargs -0 rm
|
||||
find "$dstPath/$temp/$dmgRoot" -name ".#*" -type f -print0 | xargs -0 rm
|
||||
find "$dstPath/$temp/$dmgRoot" -name "b" -type f -print0 | xargs -0 rm
|
||||
find "$dstPath/$temp/$dmgRoot" -name "*~*~" -type f -print0 | xargs -0 rm
|
||||
|
||||
msgdo cd "$srcPath/wxPython/scripts"
|
||||
sFiles=`$pythonExec CreateMacScripts.py`
|
||||
for f in $sFiles; do
|
||||
msgdo cp $f "$dstPath/$temp/$wxWindowsInst/bin"
|
||||
done
|
||||
cd $curDir
|
||||
|
||||
msgdo chown -R ${user}:staff "$dstPath/$temp/$dmgRoot"
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg making installer package
|
||||
msgdo cp -pR "$progDir/resources" "$dstPath/$temp"
|
||||
msgdo cp $progDir/$pkgName.info $progDir/$pkgName-$version.info
|
||||
if [ $debug ]; then
|
||||
echo "__WXDEBUG__ version." >> "$dstPath/$temp/resources/Welcome.txt"
|
||||
echo "" >> "$dstPath/$temp/resources/Welcome.txt"
|
||||
fi
|
||||
echo "Build date: `date`" >> "$dstPath/$temp/resources/Welcome.txt"
|
||||
msgdo cd "$progDir"
|
||||
msgdo "$makePkgExec" $dstPath/$temp/$pkgRoot $pkgName-$version.info -d $dstPath/$temp/$dmgRoot -r $dstPath/$temp/resources
|
||||
msgdo chown -R ${user}:staff $dstPath/$temp/$dmgRoot/$pkgName-$version.pkg
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg making disk image
|
||||
msgdo cd "$progDir"
|
||||
msgdo "$makeDmgExec" $dstPath/$temp/$dmgRoot $dstPath/$temp $pkgName-$version
|
||||
if [ $debug ]; then
|
||||
dmgName="$pkgName-$version-debug"
|
||||
else
|
||||
dmgName="$pkgName-$version"
|
||||
fi
|
||||
msgdo mv "$dstPath/$temp/$pkgName-$version.dmg" "$dstPath/$dmgName.dmg"
|
||||
msgdo chown ${user}:staff "$dstPath/$dmgName.dmg"
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg cleaning up
|
||||
msgdo chown -R ${user}:staff "$buildDir"
|
||||
msgdo chown -R ${user}:staff "$srcPath/wxPython/$wxpBuildDir"
|
||||
msgdo rm $progDir/$pkgName-$version.info
|
||||
msgdo rm -rf "$dstPath/$temp"
|
@@ -1,162 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# Create a MachoPython package from the currently installed verison
|
||||
# and put it on a disk image
|
||||
#
|
||||
|
||||
|
||||
PYVER=2.2
|
||||
|
||||
curDir=`pwd`
|
||||
progDir="`dirname \"$0\"`"
|
||||
|
||||
defDstPath="/projects/wx/wxPython/dist"
|
||||
|
||||
pkgName="MachoPython"
|
||||
version=2.2.1-4
|
||||
dmgRoot="dmg-root"
|
||||
pkgRoot="pkg-root"
|
||||
sitePkgDir="$pkgRoot/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages"
|
||||
|
||||
pythonExec="python$PYVER"
|
||||
makePkgExec="./makepkg"
|
||||
makeDmgExec="./makedmg"
|
||||
|
||||
|
||||
usage() {
|
||||
echo `basename $0`: ERROR: $* 1>&2
|
||||
echo usage: `basename $0` '[-d dir]' 1>&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
quotemeta() {
|
||||
# probably not quite correct, but seems to work
|
||||
echo "$1" | sed -e 's/\([^a-zA-z0-9.,--;_/]\)/\\\1/g'
|
||||
}
|
||||
|
||||
msg()
|
||||
{
|
||||
echo "---------------------------------------------"
|
||||
echo $@
|
||||
}
|
||||
|
||||
msgdo() {
|
||||
echo "--> " $@
|
||||
$@
|
||||
}
|
||||
|
||||
|
||||
user=$1
|
||||
shift
|
||||
|
||||
dstPath=
|
||||
|
||||
while :; do
|
||||
case "$1" in
|
||||
-d) shift; dstPath="$1";;
|
||||
-*) usage "bad argument $1";;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg check and prepare build directories
|
||||
|
||||
if ! test "$dstPath"; then
|
||||
dstPath=$defDstPath
|
||||
fi
|
||||
if ! test -d "$dstPath"; then
|
||||
msgdo mkdir -p -m 775 "$dstPath"
|
||||
msgdo chown ${user}:staff "$dstPath"
|
||||
fi
|
||||
|
||||
temp="tmp$$"
|
||||
if test -e "$dstPath/$temp"; then
|
||||
msgdo rm -rf "$dstPath/$temp"
|
||||
fi
|
||||
msgdo mkdir -m 775 "$dstPath/$temp"
|
||||
|
||||
if test -e "$dstPath/$temp/$pkgRoot"; then
|
||||
msgdo rm -rf "$dstPath/$temp/$pkgRoot"
|
||||
fi
|
||||
msgdo mkdir -m 1775 "$dstPath/$temp/$pkgRoot"
|
||||
msgdo chown root:admin "$dstPath/$temp/$pkgRoot"
|
||||
|
||||
if test -e "$dstPath/$temp/$dmgRoot"; then
|
||||
msgdo rm -rf "$dstPath/$temp/$dmgRoot"
|
||||
fi
|
||||
msgdo mkdir -p -m 775 "$dstPath/$temp/$dmgRoot"
|
||||
msgdo chown $user:staff "$dstPath/$temp/$dmgRoot"
|
||||
|
||||
#-----------------------------------
|
||||
msg Copying files to package build dir
|
||||
|
||||
for d in Applications/Python.app Library/Frameworks/Python.framework; do
|
||||
msgdo mkdir -p -m 755 $dstPath/$temp/$pkgRoot/$d
|
||||
msgdo cp -pR /$d/* $dstPath/$temp/$pkgRoot/$d
|
||||
done
|
||||
|
||||
msgdo mkdir -p -m 755 $dstPath/$temp/$pkgRoot/usr/local/bin
|
||||
msgdo cd $dstPath/$temp/$pkgRoot/usr/local/bin
|
||||
for f in pydoc python python$PYVER; do
|
||||
msgdo ln -s ../../../Library/Frameworks/Python.framework/Versions/Current/bin/$f .
|
||||
done
|
||||
|
||||
cat > pythonw <<EOF
|
||||
#!/bin/sh
|
||||
exec /Applications/Python.app/Contents/MacOS/python \$@
|
||||
EOF
|
||||
chmod +x pythonw
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg Removing locally installed extension modules
|
||||
|
||||
msgdo cd $dstPath/$temp/$sitePkgDir
|
||||
for f in *; do
|
||||
if [ $f != README ]; then
|
||||
msgdo rm -r $f
|
||||
fi
|
||||
done
|
||||
for f in Numeric numarray; do
|
||||
rm -r $dstPath/$temp/$pkgRoot/Library/Frameworks/Python.framework/Versions/$PYVER/include/python$PYVER/$f
|
||||
done
|
||||
cd $curDir
|
||||
|
||||
#-----------------------------------
|
||||
msg Adjusting ownership and permission
|
||||
|
||||
for d in Applications Library; do
|
||||
msgdo chown -R root:admin "$dstPath/$temp/$pkgRoot/$d"
|
||||
msgdo chmod -R g+w "$dstPath/$temp/$pkgRoot/$d"
|
||||
done
|
||||
msgdo chown -R root:wheel "$dstPath/$temp/$pkgRoot/usr"
|
||||
|
||||
#-----------------------------------
|
||||
msg making installer package
|
||||
msgdo cp -pR "$progDir/resourcesPython" "$dstPath/$temp/"
|
||||
msgdo mv "$dstPath/$temp/resourcesPython" "$dstPath/$temp/resources"
|
||||
msgdo cp $progDir/$pkgName.info $progDir/$pkgName-$version.info
|
||||
msgdo cd "$progDir"
|
||||
msgdo "$makePkgExec" $dstPath/$temp/$pkgRoot $pkgName-$version.info -d $dstPath/$temp/$dmgRoot -r $dstPath/$temp/resources
|
||||
msgdo chown -R ${user}:staff $dstPath/$temp/$dmgRoot/$pkgName-$version.pkg
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg making disk image
|
||||
msgdo cd "$progDir"
|
||||
msgdo "$makeDmgExec" $dstPath/$temp/$dmgRoot $dstPath/$temp $pkgName-$version
|
||||
dmgName="$pkgName-$version"
|
||||
msgdo mv "$dstPath/$temp/$pkgName-$version.dmg" "$dstPath/$dmgName.dmg"
|
||||
msgdo chown ${user}:staff "$dstPath/$dmgName.dmg"
|
||||
cd $curDir
|
||||
|
||||
|
||||
#-----------------------------------
|
||||
msg cleaning up
|
||||
msgdo rm $progDir/$pkgName-$version.info
|
||||
msgdo rm -rf "$dstPath/$temp"
|
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# build binary package and put it on a disk image
|
||||
#
|
||||
# usage: build [-s dir] [-d dir] [--cvs-update] [--force] [--debug]
|
||||
#
|
||||
# (C)opyright 2002 Frank Vercruesse
|
||||
|
||||
|
||||
prog="`dirname \"$0\"`/_`basename \"$0\"`"
|
||||
sudo "$prog" "${USER?'USER not set.'}" "$@"
|
@@ -1,8 +0,0 @@
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# build binary package and put it on a disk image
|
||||
#
|
||||
|
||||
|
||||
prog="`dirname \"$0\"`/_`basename \"$0\"`"
|
||||
sudo "$prog" "${USER?'USER not set.'}" "$@"
|
4
wxPython/distrib/mac/buildapp.py
Normal file
4
wxPython/distrib/mac/buildapp.py
Normal file
@@ -0,0 +1,4 @@
|
||||
# Just a simple shell around bundlebuilder.
|
||||
|
||||
from bundlebuilder import buildapp
|
||||
buildapp()
|
470
wxPython/distrib/mac/buildpkg.py
Normal file
470
wxPython/distrib/mac/buildpkg.py
Normal file
@@ -0,0 +1,470 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""buildpkg.py -- Build OS X packages for Apple's Installer.app.
|
||||
|
||||
This is an experimental command-line tool for building packages to be
|
||||
installed with the Mac OS X Installer.app application.
|
||||
|
||||
It is much inspired by Apple's GUI tool called PackageMaker.app, that
|
||||
seems to be part of the OS X developer tools installed in the folder
|
||||
/Developer/Applications. But apparently there are other free tools to
|
||||
do the same thing which are also named PackageMaker like Brian Hill's
|
||||
one:
|
||||
|
||||
http://personalpages.tds.net/~brian_hill/packagemaker.html
|
||||
|
||||
Beware of the multi-package features of Installer.app (which are not
|
||||
yet supported here) that can potentially screw-up your installation
|
||||
and are discussed in these articles on Stepwise:
|
||||
|
||||
http://www.stepwise.com/Articles/Technical/Packages/InstallerWoes.html
|
||||
http://www.stepwise.com/Articles/Technical/Packages/InstallerOnX.html
|
||||
|
||||
Beside using the PackageMaker class directly, by importing it inside
|
||||
another module, say, there are additional ways of using this module:
|
||||
the top-level buildPackage() function provides a shortcut to the same
|
||||
feature and is also called when using this module from the command-
|
||||
line.
|
||||
|
||||
****************************************************************
|
||||
NOTE: For now you should be able to run this even on a non-OS X
|
||||
system and get something similar to a package, but without
|
||||
the real archive (needs pax) and bom files (needs mkbom)
|
||||
inside! This is only for providing a chance for testing to
|
||||
folks without OS X.
|
||||
****************************************************************
|
||||
|
||||
TODO:
|
||||
- test pre-process and post-process scripts (Python ones?)
|
||||
- handle multi-volume packages (?)
|
||||
- integrate into distutils (?)
|
||||
|
||||
Dinu C. Gherman,
|
||||
gherman@europemail.com
|
||||
November 2001
|
||||
|
||||
!! USE AT YOUR OWN RISK !!
|
||||
"""
|
||||
|
||||
__version__ = 0.2
|
||||
__license__ = "FreeBSD"
|
||||
|
||||
|
||||
import os, sys, glob, fnmatch, shutil, string, copy, getopt
|
||||
from os.path import basename, dirname, join, islink, isdir, isfile
|
||||
|
||||
Error = "buildpkg.Error"
|
||||
|
||||
PKG_INFO_FIELDS = """\
|
||||
Title
|
||||
Version
|
||||
Description
|
||||
DefaultLocation
|
||||
Diskname
|
||||
DeleteWarning
|
||||
NeedsAuthorization
|
||||
DisableStop
|
||||
UseUserMask
|
||||
Application
|
||||
Relocatable
|
||||
Required
|
||||
InstallOnly
|
||||
RequiresReboot
|
||||
RootVolumeOnly
|
||||
InstallFat\
|
||||
"""
|
||||
|
||||
######################################################################
|
||||
# Helpers
|
||||
######################################################################
|
||||
|
||||
# Convenience class, as suggested by /F.
|
||||
|
||||
class GlobDirectoryWalker:
|
||||
"A forward iterator that traverses files in a directory tree."
|
||||
|
||||
def __init__(self, directory, pattern="*"):
|
||||
self.stack = [directory]
|
||||
self.pattern = pattern
|
||||
self.files = []
|
||||
self.index = 0
|
||||
|
||||
|
||||
def __getitem__(self, index):
|
||||
while 1:
|
||||
try:
|
||||
file = self.files[self.index]
|
||||
self.index = self.index + 1
|
||||
except IndexError:
|
||||
# pop next directory from stack
|
||||
self.directory = self.stack.pop()
|
||||
self.files = os.listdir(self.directory)
|
||||
self.index = 0
|
||||
else:
|
||||
# got a filename
|
||||
fullname = join(self.directory, file)
|
||||
if isdir(fullname) and not islink(fullname):
|
||||
self.stack.append(fullname)
|
||||
if fnmatch.fnmatch(file, self.pattern):
|
||||
return fullname
|
||||
|
||||
|
||||
######################################################################
|
||||
# The real thing
|
||||
######################################################################
|
||||
|
||||
class PackageMaker:
|
||||
"""A class to generate packages for Mac OS X.
|
||||
|
||||
This is intended to create OS X packages (with extension .pkg)
|
||||
containing archives of arbitrary files that the Installer.app
|
||||
will be able to handle.
|
||||
|
||||
As of now, PackageMaker instances need to be created with the
|
||||
title, version and description of the package to be built.
|
||||
The package is built after calling the instance method
|
||||
build(root, **options). It has the same name as the constructor's
|
||||
title argument plus a '.pkg' extension and is located in the same
|
||||
parent folder that contains the root folder.
|
||||
|
||||
E.g. this will create a package folder /my/space/distutils.pkg/:
|
||||
|
||||
pm = PackageMaker("distutils", "1.0.2", "Python distutils.")
|
||||
pm.build("/my/space/distutils")
|
||||
"""
|
||||
|
||||
packageInfoDefaults = {
|
||||
'Title': None,
|
||||
'Version': None,
|
||||
'Description': '',
|
||||
'DefaultLocation': '/',
|
||||
'Diskname': '(null)',
|
||||
'DeleteWarning': '',
|
||||
'NeedsAuthorization': 'NO',
|
||||
'DisableStop': 'NO',
|
||||
'UseUserMask': 'YES',
|
||||
'Application': 'NO',
|
||||
'Relocatable': 'YES',
|
||||
'Required': 'NO',
|
||||
'InstallOnly': 'NO',
|
||||
'RequiresReboot': 'NO',
|
||||
'RootVolumeOnly' : 'NO',
|
||||
'InstallFat': 'NO'}
|
||||
|
||||
|
||||
def __init__(self, title, version, desc):
|
||||
"Init. with mandatory title/version/description arguments."
|
||||
|
||||
info = {"Title": title, "Version": version, "Description": desc}
|
||||
self.packageInfo = copy.deepcopy(self.packageInfoDefaults)
|
||||
self.packageInfo.update(info)
|
||||
|
||||
# variables set later
|
||||
self.packageRootFolder = None
|
||||
self.packageResourceFolder = None
|
||||
self.sourceFolder = None
|
||||
self.resourceFolder = None
|
||||
|
||||
|
||||
def build(self, root, resources=None, **options):
|
||||
"""Create a package for some given root folder.
|
||||
|
||||
With no 'resources' argument set it is assumed to be the same
|
||||
as the root directory. Option items replace the default ones
|
||||
in the package info.
|
||||
"""
|
||||
|
||||
# set folder attributes
|
||||
self.sourceFolder = root
|
||||
if resources == None:
|
||||
self.resourceFolder = root
|
||||
else:
|
||||
self.resourceFolder = resources
|
||||
|
||||
# replace default option settings with user ones if provided
|
||||
fields = self. packageInfoDefaults.keys()
|
||||
for k, v in options.items():
|
||||
if k in fields:
|
||||
self.packageInfo[k] = v
|
||||
elif not k in ["OutputDir"]:
|
||||
raise Error, "Unknown package option: %s" % k
|
||||
|
||||
# Check where we should leave the output. Default is current directory
|
||||
outputdir = options.get("OutputDir", os.getcwd())
|
||||
packageName = self.packageInfo["Title"]
|
||||
self.PackageRootFolder = os.path.join(outputdir, packageName + ".pkg")
|
||||
|
||||
# do what needs to be done
|
||||
self._makeFolders()
|
||||
self._addInfo()
|
||||
self._addBom()
|
||||
self._addArchive()
|
||||
self._addResources()
|
||||
self._addSizes()
|
||||
|
||||
|
||||
def _makeFolders(self):
|
||||
"Create package folder structure."
|
||||
|
||||
# Not sure if the package name should contain the version or not...
|
||||
# packageName = "%s-%s" % (self.packageInfo["Title"],
|
||||
# self.packageInfo["Version"]) # ??
|
||||
|
||||
contFolder = join(self.PackageRootFolder, "Contents")
|
||||
self.packageResourceFolder = join(contFolder, "Resources")
|
||||
os.mkdir(self.PackageRootFolder)
|
||||
os.mkdir(contFolder)
|
||||
os.mkdir(self.packageResourceFolder)
|
||||
|
||||
def _addInfo(self):
|
||||
"Write .info file containing installing options."
|
||||
|
||||
# Not sure if options in PKG_INFO_FIELDS are complete...
|
||||
|
||||
info = ""
|
||||
for f in string.split(PKG_INFO_FIELDS, "\n"):
|
||||
info = info + "%s %%(%s)s\n" % (f, f)
|
||||
info = info % self.packageInfo
|
||||
base = self.packageInfo["Title"] + ".info"
|
||||
path = join(self.packageResourceFolder, base)
|
||||
f = open(path, "w")
|
||||
f.write(info)
|
||||
|
||||
|
||||
def _addBom(self):
|
||||
"Write .bom file containing 'Bill of Materials'."
|
||||
|
||||
# Currently ignores if the 'mkbom' tool is not available.
|
||||
|
||||
try:
|
||||
base = self.packageInfo["Title"] + ".bom"
|
||||
bomPath = join(self.packageResourceFolder, base)
|
||||
cmd = "mkbom %s %s" % (self.sourceFolder, bomPath)
|
||||
res = os.system(cmd)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
def _addArchive(self):
|
||||
"Write .pax.gz file, a compressed archive using pax/gzip."
|
||||
|
||||
# Currently ignores if the 'pax' tool is not available.
|
||||
|
||||
cwd = os.getcwd()
|
||||
|
||||
# create archive
|
||||
os.chdir(self.sourceFolder)
|
||||
base = basename(self.packageInfo["Title"]) + ".pax"
|
||||
self.archPath = join(self.packageResourceFolder, base)
|
||||
cmd = "pax -w -f %s %s" % (self.archPath, ".")
|
||||
res = os.system(cmd)
|
||||
|
||||
# compress archive
|
||||
cmd = "gzip %s" % self.archPath
|
||||
res = os.system(cmd)
|
||||
os.chdir(cwd)
|
||||
|
||||
|
||||
def _addResources(self):
|
||||
"Add Welcome/ReadMe/License files, .lproj folders and scripts."
|
||||
|
||||
# Currently we just copy everything that matches the allowed
|
||||
# filenames. So, it's left to Installer.app to deal with the
|
||||
# same file available in multiple formats...
|
||||
|
||||
if not self.resourceFolder:
|
||||
return
|
||||
|
||||
# find candidate resource files (txt html rtf rtfd/ or lproj/)
|
||||
allFiles = []
|
||||
for pat in string.split("*.txt *.html *.rtf *.rtfd *.lproj", " "):
|
||||
pattern = join(self.resourceFolder, pat)
|
||||
allFiles = allFiles + glob.glob(pattern)
|
||||
|
||||
# find pre-process and post-process scripts
|
||||
# naming convention: packageName.{pre,post}_{upgrade,install}
|
||||
# Alternatively the filenames can be {pre,post}_{upgrade,install}
|
||||
# in which case we prepend the package name
|
||||
packageName = self.packageInfo["Title"]
|
||||
for pat in ("*upgrade", "*install", "*flight"):
|
||||
pattern = join(self.resourceFolder, packageName + pat)
|
||||
pattern2 = join(self.resourceFolder, pat)
|
||||
allFiles = allFiles + glob.glob(pattern)
|
||||
allFiles = allFiles + glob.glob(pattern2)
|
||||
|
||||
# check name patterns
|
||||
files = []
|
||||
for f in allFiles:
|
||||
for s in ("Welcome", "License", "ReadMe"):
|
||||
if string.find(basename(f), s) == 0:
|
||||
files.append((f, f))
|
||||
if f[-6:] == ".lproj":
|
||||
files.append((f, f))
|
||||
elif basename(f) in ["pre_upgrade", "pre_install", "post_upgrade", "post_install"]:
|
||||
files.append((f, packageName+"."+basename(f)))
|
||||
elif basename(f) in ["preflight", "postflight"]:
|
||||
files.append((f, f))
|
||||
elif f[-8:] == "_upgrade":
|
||||
files.append((f,f))
|
||||
elif f[-8:] == "_install":
|
||||
files.append((f,f))
|
||||
|
||||
# copy files
|
||||
for src, dst in files:
|
||||
src = basename(src)
|
||||
dst = basename(dst)
|
||||
f = join(self.resourceFolder, src)
|
||||
if isfile(f):
|
||||
shutil.copy(f, os.path.join(self.packageResourceFolder, dst))
|
||||
elif isdir(f):
|
||||
# special case for .rtfd and .lproj folders...
|
||||
d = join(self.packageResourceFolder, dst)
|
||||
os.mkdir(d)
|
||||
files = GlobDirectoryWalker(f)
|
||||
for file in files:
|
||||
shutil.copy(file, d)
|
||||
|
||||
|
||||
def _addSizes(self):
|
||||
"Write .sizes file with info about number and size of files."
|
||||
|
||||
# Not sure if this is correct, but 'installedSize' and
|
||||
# 'zippedSize' are now in Bytes. Maybe blocks are needed?
|
||||
# Well, Installer.app doesn't seem to care anyway, saying
|
||||
# the installation needs 100+ MB...
|
||||
|
||||
numFiles = 0
|
||||
installedSize = 0
|
||||
zippedSize = 0
|
||||
|
||||
files = GlobDirectoryWalker(self.sourceFolder)
|
||||
for f in files:
|
||||
numFiles = numFiles + 1
|
||||
installedSize = installedSize + os.lstat(f)[6]
|
||||
|
||||
try:
|
||||
zippedSize = os.stat(self.archPath+ ".gz")[6]
|
||||
except OSError: # ignore error
|
||||
pass
|
||||
base = self.packageInfo["Title"] + ".sizes"
|
||||
f = open(join(self.packageResourceFolder, base), "w")
|
||||
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
|
||||
f.write(format % (numFiles, installedSize, zippedSize))
|
||||
|
||||
|
||||
# Shortcut function interface
|
||||
|
||||
def buildPackage(*args, **options):
|
||||
"A Shortcut function for building a package."
|
||||
|
||||
o = options
|
||||
title, version, desc = o["Title"], o["Version"], o["Description"]
|
||||
pm = PackageMaker(title, version, desc)
|
||||
apply(pm.build, list(args), options)
|
||||
|
||||
|
||||
######################################################################
|
||||
# Tests
|
||||
######################################################################
|
||||
|
||||
def test0():
|
||||
"Vanilla test for the distutils distribution."
|
||||
|
||||
pm = PackageMaker("distutils2", "1.0.2", "Python distutils package.")
|
||||
pm.build("/Users/dinu/Desktop/distutils2")
|
||||
|
||||
|
||||
def test1():
|
||||
"Test for the reportlab distribution with modified options."
|
||||
|
||||
pm = PackageMaker("reportlab", "1.10",
|
||||
"ReportLab's Open Source PDF toolkit.")
|
||||
pm.build(root="/Users/dinu/Desktop/reportlab",
|
||||
DefaultLocation="/Applications/ReportLab",
|
||||
Relocatable="YES")
|
||||
|
||||
def test2():
|
||||
"Shortcut test for the reportlab distribution with modified options."
|
||||
|
||||
buildPackage(
|
||||
"/Users/dinu/Desktop/reportlab",
|
||||
Title="reportlab",
|
||||
Version="1.10",
|
||||
Description="ReportLab's Open Source PDF toolkit.",
|
||||
DefaultLocation="/Applications/ReportLab",
|
||||
Relocatable="YES")
|
||||
|
||||
|
||||
######################################################################
|
||||
# Command-line interface
|
||||
######################################################################
|
||||
|
||||
def printUsage():
|
||||
"Print usage message."
|
||||
|
||||
format = "Usage: %s <opts1> [<opts2>] <root> [<resources>]"
|
||||
print format % basename(sys.argv[0])
|
||||
print
|
||||
print " with arguments:"
|
||||
print " (mandatory) root: the package root folder"
|
||||
print " (optional) resources: the package resources folder"
|
||||
print
|
||||
print " and options:"
|
||||
print " (mandatory) opts1:"
|
||||
mandatoryKeys = string.split("Title Version Description", " ")
|
||||
for k in mandatoryKeys:
|
||||
print " --%s" % k
|
||||
print " (optional) opts2: (with default values)"
|
||||
|
||||
pmDefaults = PackageMaker.packageInfoDefaults
|
||||
optionalKeys = pmDefaults.keys()
|
||||
for k in mandatoryKeys:
|
||||
optionalKeys.remove(k)
|
||||
optionalKeys.sort()
|
||||
maxKeyLen = max(map(len, optionalKeys))
|
||||
for k in optionalKeys:
|
||||
format = " --%%s:%s %%s"
|
||||
format = format % (" " * (maxKeyLen-len(k)))
|
||||
print format % (k, repr(pmDefaults[k]))
|
||||
|
||||
|
||||
def main():
|
||||
"Command-line interface."
|
||||
|
||||
shortOpts = ""
|
||||
keys = PackageMaker.packageInfoDefaults.keys()
|
||||
longOpts = map(lambda k: k+"=", keys)
|
||||
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], shortOpts, longOpts)
|
||||
except getopt.GetoptError, details:
|
||||
print details
|
||||
printUsage()
|
||||
return
|
||||
|
||||
optsDict = {}
|
||||
for k, v in opts:
|
||||
optsDict[k[2:]] = v
|
||||
|
||||
ok = optsDict.keys()
|
||||
if not (1 <= len(args) <= 2):
|
||||
print "No argument given!"
|
||||
elif not ("Title" in ok and \
|
||||
"Version" in ok and \
|
||||
"Description" in ok):
|
||||
print "Missing mandatory option!"
|
||||
else:
|
||||
apply(buildPackage, args, optsDict)
|
||||
return
|
||||
|
||||
printUsage()
|
||||
|
||||
# sample use:
|
||||
# buildpkg.py --Title=distutils \
|
||||
# --Version=1.0.2 \
|
||||
# --Description="Python distutils package." \
|
||||
# /Users/dinu/Desktop/distutils
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
816
wxPython/distrib/mac/bundlebuilder.py
Normal file
816
wxPython/distrib/mac/bundlebuilder.py
Normal file
@@ -0,0 +1,816 @@
|
||||
#! /usr/bin/env python
|
||||
|
||||
"""\
|
||||
bundlebuilder.py -- Tools to assemble MacOS X (application) bundles.
|
||||
|
||||
This module contains two classes to build so called "bundles" for
|
||||
MacOS X. BundleBuilder is a general tool, AppBuilder is a subclass
|
||||
specialized in building application bundles.
|
||||
|
||||
[Bundle|App]Builder objects are instantiated with a bunch of keyword
|
||||
arguments, and have a build() method that will do all the work. See
|
||||
the class doc strings for a description of the constructor arguments.
|
||||
|
||||
The module contains a main program that can be used in two ways:
|
||||
|
||||
% python bundlebuilder.py [options] build
|
||||
% python buildapp.py [options] build
|
||||
|
||||
Where "buildapp.py" is a user-supplied setup.py-like script following
|
||||
this model:
|
||||
|
||||
from bundlebuilder import buildapp
|
||||
buildapp(<lots-of-keyword-args>)
|
||||
|
||||
"""
|
||||
|
||||
|
||||
__all__ = ["BundleBuilder", "BundleBuilderError", "AppBuilder", "buildapp"]
|
||||
|
||||
|
||||
import sys
|
||||
import os, errno, shutil
|
||||
import imp, marshal
|
||||
import re
|
||||
from copy import deepcopy
|
||||
import getopt
|
||||
from plistlib import Plist
|
||||
from types import FunctionType as function
|
||||
|
||||
class BundleBuilderError(Exception): pass
|
||||
|
||||
|
||||
class Defaults:
|
||||
|
||||
"""Class attributes that don't start with an underscore and are
|
||||
not functions or classmethods are (deep)copied to self.__dict__.
|
||||
This allows for mutable default values.
|
||||
"""
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
defaults = self._getDefaults()
|
||||
defaults.update(kwargs)
|
||||
self.__dict__.update(defaults)
|
||||
|
||||
def _getDefaults(cls):
|
||||
defaults = {}
|
||||
for name, value in cls.__dict__.items():
|
||||
if name[0] != "_" and not isinstance(value,
|
||||
(function, classmethod)):
|
||||
defaults[name] = deepcopy(value)
|
||||
for base in cls.__bases__:
|
||||
if hasattr(base, "_getDefaults"):
|
||||
defaults.update(base._getDefaults())
|
||||
return defaults
|
||||
_getDefaults = classmethod(_getDefaults)
|
||||
|
||||
|
||||
class BundleBuilder(Defaults):
|
||||
|
||||
"""BundleBuilder is a barebones class for assembling bundles. It
|
||||
knows nothing about executables or icons, it only copies files
|
||||
and creates the PkgInfo and Info.plist files.
|
||||
"""
|
||||
|
||||
# (Note that Defaults.__init__ (deep)copies these values to
|
||||
# instance variables. Mutable defaults are therefore safe.)
|
||||
|
||||
# Name of the bundle, with or without extension.
|
||||
name = None
|
||||
|
||||
# The property list ("plist")
|
||||
plist = Plist(CFBundleDevelopmentRegion = "English",
|
||||
CFBundleInfoDictionaryVersion = "6.0")
|
||||
|
||||
# The type of the bundle.
|
||||
type = "BNDL"
|
||||
# The creator code of the bundle.
|
||||
creator = None
|
||||
|
||||
# List of files that have to be copied to <bundle>/Contents/Resources.
|
||||
resources = []
|
||||
|
||||
# List of (src, dest) tuples; dest should be a path relative to the bundle
|
||||
# (eg. "Contents/Resources/MyStuff/SomeFile.ext).
|
||||
files = []
|
||||
|
||||
# List of shared libraries (dylibs, Frameworks) to bundle with the app
|
||||
# will be placed in Contents/Frameworks
|
||||
libs = []
|
||||
|
||||
# Directory where the bundle will be assembled.
|
||||
builddir = "build"
|
||||
|
||||
# Make symlinks instead copying files. This is handy during debugging, but
|
||||
# makes the bundle non-distributable.
|
||||
symlink = 0
|
||||
|
||||
# Verbosity level.
|
||||
verbosity = 1
|
||||
|
||||
def setup(self):
|
||||
# XXX rethink self.name munging, this is brittle.
|
||||
self.name, ext = os.path.splitext(self.name)
|
||||
if not ext:
|
||||
ext = ".bundle"
|
||||
bundleextension = ext
|
||||
# misc (derived) attributes
|
||||
self.bundlepath = pathjoin(self.builddir, self.name + bundleextension)
|
||||
|
||||
plist = self.plist
|
||||
plist.CFBundleName = self.name
|
||||
plist.CFBundlePackageType = self.type
|
||||
if self.creator is None:
|
||||
if hasattr(plist, "CFBundleSignature"):
|
||||
self.creator = plist.CFBundleSignature
|
||||
else:
|
||||
self.creator = "????"
|
||||
plist.CFBundleSignature = self.creator
|
||||
if not hasattr(plist, "CFBundleIdentifier"):
|
||||
plist.CFBundleIdentifier = self.name
|
||||
|
||||
def build(self):
|
||||
"""Build the bundle."""
|
||||
builddir = self.builddir
|
||||
if builddir and not os.path.exists(builddir):
|
||||
os.mkdir(builddir)
|
||||
self.message("Building %s" % repr(self.bundlepath), 1)
|
||||
if os.path.exists(self.bundlepath):
|
||||
shutil.rmtree(self.bundlepath)
|
||||
os.mkdir(self.bundlepath)
|
||||
self.preProcess()
|
||||
self._copyFiles()
|
||||
self._addMetaFiles()
|
||||
self.postProcess()
|
||||
self.message("Done.", 1)
|
||||
|
||||
def preProcess(self):
|
||||
"""Hook for subclasses."""
|
||||
pass
|
||||
def postProcess(self):
|
||||
"""Hook for subclasses."""
|
||||
pass
|
||||
|
||||
def _addMetaFiles(self):
|
||||
contents = pathjoin(self.bundlepath, "Contents")
|
||||
makedirs(contents)
|
||||
#
|
||||
# Write Contents/PkgInfo
|
||||
assert len(self.type) == len(self.creator) == 4, \
|
||||
"type and creator must be 4-byte strings."
|
||||
pkginfo = pathjoin(contents, "PkgInfo")
|
||||
f = open(pkginfo, "wb")
|
||||
f.write(self.type + self.creator)
|
||||
f.close()
|
||||
#
|
||||
# Write Contents/Info.plist
|
||||
infoplist = pathjoin(contents, "Info.plist")
|
||||
self.plist.write(infoplist)
|
||||
|
||||
def _copyFiles(self):
|
||||
files = self.files[:]
|
||||
for path in self.resources:
|
||||
files.append((path, pathjoin("Contents", "Resources",
|
||||
os.path.basename(path))))
|
||||
for path in self.libs:
|
||||
files.append((path, pathjoin("Contents", "Frameworks",
|
||||
os.path.basename(path))))
|
||||
if self.symlink:
|
||||
self.message("Making symbolic links", 1)
|
||||
msg = "Making symlink from"
|
||||
else:
|
||||
self.message("Copying files", 1)
|
||||
msg = "Copying"
|
||||
files.sort()
|
||||
for src, dst in files:
|
||||
if os.path.isdir(src):
|
||||
self.message("%s %s/ to %s/" % (msg, src, dst), 2)
|
||||
else:
|
||||
self.message("%s %s to %s" % (msg, src, dst), 2)
|
||||
dst = pathjoin(self.bundlepath, dst)
|
||||
if self.symlink:
|
||||
symlink(src, dst, mkdirs=1)
|
||||
else:
|
||||
copy(src, dst, mkdirs=1)
|
||||
|
||||
def message(self, msg, level=0):
|
||||
if level <= self.verbosity:
|
||||
indent = ""
|
||||
if level > 1:
|
||||
indent = (level - 1) * " "
|
||||
sys.stderr.write(indent + msg + "\n")
|
||||
|
||||
def report(self):
|
||||
# XXX something decent
|
||||
pass
|
||||
|
||||
|
||||
if __debug__:
|
||||
PYC_EXT = ".pyc"
|
||||
else:
|
||||
PYC_EXT = ".pyo"
|
||||
|
||||
MAGIC = imp.get_magic()
|
||||
USE_ZIPIMPORT = "zipimport" in sys.builtin_module_names
|
||||
|
||||
# For standalone apps, we have our own minimal site.py. We don't need
|
||||
# all the cruft of the real site.py.
|
||||
SITE_PY = """\
|
||||
import sys
|
||||
del sys.path[1:] # sys.path[0] is Contents/Resources/
|
||||
"""
|
||||
|
||||
if USE_ZIPIMPORT:
|
||||
ZIP_ARCHIVE = "Modules.zip"
|
||||
SITE_PY += "sys.path.append(sys.path[0] + '/%s')\n" % ZIP_ARCHIVE
|
||||
def getPycData(fullname, code, ispkg):
|
||||
if ispkg:
|
||||
fullname += ".__init__"
|
||||
path = fullname.replace(".", os.sep) + PYC_EXT
|
||||
return path, MAGIC + '\0\0\0\0' + marshal.dumps(code)
|
||||
|
||||
SITE_CO = compile(SITE_PY, "<-bundlebuilder.py->", "exec")
|
||||
|
||||
#
|
||||
# Extension modules can't be in the modules zip archive, so a placeholder
|
||||
# is added instead, that loads the extension from a specified location.
|
||||
#
|
||||
EXT_LOADER = """\
|
||||
def __load():
|
||||
import imp, sys, os
|
||||
for p in sys.path:
|
||||
path = os.path.join(p, "%(filename)s")
|
||||
if os.path.exists(path):
|
||||
break
|
||||
else:
|
||||
assert 0, "file not found: %(filename)s"
|
||||
mod = imp.load_dynamic("%(name)s", path)
|
||||
|
||||
__load()
|
||||
del __load
|
||||
"""
|
||||
|
||||
MAYMISS_MODULES = ['mac', 'os2', 'nt', 'ntpath', 'dos', 'dospath',
|
||||
'win32api', 'ce', '_winreg', 'nturl2path', 'sitecustomize',
|
||||
'org.python.core', 'riscos', 'riscosenviron', 'riscospath'
|
||||
]
|
||||
|
||||
STRIP_EXEC = "/usr/bin/strip"
|
||||
|
||||
#
|
||||
# We're using a stock interpreter to run the app, yet we need
|
||||
# a way to pass the Python main program to the interpreter. The
|
||||
# bootstrapping script fires up the interpreter with the right
|
||||
# arguments. os.execve() is used as OSX doesn't like us to
|
||||
# start a real new process. Also, the executable name must match
|
||||
# the CFBundleExecutable value in the Info.plist, so we lie
|
||||
# deliberately with argv[0]. The actual Python executable is
|
||||
# passed in an environment variable so we can "repair"
|
||||
# sys.executable later.
|
||||
#
|
||||
BOOTSTRAP_SCRIPT = """\
|
||||
#!%(hashbang)s
|
||||
|
||||
import sys, os
|
||||
execdir = os.path.dirname(sys.argv[0])
|
||||
executable = os.path.join(execdir, "%(executable)s")
|
||||
resdir = os.path.join(os.path.dirname(execdir), "Resources")
|
||||
libdir = os.path.join(os.path.dirname(execdir), "Frameworks")
|
||||
mainprogram = os.path.join(resdir, "%(mainprogram)s")
|
||||
|
||||
sys.argv.insert(1, mainprogram)
|
||||
os.environ["PYTHONPATH"] = resdir
|
||||
%(pythonhome)s
|
||||
os.environ["PYTHONEXECUTABLE"] = executable
|
||||
os.environ["DYLD_LIBRARY_PATH"] = libdir
|
||||
os.execve(executable, sys.argv, os.environ)
|
||||
"""
|
||||
|
||||
|
||||
#
|
||||
# Optional wrapper that converts "dropped files" into sys.argv values.
|
||||
#
|
||||
ARGV_EMULATOR = """\
|
||||
import argvemulator, os
|
||||
|
||||
argvemulator.ArgvCollector().mainloop()
|
||||
execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s"))
|
||||
"""
|
||||
|
||||
|
||||
class AppBuilder(BundleBuilder):
|
||||
|
||||
# Override type of the bundle.
|
||||
type = "APPL"
|
||||
|
||||
# platform, name of the subfolder of Contents that contains the executable.
|
||||
platform = "MacOS"
|
||||
|
||||
# A Python main program. If this argument is given, the main
|
||||
# executable in the bundle will be a small wrapper that invokes
|
||||
# the main program. (XXX Discuss why.)
|
||||
mainprogram = None
|
||||
|
||||
# The main executable. If a Python main program is specified
|
||||
# the executable will be copied to Resources and be invoked
|
||||
# by the wrapper program mentioned above. Otherwise it will
|
||||
# simply be used as the main executable.
|
||||
executable = None
|
||||
|
||||
# The name of the main nib, for Cocoa apps. *Must* be specified
|
||||
# when building a Cocoa app.
|
||||
nibname = None
|
||||
|
||||
# The name of the icon file to be copied to Resources and used for
|
||||
# the Finder icon.
|
||||
iconfile = None
|
||||
|
||||
# Symlink the executable instead of copying it.
|
||||
symlink_exec = 0
|
||||
|
||||
# If True, build standalone app.
|
||||
standalone = 0
|
||||
|
||||
# If True, add a real main program that emulates sys.argv before calling
|
||||
# mainprogram
|
||||
argv_emulation = 0
|
||||
|
||||
# The following attributes are only used when building a standalone app.
|
||||
|
||||
# Exclude these modules.
|
||||
excludeModules = []
|
||||
|
||||
# Include these modules.
|
||||
includeModules = []
|
||||
|
||||
# Include these packages.
|
||||
includePackages = []
|
||||
|
||||
# Strip binaries.
|
||||
strip = 0
|
||||
|
||||
# Found Python modules: [(name, codeobject, ispkg), ...]
|
||||
pymodules = []
|
||||
|
||||
# Modules that modulefinder couldn't find:
|
||||
missingModules = []
|
||||
maybeMissingModules = []
|
||||
|
||||
# List of all binaries (executables or shared libs), for stripping purposes
|
||||
binaries = []
|
||||
|
||||
def setup(self):
|
||||
if self.standalone and self.mainprogram is None:
|
||||
raise BundleBuilderError, ("must specify 'mainprogram' when "
|
||||
"building a standalone application.")
|
||||
if self.mainprogram is None and self.executable is None:
|
||||
raise BundleBuilderError, ("must specify either or both of "
|
||||
"'executable' and 'mainprogram'")
|
||||
|
||||
self.execdir = pathjoin("Contents", self.platform)
|
||||
|
||||
if self.name is not None:
|
||||
pass
|
||||
elif self.mainprogram is not None:
|
||||
self.name = os.path.splitext(os.path.basename(self.mainprogram))[0]
|
||||
elif executable is not None:
|
||||
self.name = os.path.splitext(os.path.basename(self.executable))[0]
|
||||
if self.name[-4:] != ".app":
|
||||
self.name += ".app"
|
||||
|
||||
if self.executable is None:
|
||||
if not self.standalone:
|
||||
self.symlink_exec = 1
|
||||
self.executable = sys.executable
|
||||
|
||||
if self.nibname:
|
||||
self.plist.NSMainNibFile = self.nibname
|
||||
if not hasattr(self.plist, "NSPrincipalClass"):
|
||||
self.plist.NSPrincipalClass = "NSApplication"
|
||||
|
||||
BundleBuilder.setup(self)
|
||||
|
||||
self.plist.CFBundleExecutable = self.name
|
||||
|
||||
if self.standalone:
|
||||
self.findDependencies()
|
||||
|
||||
def preProcess(self):
|
||||
resdir = "Contents/Resources"
|
||||
if self.executable is not None:
|
||||
if self.mainprogram is None:
|
||||
execname = self.name
|
||||
else:
|
||||
execname = os.path.basename(self.executable)
|
||||
execpath = pathjoin(self.execdir, execname)
|
||||
if not self.symlink_exec:
|
||||
self.files.append((self.executable, execpath))
|
||||
self.binaries.append(execpath)
|
||||
self.execpath = execpath
|
||||
|
||||
if self.mainprogram is not None:
|
||||
mainprogram = os.path.basename(self.mainprogram)
|
||||
self.files.append((self.mainprogram, pathjoin(resdir, mainprogram)))
|
||||
if self.argv_emulation:
|
||||
# Change the main program, and create the helper main program (which
|
||||
# does argv collection and then calls the real main).
|
||||
# Also update the included modules (if we're creating a standalone
|
||||
# program) and the plist
|
||||
realmainprogram = mainprogram
|
||||
mainprogram = '__argvemulator_' + mainprogram
|
||||
resdirpath = pathjoin(self.bundlepath, resdir)
|
||||
mainprogrampath = pathjoin(resdirpath, mainprogram)
|
||||
makedirs(resdirpath)
|
||||
open(mainprogrampath, "w").write(ARGV_EMULATOR % locals())
|
||||
if self.standalone:
|
||||
self.includeModules.append("argvemulator")
|
||||
self.includeModules.append("os")
|
||||
if not self.plist.has_key("CFBundleDocumentTypes"):
|
||||
self.plist["CFBundleDocumentTypes"] = [
|
||||
{ "CFBundleTypeOSTypes" : [
|
||||
"****",
|
||||
"fold",
|
||||
"disk"],
|
||||
"CFBundleTypeRole": "Viewer"}]
|
||||
# Write bootstrap script
|
||||
executable = os.path.basename(self.executable)
|
||||
execdir = pathjoin(self.bundlepath, self.execdir)
|
||||
bootstrappath = pathjoin(execdir, self.name)
|
||||
makedirs(execdir)
|
||||
if self.standalone:
|
||||
# XXX we're screwed when the end user has deleted
|
||||
# /usr/bin/python
|
||||
hashbang = "/usr/bin/python"
|
||||
pythonhome = 'os.environ["PYTHONHOME"] = resdir'
|
||||
else:
|
||||
hashbang = sys.executable
|
||||
while os.path.islink(hashbang):
|
||||
hashbang = os.readlink(hashbang)
|
||||
pythonhome = ''
|
||||
open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals())
|
||||
os.chmod(bootstrappath, 0775)
|
||||
|
||||
if self.iconfile is not None:
|
||||
iconbase = os.path.basename(self.iconfile)
|
||||
self.plist.CFBundleIconFile = iconbase
|
||||
self.files.append((self.iconfile, pathjoin(resdir, iconbase)))
|
||||
|
||||
def postProcess(self):
|
||||
if self.standalone:
|
||||
self.addPythonModules()
|
||||
if self.strip and not self.symlink:
|
||||
self.stripBinaries()
|
||||
|
||||
if self.symlink_exec and self.executable:
|
||||
self.message("Symlinking executable %s to %s" % (self.executable,
|
||||
self.execpath), 2)
|
||||
dst = pathjoin(self.bundlepath, self.execpath)
|
||||
makedirs(os.path.dirname(dst))
|
||||
os.symlink(os.path.abspath(self.executable), dst)
|
||||
|
||||
if self.missingModules or self.maybeMissingModules:
|
||||
self.reportMissing()
|
||||
|
||||
def addPythonModules(self):
|
||||
self.message("Adding Python modules", 1)
|
||||
|
||||
if USE_ZIPIMPORT:
|
||||
# Create a zip file containing all modules as pyc.
|
||||
import zipfile
|
||||
relpath = pathjoin("Contents", "Resources", ZIP_ARCHIVE)
|
||||
abspath = pathjoin(self.bundlepath, relpath)
|
||||
zf = zipfile.ZipFile(abspath, "w", zipfile.ZIP_DEFLATED)
|
||||
for name, code, ispkg in self.pymodules:
|
||||
self.message("Adding Python module %s" % name, 2)
|
||||
path, pyc = getPycData(name, code, ispkg)
|
||||
zf.writestr(path, pyc)
|
||||
zf.close()
|
||||
# add site.pyc
|
||||
sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
|
||||
"site" + PYC_EXT)
|
||||
writePyc(SITE_CO, sitepath)
|
||||
else:
|
||||
# Create individual .pyc files.
|
||||
for name, code, ispkg in self.pymodules:
|
||||
if ispkg:
|
||||
name += ".__init__"
|
||||
path = name.split(".")
|
||||
path = pathjoin("Contents", "Resources", *path) + PYC_EXT
|
||||
|
||||
if ispkg:
|
||||
self.message("Adding Python package %s" % path, 2)
|
||||
else:
|
||||
self.message("Adding Python module %s" % path, 2)
|
||||
|
||||
abspath = pathjoin(self.bundlepath, path)
|
||||
makedirs(os.path.dirname(abspath))
|
||||
writePyc(code, abspath)
|
||||
|
||||
def stripBinaries(self):
|
||||
if not os.path.exists(STRIP_EXEC):
|
||||
self.message("Error: can't strip binaries: no strip program at "
|
||||
"%s" % STRIP_EXEC, 0)
|
||||
else:
|
||||
self.message("Stripping binaries", 1)
|
||||
for relpath in self.binaries:
|
||||
self.message("Stripping %s" % relpath, 2)
|
||||
abspath = pathjoin(self.bundlepath, relpath)
|
||||
assert not os.path.islink(abspath)
|
||||
rv = os.system("%s -S \"%s\"" % (STRIP_EXEC, abspath))
|
||||
|
||||
def findDependencies(self):
|
||||
self.message("Finding module dependencies", 1)
|
||||
import modulefinder
|
||||
mf = modulefinder.ModuleFinder(excludes=self.excludeModules)
|
||||
if USE_ZIPIMPORT:
|
||||
# zipimport imports zlib, must add it manually
|
||||
mf.import_hook("zlib")
|
||||
# manually add our own site.py
|
||||
site = mf.add_module("site")
|
||||
site.__code__ = SITE_CO
|
||||
mf.scan_code(SITE_CO, site)
|
||||
|
||||
# warnings.py gets imported implicitly from C
|
||||
mf.import_hook("warnings")
|
||||
|
||||
includeModules = self.includeModules[:]
|
||||
for name in self.includePackages:
|
||||
includeModules.extend(findPackageContents(name).keys())
|
||||
for name in includeModules:
|
||||
try:
|
||||
mf.import_hook(name)
|
||||
except ImportError:
|
||||
self.missingModules.append(name)
|
||||
|
||||
mf.run_script(self.mainprogram)
|
||||
modules = mf.modules.items()
|
||||
modules.sort()
|
||||
for name, mod in modules:
|
||||
if mod.__file__ and mod.__code__ is None:
|
||||
# C extension
|
||||
path = mod.__file__
|
||||
filename = os.path.basename(path)
|
||||
if USE_ZIPIMPORT:
|
||||
# Python modules are stored in a Zip archive, but put
|
||||
# extensions in Contents/Resources/.a and add a tiny "loader"
|
||||
# program in the Zip archive. Due to Thomas Heller.
|
||||
dstpath = pathjoin("Contents", "Resources", filename)
|
||||
source = EXT_LOADER % {"name": name, "filename": filename}
|
||||
code = compile(source, "<dynloader for %s>" % name, "exec")
|
||||
mod.__code__ = code
|
||||
else:
|
||||
# just copy the file
|
||||
dstpath = name.split(".")[:-1] + [filename]
|
||||
dstpath = pathjoin("Contents", "Resources", *dstpath)
|
||||
self.files.append((path, dstpath))
|
||||
self.binaries.append(dstpath)
|
||||
if mod.__code__ is not None:
|
||||
ispkg = mod.__path__ is not None
|
||||
if not USE_ZIPIMPORT or name != "site":
|
||||
# Our site.py is doing the bootstrapping, so we must
|
||||
# include a real .pyc file if USE_ZIPIMPORT is True.
|
||||
self.pymodules.append((name, mod.__code__, ispkg))
|
||||
|
||||
if hasattr(mf, "any_missing_maybe"):
|
||||
missing, maybe = mf.any_missing_maybe()
|
||||
else:
|
||||
missing = mf.any_missing()
|
||||
maybe = []
|
||||
self.missingModules.extend(missing)
|
||||
self.maybeMissingModules.extend(maybe)
|
||||
|
||||
def reportMissing(self):
|
||||
missing = [name for name in self.missingModules
|
||||
if name not in MAYMISS_MODULES]
|
||||
if self.maybeMissingModules:
|
||||
maybe = self.maybeMissingModules
|
||||
else:
|
||||
maybe = [name for name in missing if "." in name]
|
||||
missing = [name for name in missing if "." not in name]
|
||||
missing.sort()
|
||||
maybe.sort()
|
||||
if maybe:
|
||||
self.message("Warning: couldn't find the following submodules:", 1)
|
||||
self.message(" (Note that these could be false alarms -- "
|
||||
"it's not always", 1)
|
||||
self.message(" possible to distinguish between \"from package "
|
||||
"import submodule\" ", 1)
|
||||
self.message(" and \"from package import name\")", 1)
|
||||
for name in maybe:
|
||||
self.message(" ? " + name, 1)
|
||||
if missing:
|
||||
self.message("Warning: couldn't find the following modules:", 1)
|
||||
for name in missing:
|
||||
self.message(" ? " + name, 1)
|
||||
|
||||
def report(self):
|
||||
# XXX something decent
|
||||
import pprint
|
||||
pprint.pprint(self.__dict__)
|
||||
if self.standalone:
|
||||
self.reportMissing()
|
||||
|
||||
#
|
||||
# Utilities.
|
||||
#
|
||||
|
||||
SUFFIXES = [_suf for _suf, _mode, _tp in imp.get_suffixes()]
|
||||
identifierRE = re.compile(r"[_a-zA-z][_a-zA-Z0-9]*$")
|
||||
|
||||
def findPackageContents(name, searchpath=None):
|
||||
head = name.split(".")[-1]
|
||||
if identifierRE.match(head) is None:
|
||||
return {}
|
||||
try:
|
||||
fp, path, (ext, mode, tp) = imp.find_module(head, searchpath)
|
||||
except ImportError:
|
||||
return {}
|
||||
modules = {name: None}
|
||||
if tp == imp.PKG_DIRECTORY and path:
|
||||
files = os.listdir(path)
|
||||
for sub in files:
|
||||
sub, ext = os.path.splitext(sub)
|
||||
fullname = name + "." + sub
|
||||
if sub != "__init__" and fullname not in modules:
|
||||
modules.update(findPackageContents(fullname, [path]))
|
||||
return modules
|
||||
|
||||
def writePyc(code, path):
|
||||
f = open(path, "wb")
|
||||
f.write(MAGIC)
|
||||
f.write("\0" * 4) # don't bother about a time stamp
|
||||
marshal.dump(code, f)
|
||||
f.close()
|
||||
|
||||
def copy(src, dst, mkdirs=0):
|
||||
"""Copy a file or a directory."""
|
||||
if mkdirs:
|
||||
makedirs(os.path.dirname(dst))
|
||||
if os.path.isdir(src):
|
||||
shutil.copytree(src, dst)
|
||||
else:
|
||||
shutil.copy2(src, dst)
|
||||
|
||||
def copytodir(src, dstdir):
|
||||
"""Copy a file or a directory to an existing directory."""
|
||||
dst = pathjoin(dstdir, os.path.basename(src))
|
||||
copy(src, dst)
|
||||
|
||||
def makedirs(dir):
|
||||
"""Make all directories leading up to 'dir' including the leaf
|
||||
directory. Don't moan if any path element already exists."""
|
||||
try:
|
||||
os.makedirs(dir)
|
||||
except OSError, why:
|
||||
if why.errno != errno.EEXIST:
|
||||
raise
|
||||
|
||||
def symlink(src, dst, mkdirs=0):
|
||||
"""Copy a file or a directory."""
|
||||
if not os.path.exists(src):
|
||||
raise IOError, "No such file or directory: '%s'" % src
|
||||
if mkdirs:
|
||||
makedirs(os.path.dirname(dst))
|
||||
os.symlink(os.path.abspath(src), dst)
|
||||
|
||||
def pathjoin(*args):
|
||||
"""Safe wrapper for os.path.join: asserts that all but the first
|
||||
argument are relative paths."""
|
||||
for seg in args[1:]:
|
||||
assert seg[0] != "/"
|
||||
return os.path.join(*args)
|
||||
|
||||
|
||||
cmdline_doc = """\
|
||||
Usage:
|
||||
python bundlebuilder.py [options] command
|
||||
python mybuildscript.py [options] command
|
||||
|
||||
Commands:
|
||||
build build the application
|
||||
report print a report
|
||||
|
||||
Options:
|
||||
-b, --builddir=DIR the build directory; defaults to "build"
|
||||
-n, --name=NAME application name
|
||||
-r, --resource=FILE extra file or folder to be copied to Resources
|
||||
-f, --file=SRC:DST extra file or folder to be copied into the bundle;
|
||||
DST must be a path relative to the bundle root
|
||||
-e, --executable=FILE the executable to be used
|
||||
-m, --mainprogram=FILE the Python main program
|
||||
-a, --argv add a wrapper main program to create sys.argv
|
||||
-p, --plist=FILE .plist file (default: generate one)
|
||||
--nib=NAME main nib name
|
||||
-c, --creator=CCCC 4-char creator code (default: '????')
|
||||
--iconfile=FILE filename of the icon (an .icns file) to be used
|
||||
as the Finder icon
|
||||
-l, --link symlink files/folder instead of copying them
|
||||
--link-exec symlink the executable instead of copying it
|
||||
--standalone build a standalone application, which is fully
|
||||
independent of a Python installation
|
||||
--lib=FILE shared library or framework to be copied into
|
||||
the bundle
|
||||
-x, --exclude=MODULE exclude module (with --standalone)
|
||||
-i, --include=MODULE include module (with --standalone)
|
||||
--package=PACKAGE include a whole package (with --standalone)
|
||||
--strip strip binaries (remove debug info)
|
||||
-v, --verbose increase verbosity level
|
||||
-q, --quiet decrease verbosity level
|
||||
-h, --help print this message
|
||||
"""
|
||||
|
||||
def usage(msg=None):
|
||||
if msg:
|
||||
print msg
|
||||
print cmdline_doc
|
||||
sys.exit(1)
|
||||
|
||||
def main(builder=None):
|
||||
if builder is None:
|
||||
builder = AppBuilder(verbosity=1)
|
||||
|
||||
shortopts = "b:n:r:f:e:m:c:p:lx:i:hvqa"
|
||||
longopts = ("builddir=", "name=", "resource=", "file=", "executable=",
|
||||
"mainprogram=", "creator=", "nib=", "plist=", "link",
|
||||
"link-exec", "help", "verbose", "quiet", "argv", "standalone",
|
||||
"exclude=", "include=", "package=", "strip", "iconfile=",
|
||||
"lib=")
|
||||
|
||||
try:
|
||||
options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
|
||||
except getopt.error:
|
||||
usage()
|
||||
|
||||
for opt, arg in options:
|
||||
if opt in ('-b', '--builddir'):
|
||||
builder.builddir = arg
|
||||
elif opt in ('-n', '--name'):
|
||||
builder.name = arg
|
||||
elif opt in ('-r', '--resource'):
|
||||
builder.resources.append(arg)
|
||||
elif opt in ('-f', '--file'):
|
||||
srcdst = arg.split(':')
|
||||
if len(srcdst) != 2:
|
||||
usage("-f or --file argument must be two paths, "
|
||||
"separated by a colon")
|
||||
builder.files.append(srcdst)
|
||||
elif opt in ('-e', '--executable'):
|
||||
builder.executable = arg
|
||||
elif opt in ('-m', '--mainprogram'):
|
||||
builder.mainprogram = arg
|
||||
elif opt in ('-a', '--argv'):
|
||||
builder.argv_emulation = 1
|
||||
elif opt in ('-c', '--creator'):
|
||||
builder.creator = arg
|
||||
elif opt == '--iconfile':
|
||||
builder.iconfile = arg
|
||||
elif opt == "--lib":
|
||||
builder.libs.append(arg)
|
||||
elif opt == "--nib":
|
||||
builder.nibname = arg
|
||||
elif opt in ('-p', '--plist'):
|
||||
builder.plist = Plist.fromFile(arg)
|
||||
elif opt in ('-l', '--link'):
|
||||
builder.symlink = 1
|
||||
elif opt == '--link-exec':
|
||||
builder.symlink_exec = 1
|
||||
elif opt in ('-h', '--help'):
|
||||
usage()
|
||||
elif opt in ('-v', '--verbose'):
|
||||
builder.verbosity += 1
|
||||
elif opt in ('-q', '--quiet'):
|
||||
builder.verbosity -= 1
|
||||
elif opt == '--standalone':
|
||||
builder.standalone = 1
|
||||
elif opt in ('-x', '--exclude'):
|
||||
builder.excludeModules.append(arg)
|
||||
elif opt in ('-i', '--include'):
|
||||
builder.includeModules.append(arg)
|
||||
elif opt == '--package':
|
||||
builder.includePackages.append(arg)
|
||||
elif opt == '--strip':
|
||||
builder.strip = 1
|
||||
|
||||
if len(args) != 1:
|
||||
usage("Must specify one command ('build', 'report' or 'help')")
|
||||
command = args[0]
|
||||
|
||||
if command == "build":
|
||||
builder.setup()
|
||||
builder.build()
|
||||
elif command == "report":
|
||||
builder.setup()
|
||||
builder.report()
|
||||
elif command == "help":
|
||||
usage()
|
||||
else:
|
||||
usage("Unknown command '%s'" % command)
|
||||
|
||||
|
||||
def buildapp(**kwargs):
|
||||
builder = AppBuilder(**kwargs)
|
||||
main(builder)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
@@ -1,283 +0,0 @@
|
||||
#! /bin/csh -ef
|
||||
#
|
||||
# original script by Chris Roberts (The OS X Package Manager)
|
||||
# slightly modified by Frank Vercruesse (mainly fixed quoting issues)
|
||||
|
||||
set prog = `/usr/bin/basename $0`
|
||||
set usage = "Usage: $prog [-f] root-dir info-file [tiff-file] [-d dest-dir] [-r resource-dir] [-traditional | -gnutar]"
|
||||
set noglob
|
||||
|
||||
if (-x /usr/bin/mkbom) then
|
||||
set mkbom=/usr/bin/mkbom
|
||||
set lsbom=/usr/bin/lsbom
|
||||
else
|
||||
set mkbom=/usr/etc/mkbom
|
||||
set lsbom=/usr/etc/lsbom
|
||||
endif
|
||||
|
||||
if (-x /usr/bin/awk) then
|
||||
set awk=/usr/bin/awk
|
||||
else
|
||||
set awk=/bin/awk
|
||||
endif
|
||||
|
||||
set gnutar=/usr/bin/gnutar
|
||||
set tar=/usr/bin/tar
|
||||
set pax=/bin/pax
|
||||
|
||||
# gather parameters
|
||||
if ($#argv == 0) then
|
||||
echo $usage
|
||||
exit(1)
|
||||
endif
|
||||
|
||||
while ( $#argv > 0 )
|
||||
switch ( "$argv[1]" )
|
||||
case -d:
|
||||
if ( $?destDir ) then
|
||||
echo ${prog}: dest-dir parameter already set to ${destDir}.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else if ( $#argv < 2 ) then
|
||||
echo ${prog}: -d option requires destination directory.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set destDir = "$argv[2]"
|
||||
shift; shift
|
||||
breaksw
|
||||
endif
|
||||
case -f:
|
||||
if ( $?rootDir ) then
|
||||
echo ${prog}: root-dir parameter already set to ${rootDir}.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else if ( $#argv < 2 ) then
|
||||
echo ${prog}: -f option requires package root directory.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set rootDir = "$argv[2]"
|
||||
set fflag
|
||||
shift; shift
|
||||
breaksw
|
||||
endif
|
||||
case -r:
|
||||
if ( $?resDir ) then
|
||||
echo ${prog}: resource-dir parameter already set to ${resDir}.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else if ( $#argv < 2 ) then
|
||||
echo ${prog}: -r option requires package resource directory.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set resDir = "$argv[2]"
|
||||
shift; shift
|
||||
breaksw
|
||||
endif
|
||||
case -traditional:
|
||||
set usetar
|
||||
unset usegnutar
|
||||
unset usepax
|
||||
shift
|
||||
breaksw
|
||||
case -gnutar:
|
||||
set usegnutar
|
||||
unset usepax
|
||||
unset usetar
|
||||
shift
|
||||
breaksw
|
||||
case -B:
|
||||
# We got long file names, better use bigtar instead
|
||||
#set archiver = /NextAdmin/Installer.app/Resources/installer_bigtar
|
||||
#echo 2>&1 ${prog}: -B flag is longer relevant.
|
||||
shift
|
||||
breaksw
|
||||
case -*:
|
||||
echo ${prog}: Unknown option: $argv[1]
|
||||
echo $usage
|
||||
exit(1)
|
||||
case *.info:
|
||||
if ( $?info ) then
|
||||
echo ${prog}: info-file parameter already set to ${info}.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set info = "$argv[1]"
|
||||
shift
|
||||
breaksw
|
||||
endif
|
||||
case *.tiff:
|
||||
if ( $?tiff ) then
|
||||
echo ${prog}: tiff-file parameter already set to ${tiff}.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set tiff = "$argv[1]"
|
||||
shift
|
||||
breaksw
|
||||
endif
|
||||
default:
|
||||
if ( $?rootDir ) then
|
||||
echo ${prog}: unrecognized parameter: $argv[1]
|
||||
echo $usage
|
||||
exit(1)
|
||||
else
|
||||
set rootDir = "$argv[1]"
|
||||
shift
|
||||
breaksw
|
||||
endif
|
||||
endsw
|
||||
end
|
||||
|
||||
# check for mandatory parameters
|
||||
if ( ! $?rootDir ) then
|
||||
echo ${prog}: missing root-dir parameter.
|
||||
echo $usage
|
||||
exit(1)
|
||||
else if ( ! $?info) then
|
||||
echo ${prog}: missing info-file parameter.
|
||||
echo $usage
|
||||
exit(1)
|
||||
endif
|
||||
|
||||
# destDir gets default value if unset on command line
|
||||
if ( $?destDir ) then
|
||||
/bin/mkdir -p "$destDir"
|
||||
else
|
||||
set destDir = .
|
||||
endif
|
||||
|
||||
# derive the root name for the package from the root name of the info file
|
||||
set root = `/usr/bin/basename $info .info`
|
||||
|
||||
# create package directory
|
||||
set pkg = "${destDir}/${root}.pkg"
|
||||
echo Generating Installer package $pkg ...
|
||||
if ( -e "$pkg" ) /bin/rm -rf "$pkg"
|
||||
/bin/mkdir -p -m 755 "$pkg"
|
||||
/bin/mkdir -p -m 755 "$pkg/Contents"
|
||||
/bin/mkdir -p -m 755 "$pkg/Contents/Resources"
|
||||
/bin/mkdir -p -m 755 "$pkg/Contents/Resources/English.lproj/"
|
||||
echo -n "pmkrpkg1" >"$pkg/Contents/PkgInfo"
|
||||
chmod 755 "$pkg/Contents/PkgInfo"
|
||||
# (gnu)tar/pax and compress root directory to package archive
|
||||
echo -n " creating package archive ... "
|
||||
if ( $?fflag ) then
|
||||
set pkgTop = "${rootDir:t}"
|
||||
set parent = "${rootDir:h}"
|
||||
if ( "$parent" == "$pkgTop" ) set parent = "."
|
||||
else
|
||||
set parent = "$rootDir"
|
||||
set pkgTop = .
|
||||
endif
|
||||
if ( $?usetar ) then
|
||||
set pkgArchive = "$pkg/Contents/Resources/$root.tar.Z"
|
||||
(cd "$parent"; $tar -w "$pkgTop") | /usr/bin/tar -f -c > "$pkgArchive"
|
||||
else if ( $?usegnutar ) then
|
||||
set pkgArchive = "$pkg/Contents/Resources/$root.tar.gz"
|
||||
(cd "$parent"; $gnutar zcf "$pkgArchive" "$pkgTop")
|
||||
else
|
||||
set pkgArchive = "$pkg/Contents/Resources/$root.pax.gz"
|
||||
(cd "$parent"; $pax -w -z -x cpio "$pkgTop") > "$pkgArchive"
|
||||
endif
|
||||
/bin/chmod 755 "$pkgArchive"
|
||||
echo done.
|
||||
|
||||
# copy info file to package
|
||||
set pkgInfo = "$pkg/Contents/Resources/English.lproj/$root.info"
|
||||
echo -n " copying ${info:t} ... "
|
||||
/bin/cp $info "$pkgInfo"
|
||||
/bin/chmod 755 "$pkgInfo"
|
||||
echo done.
|
||||
|
||||
# copy tiff file to package
|
||||
if ( $?tiff ) then
|
||||
set pkgTiff = "$pkg/$root.tiff"
|
||||
echo -n " copying ${tiff:t} ... "
|
||||
/bin/cp $tiff "$pkgTiff"
|
||||
/bin/chmod 444 "$pkgTiff"
|
||||
echo done.
|
||||
endif
|
||||
|
||||
# copy resources to package
|
||||
if ( $?resDir ) then
|
||||
echo -n " copying ${resDir:t} ... "
|
||||
|
||||
# don't want to see push/pop output
|
||||
pushd "$resDir" > /dev/null
|
||||
# get lists of resources. We'll want to change
|
||||
# permissions on just these things later.
|
||||
set directoriesInResDir = `find . -type d`
|
||||
set filesInResDir = `find . -type f`
|
||||
popd > /dev/null
|
||||
|
||||
# copy the resource directory contents into the package directory
|
||||
foreach resFile (`ls "$resDir"`)
|
||||
cp -r "$resDir/$resFile" "$pkg/Contents/Resources"
|
||||
end
|
||||
|
||||
pushd "$pkg/Contents/Resources" > /dev/null
|
||||
# Change all directories to +r+x, except the package
|
||||
# directory itself
|
||||
foreach resFileItem ($directoriesInResDir)
|
||||
if ( "$resFileItem" != "." ) then
|
||||
chmod 755 $resFileItem
|
||||
endif
|
||||
end
|
||||
# change all flat files to read only
|
||||
foreach resFileItem ($filesInResDir)
|
||||
if ( "$resFileItem" != "./.DS_Store" ) then
|
||||
chmod 755 $resFileItem
|
||||
endif
|
||||
end
|
||||
popd > /dev/null
|
||||
|
||||
echo done.
|
||||
endif
|
||||
|
||||
# generate bom file
|
||||
set pkgBom = "$pkg/Contents/Resources/$root.bom"
|
||||
echo -n " generating bom file ... "
|
||||
/bin/rm -f "$pkgBom"
|
||||
if ( $?fflag ) then
|
||||
$mkbom "$parent" "$pkgBom" >& /dev/null
|
||||
else
|
||||
$mkbom "$rootDir" "$pkgBom" >& /dev/null
|
||||
endif
|
||||
/bin/chmod 444 "$pkgArchive"
|
||||
echo done.
|
||||
|
||||
# generate sizes file
|
||||
set pkgSizes = "$pkg/Contents/Resources/$root.sizes"
|
||||
echo -n " generating sizes file ... "
|
||||
|
||||
# compute number of files in package
|
||||
set numFiles = `$lsbom -s "$pkgBom" | /usr/bin/wc -l`
|
||||
|
||||
# compute package size when compressed
|
||||
@ compressedSize = `/usr/bin/du -k -s "$pkg" | $awk '{print $1}'`
|
||||
@ compressedSize += 3 # add 1KB each for sizes, location, status files
|
||||
|
||||
@ infoSize = `/bin/ls -s "$pkgInfo" | $awk '{print $1}'`
|
||||
@ bomSize = `/bin/ls -s "$pkgBom" | $awk '{print $1}'`
|
||||
if ( $?tiff ) then
|
||||
@ tiffSize = `/bin/ls -s "$pkgTiff" | $awk '{print $1}'`
|
||||
else
|
||||
@ tiffSize = 0
|
||||
endif
|
||||
|
||||
@ installedSize = `/usr/bin/du -k -s "$rootDir" | $awk '{print $1}'`
|
||||
@ installedSize += $infoSize + $bomSize + $tiffSize + 3
|
||||
|
||||
# echo size parameters to sizes file
|
||||
echo NumFiles $numFiles > "$pkgSizes"
|
||||
echo InstalledSize $installedSize >> "$pkgSizes"
|
||||
echo CompressedSize $compressedSize >> "$pkgSizes"
|
||||
echo done.
|
||||
echo " ... finished generating $pkg."
|
||||
|
||||
exit(0)
|
||||
|
||||
# end package
|
@@ -1,2 +0,0 @@
|
||||
You will be guided through the steps necessary to install wxPython 2.3.3pre (including wxMac) for MachoPython 2.2.x on Mac OS X 10.1 or later.
|
||||
|
@@ -1,11 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/sudo -u $USER /bin/rm -rf \
|
||||
$2/Library/Frameworks/Python.framework/Versions/2.2/lib/python2.2/site-packages/wxPython \
|
||||
|
||||
# $2/usr/local/bin/wx* \
|
||||
# $2/usr/local/include/wx \
|
||||
# $2/usr/local/lib/wx \
|
||||
# $2/usr/local/lib/libwx*
|
||||
|
||||
exit 0
|
@@ -1,25 +0,0 @@
|
||||
{\rtf1\mac\ansicpg10000\cocoartf100
|
||||
{\fonttbl\f0\fnil\fcharset77 Monaco;}
|
||||
{\colortbl;\red255\green255\blue255;}
|
||||
\margl1440\margr1440\vieww15640\viewh10560\viewkind0
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\fs24 \cf0 PSF LICENSE AGREEMENT FOR PYTHON 2.2.1\
|
||||
--------------------------------------\
|
||||
\
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 2.2.1 software in source or binary form and its associated documentation.\
|
||||
\
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.2.1 alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002 Python Software Foundation; All Rights Reserved" are retained in Python 2.2.1 alone or in any derivative version prepared by Licensee.\
|
||||
\
|
||||
3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.2.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.2.1.\
|
||||
\
|
||||
4. PSF is making Python 2.2.1 available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.2.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.\
|
||||
\
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.2.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.2.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.\
|
||||
\
|
||||
6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.\
|
||||
\
|
||||
7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.\
|
||||
\
|
||||
8. By copying, installing or otherwise using Python 2.2.1, Licensee agrees to be bound by the terms and conditions of this License Agreement.\
|
||||
}
|
@@ -1,91 +0,0 @@
|
||||
{\rtf1\mac\ansicpg10000\cocoartf100
|
||||
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 Monaco;
|
||||
}
|
||||
{\colortbl;\red255\green255\blue255;\red0\green0\blue255;}
|
||||
\margl1440\margr1440\vieww10820\viewh9000\viewkind0
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b\fs24 \cf0 About\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1\b0 \cf0 \
|
||||
This is a Mach-O binary package of Python 2.2.1 (a.k.a. MachoPython) for Mac OS X 10.1 or later. \
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b \cf0 What files will be installed and where?\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1\b0 \cf0 \
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f2 \cf0 /Applications\
|
||||
\
|
||||
+ Python.app
|
||||
\fs20 (a double-clickable interpreter)\
|
||||
\
|
||||
|
||||
\fs24 /Library/Frameworks\
|
||||
\
|
||||
+ Python.framework
|
||||
\fs20 (library, headers, tools, etc.)\
|
||||
\
|
||||
|
||||
\fs24 /usr/local/bin\
|
||||
\
|
||||
+ pydoc
|
||||
\fs20 (symbolic link to the pydoc script)
|
||||
\fs24 \
|
||||
+ python
|
||||
\fs20 (symbolic link to the actual binary inside the framework)\
|
||||
|
||||
\fs24 + python2.2
|
||||
\fs20 (symbolic link to the actual binary inside the framework)\
|
||||
|
||||
\fs24 + pythonw
|
||||
\fs20 (a script that can run a GUI app from the command line)\
|
||||
|
||||
\f1\fs24 \
|
||||
\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Getting started with Python
|
||||
\f1\b0 \
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f2 \cf2 http://www.python.org\cf0 \
|
||||
\cf2 \
|
||||
http://www.python.org/sigs/pythonmac-sig\cf0 \
|
||||
\cf2 \
|
||||
http://www.cwi.nl/~jack/macpython.html
|
||||
\f1 \cf0 \
|
||||
\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Credits\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1\b0 \cf0 \
|
||||
Python itself is\
|
||||
\
|
||||
Copyright (c) 2001, 2002 Python Software Foundation; All Rights Reserved\
|
||||
\
|
||||
This binary package was compiled using the build instructions from Jack Jansen and Tony Lownds as found on the net.\
|
||||
\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Disclaimer
|
||||
\f1\b0 \
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f2 \cf0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
\f1 \
|
||||
\
|
||||
\
|
||||
Packaged by Robin Dunn\
|
||||
}
|
@@ -1,2 +0,0 @@
|
||||
Mach-O Python 2.2.1 binary package for Mac OS X 10.1 or later.
|
||||
|
@@ -1,15 +0,0 @@
|
||||
Title wxPythonOSX
|
||||
Version 2.3.3
|
||||
Description wxMac and wxPython for OSX
|
||||
DefaultLocation /
|
||||
DeleteWarning
|
||||
|
||||
### Package Flags
|
||||
|
||||
NeedsAuthorization YES
|
||||
Required NO
|
||||
Relocatable NO
|
||||
RequiresReboot NO
|
||||
UseUserMask NO
|
||||
OverwritePermissions NO
|
||||
InstallFat NO
|
1
wxPython/distrib/mac/wxPythonOSX/.cvsignore
Normal file
1
wxPython/distrib/mac/wxPythonOSX/.cvsignore
Normal file
@@ -0,0 +1 @@
|
||||
.DS_Store
|
BIN
wxPython/distrib/mac/wxPythonOSX/PieShell.icns
Normal file
BIN
wxPython/distrib/mac/wxPythonOSX/PieShell.icns
Normal file
Binary file not shown.
BIN
wxPython/distrib/mac/wxPythonOSX/RunDemo.icns
Normal file
BIN
wxPython/distrib/mac/wxPythonOSX/RunDemo.icns
Normal file
Binary file not shown.
BIN
wxPython/distrib/mac/wxPythonOSX/XRCed.icns
Normal file
BIN
wxPython/distrib/mac/wxPythonOSX/XRCed.icns
Normal file
Binary file not shown.
390
wxPython/distrib/mac/wxPythonOSX/build
Executable file
390
wxPython/distrib/mac/wxPythonOSX/build
Executable file
@@ -0,0 +1,390 @@
|
||||
#!/bin/sh -e
|
||||
#----------------------------------------------------------------------
|
||||
# Build wxMac and wxPythonOSX from the tarball and then make an
|
||||
# Installer package out of it.
|
||||
|
||||
spectemplate=distrib/wxPythonFull.spec.in
|
||||
|
||||
if [ ! -d wxPython -o ! -e ${spectemplate} ]; then
|
||||
echo "Please run this script from the root wxPython directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check Parameters
|
||||
|
||||
function usage {
|
||||
echo ""
|
||||
echo "Usage: $0 wx_version py_version [command flags...]"
|
||||
echo " wx_version String to use for version in filenames, etc."
|
||||
echo " py_version String to append to python (which python version to use.)"
|
||||
echo ""
|
||||
echo "command flags:"
|
||||
echo " skiptar Don't unpack the tarball"
|
||||
echo " use_cvs Use the CVS workspace instead of a tarfile"
|
||||
echo " skipconfig Don't run configure"
|
||||
echo " skipbuild Don't build wxWindows or wxPython"
|
||||
echo " skipinstall Don't do the installation step"
|
||||
echo " skipdmg Don't make the package or diskimage"
|
||||
echo " skipclean Don't do the cleanup at the end"
|
||||
}
|
||||
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION=$1
|
||||
PYVER=$2
|
||||
shift;shift
|
||||
|
||||
|
||||
for flag in $*; do
|
||||
case ${flag} in
|
||||
skiptar) skiptar=1 ;;
|
||||
use_cvs) skiptar=1; use_cvs=1 ;;
|
||||
skipconfig) skipconfig=1; skiptar=1 ;;
|
||||
skipbuild) skipbuild=1; skipconfig=1; skiptar=1 ;;
|
||||
skipinstall) skipinstall=1 ;;
|
||||
skipdmg) skipdmg=1 ;;
|
||||
skipclean) skipclean=1 ;;
|
||||
|
||||
*) echo "Unknown flag \"${flag}\""
|
||||
usage
|
||||
exit 1
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
SRCDIR=/Volumes/Gate.Stuff/Development/wxPython/dist/$VERSION
|
||||
TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz
|
||||
SITEPACKAGES=/Library/Frameworks/Python.framework/Versions/$PYVER/lib/python$PYVER/site-packages
|
||||
|
||||
# TODO: Should I change the prefix to /usr?
|
||||
PREFIX=/usr/local
|
||||
|
||||
PROGDIR="`dirname \"$0\"`"
|
||||
TMPDIR=$PWD/_build_dmg
|
||||
|
||||
BUILDROOT=$TMPDIR/build
|
||||
INSTALLROOT=$TMPDIR/install
|
||||
INSTALLDEVEL=$TMPDIR/install-devel
|
||||
DMGDIR=$TMPDIR/dmg
|
||||
RESOURCEDIR=$PROGDIR/resources
|
||||
DESTDIR=$PWD/dist
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Setup builddirs
|
||||
|
||||
mkdir -p $BUILDROOT
|
||||
mkdir -p $INSTALLROOT
|
||||
mkdir -p $INSTALLDEVEL
|
||||
rm -rf $DMGDIR
|
||||
mkdir -p $DMGDIR/root
|
||||
|
||||
pushd $BUILDROOT
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Unpack the tarball
|
||||
|
||||
if [ -z "$skiptar" ]; then
|
||||
tar xzvf $TARBALL
|
||||
fi
|
||||
|
||||
if [ "$use_cvs" = 1 ]; then
|
||||
# copy the cvs workspace, except for build dirs
|
||||
|
||||
mkdir -p wxPythonSrc-$VERSION
|
||||
|
||||
echo Finding updated files...
|
||||
if [ -e .last_copy ]; then
|
||||
FEXPR="-cnewer .last_copy"
|
||||
fi
|
||||
find /projects/wx $FEXPR -print \
|
||||
| grep -v wx/build \
|
||||
| grep -v wxPython/build \
|
||||
| grep -v wxPython/_build \
|
||||
| grep -v CVS \
|
||||
| cut -b 14- > filelist
|
||||
|
||||
for x in `cat filelist`; do
|
||||
if [ -d "/projects/wx/$x" ]; then
|
||||
mkdir -p "wxPythonSrc-$VERSION/$x"
|
||||
else
|
||||
echo $x
|
||||
cp -p "/projects/wx/$x" "wxPythonSrc-$VERSION/$x"
|
||||
fi
|
||||
done
|
||||
|
||||
touch .last_copy
|
||||
fi
|
||||
|
||||
|
||||
cd wxPythonSrc-$VERSION
|
||||
WXDIR=`pwd`
|
||||
mkdir -p $WXDIR/build
|
||||
cd $WXDIR/build
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
# Configure wxWindows
|
||||
if [ -z "$skipconfig" ]; then
|
||||
../configure --with-mac --prefix=$PREFIX \
|
||||
--with-opengl \
|
||||
--enable-precomp=no \
|
||||
--enable-geometry \
|
||||
--enable-optimise \
|
||||
--enable-debug_flag \
|
||||
--with-libjpeg=builtin \
|
||||
--with-libpng=builtin \
|
||||
--with-libtiff=builtin \
|
||||
--with-zlib=builtin
|
||||
|
||||
fi
|
||||
|
||||
# Build wxWindows and wxPython
|
||||
if [ -z "$skipbuild" ]; then
|
||||
make
|
||||
|
||||
cd $WXDIR/wxPython
|
||||
python$PYVER setup.py \
|
||||
IN_CVS_TREE=1 \
|
||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
|
||||
build
|
||||
|
||||
|
||||
# Build wxrc (XRC resource tool) but don't use the makefiles since they expect
|
||||
# a shared version of the xrc lib to have been built...
|
||||
cd $WXDIR/contrib/utils/wxrc
|
||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build"
|
||||
wCC=`$WX_CONFIG --cc`
|
||||
wCXX=`$WX_CONFIG --cxx`
|
||||
|
||||
for f in wxrc.cpp ../../src/xrc/*.cpp; do
|
||||
echo $f
|
||||
$wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
|
||||
done
|
||||
for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlrole.c ../../src/xrc/expat/xmltok/xmltok.c; do
|
||||
echo $f
|
||||
$wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
|
||||
done
|
||||
|
||||
# the handlers are not needed
|
||||
rm xh_*.o xmlrsall.o
|
||||
|
||||
$wCXX `$WX_CONFIG --libs` *.o -o wxrc
|
||||
strip wxrc
|
||||
|
||||
fi
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Install wxWindows
|
||||
|
||||
if [ -z "$skipinstall" ]; then
|
||||
cd $WXDIR/build
|
||||
make prefix=$INSTALLROOT/$PREFIX install
|
||||
|
||||
|
||||
# and wxPython
|
||||
cd $WXDIR/wxPython
|
||||
python$PYVER setup.py \
|
||||
IN_CVS_TREE=1 \
|
||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
|
||||
install \
|
||||
--root=$INSTALLROOT
|
||||
|
||||
# install wxPython's tool scripts
|
||||
cd $WXDIR/wxPython/scripts
|
||||
python$PYVER CreateMacScripts.py $INSTALLROOT $PREFIX/bin
|
||||
|
||||
# Install wxrc
|
||||
cp $WXDIR/contrib/utils/wxrc/wxrc $INSTALLROOT$PREFIX/bin
|
||||
|
||||
|
||||
# Move wxWindows devel files and save for a separate installer package
|
||||
mkdir -p $INSTALLDEVEL$PREFIX
|
||||
mkdir -p $INSTALLDEVEL$PREFIX/bin
|
||||
mkdir -p $INSTALLDEVEL$PREFIX/lib
|
||||
mv -f $INSTALLROOT$PREFIX/include $INSTALLDEVEL$PREFIX
|
||||
mv -f $INSTALLROOT$PREFIX/lib/wx $INSTALLDEVEL$PREFIX/lib
|
||||
mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin
|
||||
|
||||
fi
|
||||
|
||||
popd
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
# Make the Installer packages and disk image
|
||||
if [ -z "$skipdmg" ]; then
|
||||
|
||||
# Remove the .pyc/.pyo files they just take up space and can be recreated
|
||||
# during the install.
|
||||
python $PROGDIR/../zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework
|
||||
|
||||
# Copy the demo, samples, and such to the Applications dir
|
||||
APPDIR=$INSTALLROOT/Applications/wxPythonOSX-$VERSION
|
||||
mkdir -p $APPDIR
|
||||
cp -pR $WXDIR/wxPython/demo $APPDIR
|
||||
cp -pR $WXDIR/wxPython/samples $APPDIR
|
||||
|
||||
# Move sample launchers to .pyw files.
|
||||
# TODO: A better, more automated way to do this!!!
|
||||
pushd $APPDIR/samples
|
||||
for x in StyleEditor/STCStyleEditor \
|
||||
doodle/superdoodle \
|
||||
frogedit/FrogEdit \
|
||||
pySketch/pySketch \
|
||||
wxProject/wxProject; do
|
||||
mv $x.py $x.pyw
|
||||
done
|
||||
popd
|
||||
|
||||
# Make an app to launch the demo
|
||||
cat > $APPDIR/demo/RunDemo.pyw <<EOF
|
||||
import sys, os
|
||||
sys.path.insert(0, "/Applications/wxPythonOSX-$VERSION/demo")
|
||||
os.chdir("/Applications/wxPythonOSX-$VERSION/demo")
|
||||
import Main
|
||||
Main.main()
|
||||
EOF
|
||||
pythonw $PROGDIR/../buildapp.py \
|
||||
--builddir=$APPDIR \
|
||||
--name=RunDemo \
|
||||
--mainprogram=$APPDIR/demo/RunDemo.pyw \
|
||||
--iconfile=$PROGDIR/RunDemo.icns \
|
||||
build
|
||||
|
||||
# Make an app to launch PyShell
|
||||
pythonw $PROGDIR/../buildapp.py \
|
||||
--builddir=$APPDIR \
|
||||
--name=PyShell \
|
||||
--mainprogram=$INSTALLROOT$PREFIX/bin/pyshell.py \
|
||||
--iconfile=$PROGDIR/PieShell.icns \
|
||||
build
|
||||
|
||||
# Make an app to launch XRCed
|
||||
pythonw $PROGDIR/../buildapp.py \
|
||||
--builddir=$APPDIR \
|
||||
--name=XRCed \
|
||||
--mainprogram=$INSTALLROOT$PREFIX/bin/xrced.py \
|
||||
--iconfile=$PROGDIR/XRCed.icns \
|
||||
build
|
||||
|
||||
|
||||
# Make the welcome message
|
||||
cat > $RESOURCEDIR/Welcome.txt <<EOF
|
||||
Welcome!
|
||||
|
||||
This program will install wxPython $VERSION for MacPython-OSX $PYVER.
|
||||
|
||||
Build date: `date`
|
||||
EOF
|
||||
|
||||
# make the preflight script
|
||||
cat > $RESOURCEDIR/preflight <<EOF
|
||||
#!/bin/sh
|
||||
# Cleanup any old install of the wxPython package
|
||||
rm -rf \$2$SITEPACKAGES/wxPython
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x $RESOURCEDIR/preflight
|
||||
|
||||
# make the postflight script
|
||||
cat > $RESOURCEDIR/postflight <<EOF
|
||||
#!/bin/sh -e
|
||||
# Compile the .py files in the wxPython pacakge
|
||||
/usr/local/bin/python \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
||||
/usr/local/bin/python -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
||||
|
||||
# and in the demo
|
||||
/usr/local/bin/python \$2$SITEPACKAGES/../compileall.py /Applications/wxPythonOSX-$VERSION/demo
|
||||
|
||||
# Make the demo/data dir writable
|
||||
chmod a+w /Applications/wxPythonOSX-$VERSION/demo/data
|
||||
|
||||
# and the wxPython pacakge should be group writable
|
||||
chgrp -R admin \$2$SITEPACKAGES/wxPython
|
||||
chgrp -R admin /Applications/wxPythonOSX-$VERSION
|
||||
chmod -R g+w \$2$SITEPACKAGES/wxPython
|
||||
chmod -R g+w /Applications/wxPythonOSX-$VERSION
|
||||
|
||||
exit 0
|
||||
EOF
|
||||
chmod +x $RESOURCEDIR/postflight
|
||||
|
||||
|
||||
|
||||
# Finally, build the main package...
|
||||
rm -rf wxPythonOSX.pkg
|
||||
python $PROGDIR/../buildpkg.py \
|
||||
--Title=wxPythonOSX \
|
||||
--Version=$VERSION \
|
||||
--Description="wxPython $VERSION for MacPython-OSX $PYVER" \
|
||||
--NeedsAuthorization="YES" \
|
||||
--Relocatable="NO" \
|
||||
--InstallOnly="YES" \
|
||||
$INSTALLROOT \
|
||||
$RESOURCEDIR
|
||||
|
||||
mv wxPythonOSX.pkg $DMGDIR/root
|
||||
|
||||
|
||||
# and the devel package
|
||||
rm -rf wxPythonOSX-devel.pkg
|
||||
python $PROGDIR/../buildpkg.py \
|
||||
--Title=wxPythonOSX-devel \
|
||||
--Version=$VERSION \
|
||||
--Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
|
||||
--NeedsAuthorization="YES" \
|
||||
--Relocatable="NO" \
|
||||
--InstallOnly="YES" \
|
||||
$INSTALLROOT
|
||||
|
||||
mv wxPythonOSX-devel.pkg $DMGDIR/root
|
||||
|
||||
|
||||
# Make a README.txt to go on the disk image
|
||||
cat > $DMGDIR/root/README.txt <<EOF
|
||||
The files on this disk image are Installer packages for wxPythonOSX
|
||||
$VERSION for MacPython-OSX $PVER. You must already have MacPython-OSX
|
||||
installed.
|
||||
|
||||
The wxPython extension modules, library, demo and samples are
|
||||
contained in the wxPythonOSX package. You should install at least this
|
||||
package to use wxPython.
|
||||
|
||||
If you have any need to create applicaitons or extension modules that
|
||||
link with the same wxMac that wxPython does, then you can also install
|
||||
the wxPythonOSX-devel package to get the necessary header files and
|
||||
such. Otherwise you don't need it.
|
||||
|
||||
Happy Hacking!
|
||||
EOF
|
||||
|
||||
|
||||
# license files, etc.
|
||||
cp -pR $WXDIR/wxPython/licence $DMGDIR/root
|
||||
cp $WXDIR/wxPython/CHANGES.txt $DMGDIR/root
|
||||
|
||||
# and then finally make a disk image containing the packages and etc.
|
||||
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-py$PYVER
|
||||
|
||||
echo Moving $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg to $DESTDIR
|
||||
mv $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg $DESTDIR
|
||||
fi
|
||||
|
||||
|
||||
# Cleanup build/install dirs
|
||||
if [ -z "$skipclean" ]; then
|
||||
echo "Cleaning up..."
|
||||
rm -rf $TMPDIR
|
||||
else
|
||||
echo "Cleanup is disabled. You should remove $TMPDIR when finished"
|
||||
fi
|
||||
|
@@ -1,17 +1,17 @@
|
||||
{\rtf1\mac\ansicpg10000\cocoartf100
|
||||
{\rtf1\mac\ansicpg10000\cocoartf102
|
||||
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;\f2\fnil\fcharset77 Monaco;
|
||||
\f3\fnil\fcharset77 LucidaGrande;}
|
||||
{\colortbl;\red255\green255\blue255;\red0\green0\blue255;}
|
||||
\margl1440\margr1440\vieww10820\viewh9000\viewkind0
|
||||
\margl1440\margr1440\vieww11800\viewh14740\viewkind0
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b\fs24 \cf0 About\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1\b0 \cf0 \
|
||||
This is a binary package of wxPython for MachoPython 2.2.x on Mac OS X 10.1 or later. The wxMac binaries will be installed as well. MachoPython, however, is not included with this package, but is also required to run wxPython. Before you continue you should have already installed the MachoPython framework.\
|
||||
This is a binary package of wxPython for MacPython on Mac OS X 10.2 or later. The wxMac binaries will be installed as well. MacPython-OSX, however, is not included with this package, but is also required to run wxPython. Before you continue you should have already installed the MacPython-OSX framework.\
|
||||
\
|
||||
Please note that the Mac OS ports of wxPython as well as wxWindows (a.k.a. wxMac) are works-in-progress. Report bugs via SourceForge [1] or discuss the problem on the mailing list(s) in question (see below).\
|
||||
Please note that the Mac OS ports of wxPython as well as wxWindows (a.k.a. wxMac) are works-in-progress. Report bugs via SourceForge [1] or discuss the problem on the mailing list(s) related to your questions (see below).\
|
||||
\
|
||||
|
||||
\fs18 [1] \cf2 http://sf.net/tracker/?atid=109863&group_id=9863
|
||||
@@ -24,11 +24,11 @@ Please note that the Mac OS ports of wxPython as well as wxWindows (a.k.a. wxMac
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1\b0 \cf0 \
|
||||
wxMac goes into
|
||||
wxMac goes into
|
||||
\f2 /usr/local
|
||||
\f1 and wxPython will be installed into the appropriate subfolder of the Python framework. Choose the
|
||||
\f1 and wxPython will be installed into the appropriate subfolder of the Python framework. Choose the
|
||||
\f3 Show files
|
||||
\f1 command from the
|
||||
\f1 command from the
|
||||
\f3 File
|
||||
\f1 menu for a complete file listing. (The menu item becomes available as soon as the license agreement is accepted in the next step.)
|
||||
\f2 \
|
||||
@@ -40,9 +40,9 @@ wxMac goes into
|
||||
\f0\b \cf0 Getting started with wxPython
|
||||
\f1\b0 \
|
||||
\
|
||||
You can verify that wxPython was succesfully installed by running the demo. It resides on the same disk image where you found this package. Just double click the script named
|
||||
You can verify that wxPython was succesfully installed by running the demo. It resides on the same disk image where you found this package. Just double click the script named
|
||||
\f2 demo.py
|
||||
\f1 or drag and drop it onto the Python interpreter in your
|
||||
\f1 or drag and drop it onto the Python interpreter in your
|
||||
\f2 Application
|
||||
\f1 folder.\
|
||||
\
|
||||
@@ -50,24 +50,19 @@ The official wxPython site:\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f2 \cf2 http://www.wxpython.org\cf0 \
|
||||
\f2 \cf2 http://wxPython.org\cf0 \
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1 \cf0 \
|
||||
Some mailing lists you may want to subscribe to:\
|
||||
The best way to get help with wxWindows and wxPython is to subscribe to the mail lists and post questions there. You can see info about the mail lists, including how to subscribe, at this website:\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f2 \cf2 http://lists.wxwindows.org/mailman/listinfo/wxpython-users\
|
||||
\f2 \cf2 http://wxPython.org/maillist.php\
|
||||
\
|
||||
http://lists.wxwindows.org/mailman/listinfo/wxpython-mac\
|
||||
\
|
||||
http://lists.wxwindows.org/mailman/listinfo/wx-users\
|
||||
\
|
||||
http://lists.wxwindows.org/mailman/listinfo/wx-dev
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f1 \cf0 \
|
||||
\
|
||||
\
|
||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
||||
|
||||
\f0\b \cf0 Disclaimer
|
||||
@@ -80,5 +75,5 @@ Some mailing lists you may want to subscribe to:\
|
||||
\
|
||||
\
|
||||
Robin Dunn\
|
||||
Frank Vercruesse\
|
||||
\
|
||||
}
|
5
wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt
Normal file
5
wxPython/distrib/mac/wxPythonOSX/resources/Welcome.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Welcome!
|
||||
|
||||
This program will install wxPython 2.4.0.7 for MacPython-OSX 2.3.
|
||||
|
||||
Build date: Fri Mar 21 14:00:06 PST 2003
|
18
wxPython/distrib/mac/wxPythonOSX/resources/postflight
Executable file
18
wxPython/distrib/mac/wxPythonOSX/resources/postflight
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh -e
|
||||
# Compile the .py files in the wxPython pacakge
|
||||
/usr/local/bin/python $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
|
||||
/usr/local/bin/python -O $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
|
||||
|
||||
# and in the demo
|
||||
/usr/local/bin/python $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/../compileall.py /Applications/wxPythonOSX-2.4.0.7/demo
|
||||
|
||||
# Make the demo/data dir writable
|
||||
chmod a+w /Applications/wxPythonOSX-2.4.0.7/demo/data
|
||||
|
||||
# and the wxPython pacakge should be group writable
|
||||
chgrp -R admin $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
|
||||
chgrp -R admin /Applications/wxPythonOSX-2.4.0.7
|
||||
chmod -R g+w $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
|
||||
chmod -R g+w /Applications/wxPythonOSX-2.4.0.7
|
||||
|
||||
exit 0
|
4
wxPython/distrib/mac/wxPythonOSX/resources/preflight
Executable file
4
wxPython/distrib/mac/wxPythonOSX/resources/preflight
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/sh
|
||||
# Cleanup any old install of the wxPython package
|
||||
rm -rf $2/Library/Frameworks/Python.framework/Versions/2.3/lib/python2.3/site-packages/wxPython
|
||||
exit 0
|
38
wxPython/distrib/mac/zappycfiles.py
Normal file
38
wxPython/distrib/mac/zappycfiles.py
Normal file
@@ -0,0 +1,38 @@
|
||||
#!/usr/local/bin/python
|
||||
"""Recursively zap all .pyc and .pyo files"""
|
||||
import os
|
||||
import sys
|
||||
|
||||
# set doit true to actually delete files
|
||||
# set doit false to just print what would be deleted
|
||||
doit = 1
|
||||
|
||||
def main():
|
||||
if not sys.argv[1:]:
|
||||
if os.name == 'mac':
|
||||
import macfs
|
||||
fss, ok = macfs.GetDirectory('Directory to zap pyc files in')
|
||||
if not ok:
|
||||
sys.exit(0)
|
||||
dir = fss.as_pathname()
|
||||
zappyc(dir)
|
||||
else:
|
||||
print 'Usage: zappyc dir ...'
|
||||
sys.exit(1)
|
||||
for dir in sys.argv[1:]:
|
||||
zappyc(dir)
|
||||
|
||||
def zappyc(dir):
|
||||
os.path.walk(dir, walker, None)
|
||||
|
||||
def walker(dummy, top, names):
|
||||
for name in names:
|
||||
if name[-4:] in ('.pyc', '.pyo'):
|
||||
path = os.path.join(top, name)
|
||||
print 'Zapping', path
|
||||
if doit:
|
||||
os.unlink(path)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
@@ -7,7 +7,7 @@ will be created.
|
||||
"""
|
||||
|
||||
|
||||
import sys, os, string
|
||||
import sys, os, time
|
||||
|
||||
KEEP_TEMPS = 0
|
||||
ISCC = r"%s\InnoSetup2Ex\ISCC.exe %s"
|
||||
@@ -21,7 +21,7 @@ ISS_Template = r'''
|
||||
AppName = wxPython
|
||||
AppVerName = wxPython %(VERSION)s for Python %(PYTHONVER)s
|
||||
OutputBaseFilename = wxPythonWIN32-%(VERSION)s-%(PYVER)s
|
||||
AppCopyright = Copyright <20> 2002 Total Control Software
|
||||
AppCopyright = Copyright <20> 2003 Total Control Software
|
||||
DefaultDirName = {code:GetInstallDir|c:\DoNotInstallHere}
|
||||
DefaultGroupName = wxPython %(SHORTVER)s for Python %(PYTHONVER)s
|
||||
AlwaysCreateUninstallIcon = yes
|
||||
@@ -32,12 +32,12 @@ OutputDir = dist
|
||||
WizardStyle = modern
|
||||
UninstallStyle = modern
|
||||
DisableStartupPrompt = true
|
||||
CompressLevel = 9
|
||||
Compression = bzip
|
||||
DirExistsWarning = no
|
||||
DisableReadyMemo = true
|
||||
DisableReadyPage = true
|
||||
;;DisableDirPage = true
|
||||
DisableProgramGroupPage = true
|
||||
DisableProgramGroupPage = no
|
||||
DisableAppendDir = true
|
||||
UsePreviousAppDir = no
|
||||
UsePreviousGroup = no
|
||||
@@ -47,6 +47,8 @@ AppPublisherURL = http://wxPython.org/
|
||||
LicenseFile = licence\licence.txt
|
||||
CodeFile = %(IFSFILE)s
|
||||
|
||||
;; WizardDebug = yes
|
||||
|
||||
;;------------------------------------------------------------
|
||||
|
||||
;;[Dirs]
|
||||
@@ -72,7 +74,6 @@ Source: "%(SYSDIR)s\MSVCP60.dll"; DestDir: "{sys}"; CopyMode: alwayssk
|
||||
Source: "%(WXDIR)s\lib\%(WXDLL)s"; DestDir: "{app}\wxPython"; Components: core
|
||||
%(MSLU)s
|
||||
Source: "wxPython\wxc.pyd"; DestDir: "{app}\wxPython"; Components: core
|
||||
Source: "wxPython\wxc.pyd.manifest"; DestDir: "{app}\wxPython"; Components: core
|
||||
Source: "wxPython\gridc.pyd"; DestDir: "{app}\wxPython"; Components: core
|
||||
Source: "wxPython\helpc.pyd"; DestDir: "{app}\wxPython"; Components: core
|
||||
Source: "wxPython\htmlc.pyd"; DestDir: "{app}\wxPython"; Components: core
|
||||
@@ -95,6 +96,10 @@ Source: "wxPython\lib\mixins\*.py"; DestDir: "{app}\wxPython\lib\mixins"
|
||||
Source: "wxPython\lib\PyCrust\*.py"; DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
|
||||
Source: "wxPython\lib\PyCrust\*.txt"; DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
|
||||
Source: "wxPython\lib\PyCrust\*.ico"; DestDir: "{app}\wxPython\lib\PyCrust"; Components: core
|
||||
Source: "wxPython\lib\PyCrust\wxd\*.py"; DestDir: "{app}\wxPython\lib\PyCrust\wxd"; Components: core
|
||||
Source: "wxPython\lib\colourchooser\*.py"; DestDir: "{app}\wxPython\lib\colourchooser"; Components: core
|
||||
|
||||
%(LOCALE)s
|
||||
|
||||
Source: "demo\*.py"; DestDir: "{app}\wxPython\demo"; Components: demo
|
||||
Source: "demo\*.xml"; DestDir: "{app}\wxPython\demo"; Components: demo
|
||||
@@ -139,9 +144,8 @@ Source: "%(WXDIR)s\docs\htmlhelp\wx.chm"; DestDir: "{app}\wxPython\docs"; Comp
|
||||
Source: "%(WXDIR)s\docs\htmlhelp\ogl.chm"; DestDir: "{app}\wxPython\docs"; Components: docs
|
||||
|
||||
Source: "wxPython\tools\*.py"; DestDir: "{app}\wxPython\tools"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\CHANGES"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\TODO"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\README"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\*.txt"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\sawfishrc"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\*.py"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\*.xrc"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
Source: "wxPython\tools\XRCed\*.ico"; DestDir: "{app}\wxPython\tools\XRCed"; Components: tools
|
||||
@@ -149,12 +153,14 @@ Source: "wxPython\tools\XRCed\*.sh"; DestDir: "{app}\wxPython\tools\XRCed
|
||||
|
||||
Source: "scripts\*.bat"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\*.py"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\helpviewer"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\img2png"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\img2py"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\img2xpm"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\xrced"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\pyshell"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\pycrust"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
Source: "scripts\pycwrap"; DestDir: "{code:GetPythonDir}\Scripts"; Components: tools
|
||||
|
||||
Source: "samples\doodle\*.py"; DestDir: "{app}\wxPython\samples\doodle"; Components: samples
|
||||
Source: "samples\doodle\*.txt"; DestDir: "{app}\wxPython\samples\doodle"; Components: samples
|
||||
@@ -164,12 +170,6 @@ Source: "samples\doodle\superdoodle.iss"; DestDir: "{app}\wxPython\samples\doo
|
||||
Source: "samples\wxProject\*.txt"; DestDir: "{app}\wxPython\samples\wxProject"; Components: samples
|
||||
Source: "samples\wxProject\*.py"; DestDir: "{app}\wxPython\samples\wxProject"; Components: samples
|
||||
|
||||
Source: "samples\stxview\*.py"; DestDir: "{app}\wxPython\samples\stxview"; Components: samples
|
||||
Source: "samples\stxview\*.stx"; DestDir: "{app}\wxPython\samples\stxview"; Components: samples
|
||||
Source: "samples\stxview\*.txt"; DestDir: "{app}\wxPython\samples\stxview"; Components: samples
|
||||
Source: "samples\stxview\StructuredText\*.py"; DestDir: "{app}\wxPython\samples\stxview\StructuredText"; Components: samples
|
||||
Source: "samples\stxview\StructuredText\*.txt"; DestDir: "{app}\wxPython\samples\stxview\StructuredText"; Components: samples
|
||||
|
||||
Source: "samples\StyleEditor\*.txt"; DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
|
||||
Source: "samples\StyleEditor\*.py"; DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
|
||||
Source: "samples\StyleEditor\*.cfg"; DestDir: "{app}\wxPython\samples\StyleEditor"; Components: samples
|
||||
@@ -187,6 +187,10 @@ Source: "samples\embedded\*.unx"; DestDir: "{app}\wxPython\samples\embe
|
||||
Source: "samples\embedded\*.ico"; DestDir: "{app}\wxPython\samples\embedded"; Components: samples
|
||||
Source: "samples\embedded\*.xpm"; DestDir: "{app}\wxPython\samples\embedded"; Components: samples
|
||||
|
||||
Source: "src\winxp.manifest"; DestDir: "{code:GetPythonDir}"; DestName: "python.exe.manifest"; Components: core
|
||||
Source: "src\winxp.manifest"; DestDir: "{code:GetPythonDir}"; DestName: "pythonw.exe.manifest"; Components: core
|
||||
|
||||
|
||||
;;------------------------------------------------------------
|
||||
|
||||
[Run]
|
||||
@@ -224,6 +228,12 @@ Type: files; Name: "{app}\wxPython\lib\mixins\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\lib\mixins\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\decor\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\decor\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\wxd\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\lib\PyCrust\wxd\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\lib\colourchooser\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\lib\colourchooser\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\tools\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\tools\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\tools\XRCed\*.pyc";
|
||||
@@ -241,10 +251,6 @@ Type: files; Name: "{app}\wxPython\samples\wxProject\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\samples\wxProject\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\samples\StyleEditor\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\samples\StyleEditor\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\samples\stxview\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\samples\stxview\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\samples\stxview\StructuredText\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\samples\stxview\StructuredText\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\samples\frogedit\*.pyc";
|
||||
Type: files; Name: "{app}\wxPython\samples\frogedit\*.pyo";
|
||||
Type: files; Name: "{app}\wxPython\demo\data\*.pyc";
|
||||
@@ -269,6 +275,7 @@ var
|
||||
PythonDir : String;
|
||||
InstallDir : String;
|
||||
|
||||
|
||||
function InitializeSetup(): Boolean;
|
||||
begin
|
||||
if not RegQueryStringValue(HKEY_LOCAL_MACHINE,
|
||||
@@ -279,7 +286,8 @@ begin
|
||||
'Software\Python\PythonCore\%(PYTHONVER)s\InstallPath',
|
||||
'', PythonDir) then begin
|
||||
|
||||
MsgBox('No installation of Python %(PYTHONVER)s found in registry.\nBe sure to enter a pathname that places wxPython\non the PYTHONPATH',
|
||||
MsgBox('No installation of Python %(PYTHONVER)s found in registry.' + #13 +
|
||||
'Be sure to enter a pathname that places wxPython on the PYTHONPATH',
|
||||
mbConfirmation, MB_OK);
|
||||
PythonDir := 'C:\Put a directory on PYTHONPATH here\';
|
||||
end;
|
||||
@@ -300,12 +308,34 @@ begin
|
||||
Result := InstallDir;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
function NextButtonClick(CurPage: Integer): Boolean;
|
||||
var
|
||||
FileName: string;
|
||||
ResultCode: Integer;
|
||||
begin
|
||||
Result := True;
|
||||
if CurPage <> wpSelectDir then Exit;
|
||||
FileName := WizardDirValue() + '\wxPython\unins000.exe';
|
||||
if FileExists(FileName) then begin
|
||||
ResultCode := MsgBox('A prior wxPython installation was found in this directory. It' + #13 +
|
||||
'is recommended that it be uninstalled first.' + #13#13 +
|
||||
'Should I do it?',
|
||||
mbConfirmation, MB_YESNO);
|
||||
if ResultCode = IDYES then begin
|
||||
InstExec(FileName, '/SILENT', WizardDirValue()+'\wxPython', True, False, SW_SHOWNORMAL, ResultCode);
|
||||
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
begin
|
||||
end.
|
||||
|
||||
"""
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def find_DLLs():
|
||||
@@ -317,7 +347,7 @@ def find_DLLs():
|
||||
proc.close()
|
||||
for line in lines:
|
||||
if line[:6] == " wx":
|
||||
WXDLL = string.strip(line)
|
||||
WXDLL = line.strip()
|
||||
|
||||
if line[:10] == " python":
|
||||
PYTHONVER = line[10] + '.' + line[11]
|
||||
@@ -326,6 +356,23 @@ def find_DLLs():
|
||||
return WXDLL, PYTHONVER
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
locale_template = 'Source: "%s"; DestDir: "{app}\%s"; Components: core'
|
||||
|
||||
def build_locale_string():
|
||||
stringlst = []
|
||||
|
||||
def walk_helper(lst, dirname, files):
|
||||
for f in files:
|
||||
filename = os.path.join(dirname, f)
|
||||
if not os.path.isdir(filename):
|
||||
lst.append( locale_template % (filename, dirname) )
|
||||
|
||||
os.path.walk('wxPython\\locale', walk_helper, stringlst)
|
||||
return '\n'.join(stringlst)
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
def main():
|
||||
@@ -344,6 +391,7 @@ def main():
|
||||
SYSDIR = r"C:\WINNT\SYSTEM32"
|
||||
ISSFILE = "__wxPython.iss"
|
||||
IFSFILE = "__wxPython.ifs"
|
||||
LOCALE = build_locale_string()
|
||||
|
||||
if PYTHONVER >= "2.2":
|
||||
IF22 = r"InstallDir := InstallDir + '\Lib\site-packages';"
|
||||
@@ -352,7 +400,7 @@ def main():
|
||||
|
||||
# Starting with 2.3.3 the hybrid build is the release build too, so
|
||||
# no need to label it that way.
|
||||
##if string.find(WXDLL, "h") != -1:
|
||||
##if WXDLL.find("h") != -1:
|
||||
## PYVER = PYVER + "-hybrid"
|
||||
|
||||
MSLU=''
|
||||
@@ -370,6 +418,7 @@ def main():
|
||||
os.system(ISCC % (os.environ['TOOLS'], ISSFILE))
|
||||
|
||||
if not KEEP_TEMPS:
|
||||
time.sleep(1)
|
||||
os.remove(ISSFILE)
|
||||
os.remove(IFSFILE)
|
||||
|
||||
|
@@ -1,33 +0,0 @@
|
||||
@echo off
|
||||
rem Builds a zip containing debugging versions of wxWindows and wxPython
|
||||
rem that could be unziped over a wxPython installation.
|
||||
|
||||
setlocal
|
||||
|
||||
iff "%1" == "15" then
|
||||
set PCBUILD=c:\projects\Python-1.5.2\PCBuild
|
||||
elseiff "%1" == "20" then
|
||||
set PCBUILD=c:\projects\Python-2.0\PCBuild
|
||||
else
|
||||
echo Specivy Python version!!!
|
||||
goto end
|
||||
endiff
|
||||
|
||||
iff "%2" == "" then
|
||||
echo Specify wxPython version!!!
|
||||
goto end
|
||||
endiff
|
||||
|
||||
|
||||
mkdir wxPython-dbg
|
||||
copy README.dbg.txt wxPython-dbg
|
||||
copy %WXWIN%\lib\wx*d.dll wxPython-dbg
|
||||
copy %WXWIN%\wxPython\wxPython\*_d.pyd wxPython-dbg
|
||||
copy %PCBUILD%\python_d.exe wxPython-dbg
|
||||
copy %PCBUILD%\python%1_d.dll wxPython-dbg
|
||||
|
||||
zip -r wxPython-dbg-%2-Py%1.zip wxPython-dbg
|
||||
|
||||
del /sx wxPython-dbg
|
||||
|
||||
:end
|
@@ -21,15 +21,17 @@ cp -R samples _distrib_tgz/wxPython-$1
|
||||
rm -rf `find _distrib_tgz/wxPython-$1 -name CVS`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "*.pyc"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name .cvsignore`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name core`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "core*"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name wxPython`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name *.o`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name *.so`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "*.o"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "*.so"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "*~"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name ".#*"`
|
||||
|
||||
cd _distrib_tgz
|
||||
|
||||
tar cvf ../dist/wxPythonDemo-$1.tar wxPython-$1
|
||||
gzip ../dist/wxPythonDemo-$1.tar
|
||||
gzip -9 ../dist/wxPythonDemo-$1.tar
|
||||
|
||||
cd ..
|
||||
rm -r _distrib_tgz
|
||||
|
@@ -59,8 +59,8 @@ del /sxzy %BASE%\include\wx\x11\nanox\X11\CVS
|
||||
|
||||
rem *** bundle it all up
|
||||
cd _distrib_zip
|
||||
tar cvf ..\dist\wxPythonWIN32-devel-%1.tar wxPython-%1
|
||||
gzip -9 ..\dist\wxPythonWIN32-devel-%1.tar
|
||||
tar cvf ../dist/wxPythonWIN32-devel-%1.tar wxPython-%1
|
||||
gzip -9 ../dist/wxPythonWIN32-devel-%1.tar
|
||||
|
||||
rem *** cleanup
|
||||
cd ..
|
||||
|
63
wxPython/distrib/makedocs
Executable file
63
wxPython/distrib/makedocs
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify a version number on the command line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d wxPython ]; then # TODO: make this test more robust
|
||||
echo "Please run this script from the root wxPython directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# **** Make a directory to build up a distribution tree
|
||||
|
||||
DEST=wxPython-$1/docs
|
||||
|
||||
mkdir -p _build_docs/$DEST
|
||||
cd _build_docs
|
||||
mkdir $DEST/wx
|
||||
mkdir $DEST/ogl
|
||||
|
||||
WXDIR=../..
|
||||
|
||||
# **** Build the docs using tex2rtf
|
||||
cp $WXDIR/docs/latex/wx/*.gif $DEST/wx
|
||||
$WXDIR/utils/tex2rtf/src/tex2rtf $WXDIR/docs/latex/wx/manual.tex $DEST/wx/wx.htm -twice -html
|
||||
cp $DEST/wx/wx.htm $DEST/wx/index.htm
|
||||
|
||||
cp $WXDIR/contrib/docs/latex/ogl/*.gif $DEST/ogl
|
||||
cp $WXDIR/contrib/docs/latex/ogl/*.bmp $DEST/ogl
|
||||
$WXDIR/utils/tex2rtf/src/tex2rtf $WXDIR/contrib/docs/latex/ogl/ogl.tex $DEST/ogl/ogl.htm -twice -html
|
||||
cp $DEST/ogl/ogl.htm $DEST/ogl/index.htm
|
||||
|
||||
|
||||
# **** zip the docs into "books"
|
||||
pushd $DEST
|
||||
pushd wx
|
||||
zip ../wx.zip *
|
||||
popd
|
||||
rm -r wx
|
||||
|
||||
pushd ogl
|
||||
zip ../ogl.zip *
|
||||
popd
|
||||
rm -r ogl
|
||||
|
||||
popd
|
||||
cp ../distrib/viewdocs.py $DEST
|
||||
cp ../distrib/README.viewdocs.txt $DEST/README.txt
|
||||
|
||||
rm -f ../dist/wxPythonDocs-$1.tar.gz
|
||||
tar cvf ../dist/wxPythonDocs-$1.tar $DEST
|
||||
gzip -9 ../dist/wxPythonDocs-$1.tar
|
||||
|
||||
|
||||
# **** Cleanup
|
||||
cd ..
|
||||
rm -r _build_docs
|
||||
|
||||
|
@@ -1,26 +0,0 @@
|
||||
@echo off
|
||||
|
||||
rem **** Make a directory to build up a distribution tree
|
||||
md _distrib_zip
|
||||
md _distrib_zip\wxPython-%1
|
||||
|
||||
cd _distrib_zip
|
||||
|
||||
rem **** copy the docs into the tree
|
||||
md wxPython-%1\docs
|
||||
md wxPython-%1\docs\wx
|
||||
md wxPython-%1\docs\ogl
|
||||
copy %WXWIN%\docs\html\wx\*.* wxPython-%1\docs\wx
|
||||
copy wxPython-%1\docs\wx\wx.htm wxPython-%1\docs\wx\index.htm
|
||||
copy %WXWIN%\docs\html\ogl\*.* wxPython-%1\docs\ogl
|
||||
copy wxPython-%1\docs\ogl\ogl.htm wxPython-%1\docs\ogl\index.htm
|
||||
|
||||
rem **** zip up the docs
|
||||
rem zip -r ..\distrib\wxPython-docs-%1.zip wxPython-%1\docs
|
||||
tar cvf ..\dist\wxPythonDocs-%1.tar wxPython-%1
|
||||
gzip -9 ..\dist\wxPythonDocs-%1.tar
|
||||
|
||||
|
||||
rem **** Cleanup
|
||||
cd ..
|
||||
del /sxzy _distrib_zip
|
@@ -13,51 +13,52 @@ fi
|
||||
#----------------------------------------------------------------------
|
||||
# Initialization
|
||||
|
||||
distdir=`pwd`/dist
|
||||
builddir=`pwd`/_build_rpm
|
||||
wxpdir=`pwd`
|
||||
wxdir=${wxpdir}/..
|
||||
distdir=${wxpdir}/dist
|
||||
builddir=${wxpdir}/_build_rpm
|
||||
rpmtop=${builddir}/rpmtop
|
||||
cvsroot=:pserver:anoncvs@cvs.wxwindows.org:/home/wxcvs
|
||||
cvsroot=:pserver:anoncvs@cvs.wxwindows.org:/pack/cvsroots/wxwindows
|
||||
pythonbin=/usr/bin/python
|
||||
port=GTK
|
||||
lcport=gtk
|
||||
unicode=0
|
||||
tarname=wxPythonSrc
|
||||
debug=0
|
||||
|
||||
rpmflag=-ba
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Check parameters
|
||||
|
||||
function useage {
|
||||
echo "Usage: $0 cvs_tag wx_version py_version [command flags...]"
|
||||
echo " cvs_tag Tag to use for CVS export"
|
||||
echo "Usage: $0 wx_version py_version [command flags...]"
|
||||
echo " wx_version String to use for version in filenames, etc."
|
||||
echo " py_version String to append to $pythonbin (which python"
|
||||
echo " version to use.)"
|
||||
echo ""
|
||||
echo "command flags:"
|
||||
echo " skipcvs Don't do the CVS export"
|
||||
echo " skipcopy Don't copy the files for the tarball from the workspace"
|
||||
echo " skiptar Don't build the tarball"
|
||||
echo " skiprpm Don't build the RPM (but why?)"
|
||||
echo " skipclean Don't do the cleanup at the end"
|
||||
echo " gtk2 Build using wxGTK2 and Unicode"
|
||||
echo " x11 Build using wxX11"
|
||||
echo " speconly Do nothing but write the RPM spec file"
|
||||
echo " debug Make a __WXDEBUG__ version"
|
||||
echo " smp Add SMP=2 to the envivonment to speed wxGTK build"
|
||||
echo " srpm Only make the SRPM"
|
||||
# echo " smp Add SMP=2 to the envivonment to speed wxGTK build"
|
||||
}
|
||||
|
||||
if [ $# -lt 3 ]; then
|
||||
if [ $# -lt 2 ]; then
|
||||
useage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cvs_tag=$1
|
||||
version=$2
|
||||
pyver=$3
|
||||
shift;shift;shift
|
||||
version=$1
|
||||
pyver=$2
|
||||
shift;shift
|
||||
|
||||
ver2=`echo ${version} | cut -c 1,2,3`
|
||||
tarver=${tarname}-${version}
|
||||
|
||||
|
||||
python=${pythonbin}${pyver}
|
||||
if [ ! -e ${python} ]; then
|
||||
echo "${python} not found!"
|
||||
@@ -70,12 +71,12 @@ function makespec {
|
||||
cat ${spectemplate} \
|
||||
| sed s:@PYTHON@:${python}:g \
|
||||
| sed s:@PYVER@:${pyver}:g \
|
||||
| sed s:@DEBUG@:${debug}:g \
|
||||
| sed s:@PORT@:${port}:g \
|
||||
| sed s:@LCPORT@:${lcport}:g \
|
||||
| sed s:@TARNAME@:${tarname}:g \
|
||||
| sed s:@VERSION@:${version}:g \
|
||||
| sed s:@VER2@:${ver2}:g \
|
||||
| sed s:@UNICODE@:${unicode}:g \
|
||||
> ${distdir}/wxPython${port}.spec
|
||||
}
|
||||
|
||||
@@ -83,13 +84,15 @@ function makespec {
|
||||
|
||||
for flag in $*; do
|
||||
case ${flag} in
|
||||
skipcvs) skipcvs=1 ;;
|
||||
skipclean) skipclean=1 ;;
|
||||
skiptar) skiptar=1 ;;
|
||||
skiprpm) skiprpm=1 ;;
|
||||
smp) export SMP=2 ;;
|
||||
debug) debug=1 ;;
|
||||
speconly) makespec; exit 0 ;;
|
||||
skipcopy) skipcopy=1 ;;
|
||||
skipclean) skipclean=1 ;;
|
||||
skiptar) skiptar=1 ;;
|
||||
skiprpm) skiprpm=1 ;;
|
||||
gtk2) unicode=1; port=GTK2; lcport=gtk2 ;;
|
||||
x11) port=X11; lcport=x11 ;;
|
||||
smp) export SMP=2 ;;
|
||||
speconly) makespec; exit 0 ;;
|
||||
srpm) rpmflag=-bs; ;;
|
||||
|
||||
*) echo "Unknown flag \"${flag}\""
|
||||
useage
|
||||
@@ -119,38 +122,57 @@ done
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# Get the sources from CVS
|
||||
# Copy the sources from my CVS workspace
|
||||
|
||||
if [ -z "${skipcvs}" ]; then
|
||||
echo "*** Exporting CVS archive..."
|
||||
if [ -z "${skipcopy}" ]; then
|
||||
echo "*** Copying CVS tree"
|
||||
pushd ${builddir} > /dev/null
|
||||
if [ -e ${tarver} ]; then
|
||||
rm -rf ${tarver}
|
||||
fi
|
||||
cvs -d ${cvsroot} export -r ${cvs_tag} -d ${tarver} wxWindows > /dev/null 2>&1
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "*** CVS failure, exiting."
|
||||
exit 1
|
||||
rm -rf ${tarver}
|
||||
fi
|
||||
mkdir -p ${tarver}
|
||||
|
||||
echo "*** Removing unneeded stuff from CVS tree"
|
||||
# copy root dir contents
|
||||
cp -pf --link ${wxdir}/* ${tarver} > /dev/null 2>&1
|
||||
|
||||
# copy all top dirs except CVS, build, demos, utils, samples, and wxPython
|
||||
for d in art contrib debian distrib docs include lib locale misc src; do
|
||||
cp -Rpf --link ${wxdir}/$d ${tarver} #> /dev/null 2>&1
|
||||
done
|
||||
|
||||
# now do the same thing for wxPython, skipping it's build dirs and such
|
||||
mkdir ${tarver}/wxPython
|
||||
cp -pf --link ${wxdir}/wxPython/* ${tarver}/wxPython > /dev/null 2>&1
|
||||
for d in contrib demo distrib distutils samples scripts src wxPython; do
|
||||
cp -Rpf --link ${wxdir}/wxPython/$d ${tarver}/wxPython #> /dev/null 2>&1
|
||||
done
|
||||
|
||||
|
||||
echo "*** Removing uneeded stuff from copy of CVS tree"
|
||||
pushd ${tarver} > /dev/null
|
||||
rm `find . -name .cvsignore`
|
||||
rm -rf `find . -name CVS`
|
||||
rm *.spec
|
||||
rm -rf demos
|
||||
# rm -rf docs
|
||||
rm -rf docs/html
|
||||
rm -rf docs/latex
|
||||
rm -rf samples
|
||||
rm -rf utils
|
||||
# rm -rf include/wx/mgl
|
||||
# rm -rf include/wx/motif
|
||||
# rm -rf include/wx/os2
|
||||
# rm -rf src/mgl
|
||||
# rm -rf src/motif
|
||||
# rm -rf src/os2
|
||||
rm -rf wxPython/wxSWIG
|
||||
rm -rf wxPython/tests
|
||||
rm -rf contrib/docs
|
||||
rm -rf contrib/samples
|
||||
rm locale/*.mo
|
||||
rm `find . -name ".#*"`
|
||||
rm `find . -name "*~"`
|
||||
rm `find . -name "*.pyc"`
|
||||
rm `find . -name "core"`
|
||||
rm `find . -name "core.[0-9]*"`
|
||||
|
||||
rm -f wxPython/wxPython/* > /dev/null 2>&1
|
||||
rm wxPython/demo/.setup.sh
|
||||
rm -rf wxPython/contrib/art2d
|
||||
rm -rf wxPython/contrib/canvas
|
||||
rm -rf wxPython/contrib/canvas2
|
||||
rm -rf wxPython/contrib/gizmos/contrib
|
||||
rm -rf wxPython/contrib/ogl/contrib
|
||||
rm -rf wxPython/contrib/stc/contrib
|
||||
rm -rf wxPython/contrib/xrc/contrib
|
||||
|
||||
popd > /dev/null
|
||||
popd > /dev/null
|
||||
@@ -171,9 +193,16 @@ cp ${distdir}/wxPython${port}.spec ${builddir}/${tarver}/wxPython${port}.spec
|
||||
# Build the tar file
|
||||
|
||||
if [ -z "${skiptar}" ]; then
|
||||
echo "*** Creating language catalogs..."
|
||||
pushd ${builddir}/${tarver}/locale > /dev/null
|
||||
make allmo
|
||||
popd > /dev/null
|
||||
|
||||
echo "*** Creating tarball..."
|
||||
cp distrib/README.1st.txt ${builddir}/${tarver}
|
||||
pushd ${builddir} > /dev/null
|
||||
tar cvf ${distdir}/${tarver}.tar ${tarver} > /dev/null
|
||||
|
||||
echo "*** Compressing..."
|
||||
if [ -e ${distdir}/${tarver}.tar.gz ]; then
|
||||
rm ${distdir}/${tarver}.tar.gz
|
||||
@@ -189,7 +218,7 @@ fi
|
||||
if [ -z "${skiprpm}" ]; then
|
||||
echo "*** Building RPMs..."
|
||||
cp ${distdir}/${tarver}.tar.gz ${rpmtop}/SOURCES
|
||||
rpm -ba \
|
||||
rpmbuild ${rpmflag} \
|
||||
--define "_topdir ${rpmtop}" \
|
||||
--define "_tmppath ${builddir}" \
|
||||
${distdir}/wxPython${port}.spec
|
||||
|
@@ -1,62 +0,0 @@
|
||||
#!/bin/bash
|
||||
#----------------------------------------------------------------------
|
||||
# Make a source distribution as a tar.gz file. This script should be
|
||||
# run from the directory that holds the wxPython dir (../..) and be
|
||||
# given a version number as an parameter. The best way to do this is
|
||||
# run "make dist" in the wxPython/src/ directory.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify a version number on the command line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d wxPython ]; then
|
||||
echo "Please run this script from the root wxPython directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir _distrib_tgz
|
||||
mkdir _distrib_tgz/wxPython-$1
|
||||
|
||||
# Copy license files
|
||||
cp $WXWIN/docs/gpl.txt _distrib_tgz/wxPython-$1
|
||||
cp $WXWIN/docs/lgpl.txt _distrib_tgz/wxPython-$1
|
||||
cp $WXWIN/docs/licence.txt _distrib_tgz/wxPython-$1
|
||||
cp $WXWIN/docs/licendoc.txt _distrib_tgz/wxPython-$1
|
||||
cp $WXWIN/docs/preamble.txt _distrib_tgz/wxPython-$1
|
||||
|
||||
# Copy files from the live dirs
|
||||
# first, get a list of files
|
||||
for x in `cat distrib/wxPython.rsp`; do
|
||||
ls $x >> _distrib_tgz/filelist
|
||||
done
|
||||
|
||||
# and make a tar file containing those files
|
||||
tar cf _distrib_tgz/dist-temp.tar -T _distrib_tgz/filelist
|
||||
|
||||
# now untar it in the right place
|
||||
cd _distrib_tgz/wxPython-$1
|
||||
tar xf ../dist-temp.tar
|
||||
cd ..
|
||||
|
||||
# update a few things
|
||||
rm wxPython-$1/src/gtk/helpers.cpp
|
||||
touch `find wxPython-$1 -name "*.cpp"`
|
||||
touch `find wxPython-$1 -name "*.py"`
|
||||
|
||||
# Finally, make the finished tar file
|
||||
tar cvf ../distrib/wxPython-$1.tar wxPython-$1
|
||||
gzip ../distrib/wxPython-$1.tar
|
||||
|
||||
cd ..
|
||||
rm -rf _distrib_tgz
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -1,38 +0,0 @@
|
||||
#!/bin/bash
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
if [ -z $1 ]; then
|
||||
echo "Please specify a version number on the command line."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d wxPython ]; then
|
||||
echo "Please run this script from the root wxPython directory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir _distrib_tgz
|
||||
mkdir _distrib_tgz/wxPython-$1
|
||||
|
||||
cp -R tools _distrib_tgz/wxPython-$1
|
||||
|
||||
# do some cleanup
|
||||
rm -rf `find _distrib_tgz/wxPython-$1 -name CVS`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name "*.pyc"`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name .cvsignore`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name core`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name wxPython`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name *.o`
|
||||
rm -f `find _distrib_tgz/wxPython-$1 -name *.so`
|
||||
|
||||
cd _distrib_tgz
|
||||
|
||||
tar cvf ../dist/wxPython-tools-$1.tar wxPython-$1
|
||||
gzip ../dist/wxPython-tools-$1.tar
|
||||
|
||||
cd ..
|
||||
rm -r _distrib_tgz
|
||||
|
||||
|
||||
|
||||
|
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
cd ~/wx/utils/wxPython
|
||||
|
||||
find . -name "*.py" > filelist
|
||||
find . -name "*.i" >> filelist
|
||||
find . -name "*.h" >> filelist
|
||||
find . -name "*.cpp" >> filelist
|
||||
|
||||
cat filelist | zip -r -u -@ xfer.zip
|
@@ -1,9 +0,0 @@
|
||||
|
||||
|
||||
cd %WXWIN%\utils\wxPython
|
||||
find . -name "*.py" > filelist
|
||||
find . -name "*.i" >> filelist
|
||||
find . -name "*.h" >> filelist
|
||||
find . -name "*.cpp" >> filelist
|
||||
|
||||
cat filelist | zip -r -u -@ xfer.zip
|
31
wxPython/distrib/viewdocs.py
Executable file
31
wxPython/distrib/viewdocs.py
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
import sys, os, glob
|
||||
from wxPython.tools import helpviewer
|
||||
|
||||
|
||||
# Figure out the path where this app is located
|
||||
if __name__ == '__main__':
|
||||
basePath = os.path.dirname(sys.argv[0])
|
||||
else:
|
||||
basePath = os.path.dirname(__file__)
|
||||
|
||||
|
||||
# setup the args
|
||||
args = ['',
|
||||
'--cache='+basePath,
|
||||
os.path.join(basePath, 'wx.zip'),
|
||||
os.path.join(basePath, 'ogl.zip'),
|
||||
]
|
||||
|
||||
# add any other .zip files found
|
||||
for file in glob.glob(os.path.join(basePath, "*.zip")):
|
||||
if file not in args:
|
||||
args.append(file)
|
||||
|
||||
# launch helpviewer
|
||||
helpviewer.main(args)
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
|
@@ -1,7 +0,0 @@
|
||||
|
||||
run, c:\\Tools\\Wise\\WISE32.EXE wxPython.wse
|
||||
winwaitactive, wxPython.wse - Wise Installation System
|
||||
send, !ic
|
||||
sleep, 1000
|
||||
winwaitactive, wxPython.wse - Wise Installation System
|
||||
send, !fx
|
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 128 KiB |
@@ -1,106 +0,0 @@
|
||||
*.txt
|
||||
|
||||
demo/*.py
|
||||
demo/bitmaps/*.bmp
|
||||
demo/bitmaps/*.ico
|
||||
demo/bitmaps/*.gif
|
||||
demo/bitmaps/*.png
|
||||
demo/bitmaps/*.jpg
|
||||
demo/README.txt
|
||||
demo/*.xml
|
||||
demo/data/*.png
|
||||
demo/data/*.htm
|
||||
demo/data/*.html
|
||||
demo/data/*.bmp
|
||||
demo/data/*.txt
|
||||
demo/data/*.i
|
||||
demo/data/*.h
|
||||
|
||||
distrib/build.py
|
||||
distrib/wxPython.spec
|
||||
|
||||
wxPython/lib/*.py
|
||||
wxPython/lib/*.txt
|
||||
wxPython/lib/sizers/*.py
|
||||
wxPython/lib/sizers/*.txt
|
||||
wxPython/lib/editor/*.py
|
||||
wxPython/lib/editor/*.txt
|
||||
|
||||
|
||||
src/build.cfg
|
||||
src/*.i
|
||||
src/*.py
|
||||
src/*.cpp
|
||||
src/*.c
|
||||
src/*.h
|
||||
src/*.ico
|
||||
src/*.def
|
||||
src/*.rc
|
||||
|
||||
src/msw/*.cpp
|
||||
src/msw/*.h
|
||||
src/msw/*.py
|
||||
|
||||
src/gtk/*.cpp
|
||||
src/gtk/*.h
|
||||
src/gtk/*.py
|
||||
|
||||
src/motif/*.cpp
|
||||
src/motif/*.h
|
||||
src/motif/*.py
|
||||
|
||||
|
||||
contrib/glcanvas/build.cfg
|
||||
contrib/glcanvas/*.i
|
||||
contrib/glcanvas/*.py
|
||||
contrib/glcanvas/*.cpp
|
||||
contrib/glcanvas/*.c
|
||||
contrib/glcanvas/*.h
|
||||
contrib/glcanvas/*.def
|
||||
contrib/glcanvas/*.rc
|
||||
contrib/glcanvas/msw/*.cpp
|
||||
contrib/glcanvas/msw/*.h
|
||||
contrib/glcanvas/msw/*.py
|
||||
contrib/glcanvas/gtk/*.cpp
|
||||
contrib/glcanvas/gtk/*.h
|
||||
contrib/glcanvas/gtk/*.py
|
||||
|
||||
contrib/ogl/build.cfg
|
||||
contrib/ogl/*.txt
|
||||
contrib/ogl/*.i
|
||||
contrib/ogl/*.py
|
||||
contrib/ogl/*.cpp
|
||||
contrib/ogl/*.c
|
||||
contrib/ogl/*.h
|
||||
contrib/ogl/*.def
|
||||
contrib/ogl/*.rc
|
||||
contrib/ogl/contrib/include/wx/ogl/*.h
|
||||
contrib/ogl/contrib/src/ogl/*.cpp
|
||||
|
||||
contrib/stc/build.cfg
|
||||
contrib/stc/*.txt
|
||||
contrib/stc/*.i
|
||||
contrib/stc/*.py
|
||||
contrib/stc/*.cpp
|
||||
contrib/stc/*.c
|
||||
contrib/stc/*.h
|
||||
contrib/stc/*.def
|
||||
contrib/stc/*.rc
|
||||
contrib/stc/*.cpp
|
||||
contrib/stc/*.h
|
||||
contrib/stc/*.py
|
||||
contrib/stc/contrib/include/wx/stc/*.h
|
||||
contrib/stc/contrib/src/stc/*.h
|
||||
contrib/stc/contrib/src/stc/*.cpp
|
||||
contrib/stc/contrib/src/stc/*.txt
|
||||
contrib/stc/contrib/src/stc/*.py
|
||||
contrib/stc/contrib/src/stc/scintilla/include/*.h
|
||||
contrib/stc/contrib/src/stc/scintilla/include/*.iface
|
||||
contrib/stc/contrib/src/stc/scintilla/src/*.h
|
||||
contrib/stc/contrib/src/stc/scintilla/src/*.cxx
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,33 +1,34 @@
|
||||
%define pref %{_prefix}
|
||||
%define python @PYTHON@
|
||||
%define pyver @PYVER@
|
||||
%define debug @DEBUG@
|
||||
%define port @PORT@
|
||||
%define lcport @LCPORT@
|
||||
%define unicode @UNICODE@
|
||||
%define tarname @TARNAME@
|
||||
%define version @VERSION@
|
||||
%define ver2 @VER2@
|
||||
%define release 1
|
||||
%define wxpref %{pref}/lib/wxPython
|
||||
%define name wxPython%{port}-py%{pyver}
|
||||
|
||||
# Should --enable-debug_flag be used in release builds?
|
||||
|
||||
# Should the builtin image and etc. libs be used, or system libs?
|
||||
# Distro specific RPMs should probably set this to 0, generic ones
|
||||
# should use 1
|
||||
%define builtin_libs 1
|
||||
|
||||
|
||||
# Should --enable-debug_flag be used in release builds? Using it
|
||||
# defines __WXDEBUG__ and gives us runtime diagnostics that are turned
|
||||
# into Python exceptions starting with 2.3.4. (So turning it on is a
|
||||
# very helpful thing IMO and is recommended.)
|
||||
%define debug_flag 1
|
||||
|
||||
|
||||
%if %{debug}
|
||||
%define name wxPython%{port}-py%{pyver}-dbg
|
||||
%define othername wxPython%{port}-py%{pyver}
|
||||
%else
|
||||
%define name wxPython%{port}-py%{pyver}
|
||||
%define othername wxPython%{port}-py%{pyver}-dbg
|
||||
%endif
|
||||
|
||||
|
||||
%if %{debug} || %{debug_flag}
|
||||
%define wxconfigname %{wxpref}/bin/wx%{lcport}d-%{ver2}-config
|
||||
%else
|
||||
%define wxconfigname %{wxpref}/bin/wx%{lcport}-%{ver2}-config
|
||||
%endif
|
||||
# build the name of the real wx-config from the port, flags, etc.
|
||||
%define dbgflg %(if [ "%{debug_flag}" = "1" ]; then echo d; fi)
|
||||
%define uniflg %(if [ "%{unicode}" = "1" ]; then echo u; fi)
|
||||
%define wxconfigname %{wxpref}/bin/wx%{lcport}%{uniflg}%{dbgflg}-%{ver2}-config
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
@@ -44,13 +45,9 @@ BuildRoot: %{_tmppath}/%{name}-buildroot
|
||||
Prefix: %{pref}
|
||||
#BuildRequires: %{python}
|
||||
|
||||
Provides: wxwin
|
||||
Provides: wx%{port} = %{version}
|
||||
Provides: wxPython = %{version}
|
||||
Provides: wxPython%{port} = %{version}
|
||||
|
||||
|
||||
# They conflict with each other, so let them replace each other
|
||||
Obsoletes: %{othername}
|
||||
# old wxPython packages
|
||||
Obsoletes: wxPython
|
||||
|
||||
@@ -65,13 +62,13 @@ This package is implemented using the %{port} port of wxWindows, and
|
||||
includes the wx%{port} shared libs and etc.
|
||||
|
||||
|
||||
%package devel
|
||||
%package -n wxPython%{port}-devel
|
||||
Summary: wxPython%{port} development files
|
||||
Group: Development/Libraries
|
||||
Requires: wxPython%{port} = %{version}
|
||||
|
||||
|
||||
%description devel
|
||||
%description -n wxPython%{port}-devel
|
||||
This packages contains the headers and etc. for building apps or
|
||||
Python extension modules that use the same wx%{port} shared libraries
|
||||
that wxPython uses.
|
||||
@@ -89,87 +86,144 @@ else
|
||||
MAKE="make"
|
||||
fi
|
||||
|
||||
WXDIR=`pwd`
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
# Configure, trying to reduce dependencies
|
||||
../configure --with-%{lcport} \
|
||||
# Configure, trying to reduce external dependencies
|
||||
$WXDIR/configure --with-%{lcport} \
|
||||
--prefix=%{wxpref} \
|
||||
--disable-soname \
|
||||
--enable-rpath=%{wxpref}/lib \
|
||||
--with-opengl \
|
||||
%if %{debug}
|
||||
--enable-debug \
|
||||
%else
|
||||
%if %{unicode}
|
||||
--enable-gtk2 \
|
||||
--enable-unicode \
|
||||
%endif
|
||||
--enable-geometry \
|
||||
--enable-optimise \
|
||||
%if %{debug_flag}
|
||||
--enable-debug_flag \
|
||||
%endif
|
||||
%endif
|
||||
%if %{builtin_libs}
|
||||
--with-libjpeg=builtin \
|
||||
--with-libpng=builtin \
|
||||
--with-libtiff=builtin \
|
||||
--with-zlib=builtin \
|
||||
|
||||
## --enable-debug_flag \
|
||||
## --with-odbc \
|
||||
%endif
|
||||
|
||||
|
||||
# Build wxWindows
|
||||
$MAKE
|
||||
|
||||
cd ../locale
|
||||
make allmo
|
||||
|
||||
|
||||
# ** Unfortunately we have to do a bit of installation here so wxPython
|
||||
# can be built. Perhaps wx-config should be changed to be able to be
|
||||
# used from the build dir, maybe with an --inplace flag... Move these
|
||||
# three lines to %install if/when that happens.
|
||||
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
|
||||
cd ../build
|
||||
make prefix=$RPM_BUILD_ROOT%{wxpref} install
|
||||
|
||||
|
||||
# Now build wxPython
|
||||
cd ../wxPython
|
||||
cd $WXDIR/wxPython
|
||||
%{python} setup.py \
|
||||
IN_CVS_TREE=1 \
|
||||
NO_SCRIPTS=1 \
|
||||
WX_CONFIG="$RPM_BUILD_ROOT%{wxpref}/bin/wx-config --prefix=$RPM_BUILD_ROOT%{wxpref}" \
|
||||
WXPORT=%{lcport} \
|
||||
UNICODE=%{unicode} \
|
||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
|
||||
build
|
||||
|
||||
## WX_CONFIG="$WXDIR/build/wx-config --inplace --prefix=$RPM_BUILD_ROOT%{wxpref}" \
|
||||
|
||||
|
||||
|
||||
# Build wxrc (XRC resource tool) but don't use the makefiles since they expect
|
||||
# a shared version of the xrc lib to have been built...
|
||||
cd $WXDIR/contrib/utils/wxrc
|
||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build"
|
||||
wCC=`$WX_CONFIG --cc`
|
||||
wCXX=`$WX_CONFIG --cxx`
|
||||
|
||||
for f in wxrc.cpp ../../src/xrc/*.cpp; do
|
||||
echo $f
|
||||
$wCXX `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
|
||||
done
|
||||
for f in ../../src/xrc/expat/xmlparse/xmlparse.c ../../src/xrc/expat/xmltok/xmlrole.c ../../src/xrc/expat/xmltok/xmltok.c; do
|
||||
echo $f
|
||||
$wCC `$WX_CONFIG --cxxflags` -I ../../include -I ../../src/xrc/expat/xmlparse -I ../../src/xrc/expat/xmltok -c $f
|
||||
done
|
||||
|
||||
# the handlers are not needed
|
||||
rm xh_*.o xmlrsall.o
|
||||
|
||||
$wCXX `$WX_CONFIG --libs` *.o -o wxrc
|
||||
strip wxrc
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
%install
|
||||
%find_lang wxstd
|
||||
cd wxPython
|
||||
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
# install wxWindows
|
||||
WXDIR=`pwd`
|
||||
cd build
|
||||
make prefix=$RPM_BUILD_ROOT%{wxpref} install
|
||||
|
||||
# install wxPython
|
||||
cd $WXDIR/wxPython
|
||||
%{python} setup.py \
|
||||
IN_CVS_TREE=1 \
|
||||
NO_SCRIPTS=1 \
|
||||
WXPORT=%{lcport} \
|
||||
UNICODE=%{unicode} \
|
||||
WX_CONFIG="$RPM_BUILD_ROOT%{wxpref}/bin/wx-config --prefix=$RPM_BUILD_ROOT%{wxpref}" \
|
||||
install \
|
||||
--root=$RPM_BUILD_ROOT
|
||||
|
||||
# Since I want this RPM to be as generic as possible I won't let
|
||||
# distutils copy the scripts, since it will mangle the #! line
|
||||
# to use the real python pathname. Since some distros install
|
||||
# python 2.2 as python2 and others as python, then I can't let
|
||||
# it do that otherwise the dependencies will be fouled up. Copy
|
||||
# them manually instead:
|
||||
# distutils copy the scripts since it will mangle the #! line to use
|
||||
# the real python pathname. Since some distros install python 2.2 as
|
||||
# python2 and others as python, then I can't let distutils do that
|
||||
# otherwise the dependencies will be fouled up. Copy them manually
|
||||
# instead, leaving the #!/bin/env line intact.
|
||||
#
|
||||
# TODO: Should this be dependent on %{builtin_libs} or something like it?
|
||||
|
||||
mkdir -p $RPM_BUILD_ROOT/usr/bin
|
||||
for s in \
|
||||
helpviewer \
|
||||
img2png \
|
||||
img2py \
|
||||
img2xpm \
|
||||
pycrust \
|
||||
pycwrap \
|
||||
pyshell \
|
||||
xrced; do
|
||||
cp scripts/$s $RPM_BUILD_ROOT/usr/bin
|
||||
cp scripts/$s $RPM_BUILD_ROOT/%{pref}/bin
|
||||
done
|
||||
|
||||
|
||||
# Install wxrc
|
||||
cp $WXDIR/contrib/utils/wxrc/wxrc $RPM_BUILD_ROOT/%{pref}/bin
|
||||
|
||||
|
||||
# Generate the filelists. For some reason the %defattr below is still
|
||||
# resulting in many (but not all) files not owned by root when just
|
||||
# specifying directories and wildcards to be included in each package.
|
||||
# So instead we'll build some explicit filelists here and use %attr on
|
||||
# each entry.
|
||||
cd $WXDIR
|
||||
mkdir -p $RPM_BUILD_ROOT%{pref}/share/doc
|
||||
GFL="%{python} wxPython/distrib/genfilelist.py"
|
||||
$GFL $RPM_BUILD_ROOT %{pref} > FILELIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{pref}/bin >> FILELIST
|
||||
$GFL $RPM_BUILD_ROOT %{pref}/lib >> FILELIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{pref}/lib/python%{pyver} >> FILELIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{pref}/share >> FILELIST
|
||||
$GFL $RPM_BUILD_ROOT %{wxpref} >> FILELIST
|
||||
$GFL $RPM_BUILD_ROOT %{wxpref}/lib >> FILELIST
|
||||
$GFL $RPM_BUILD_ROOT "%{wxpref}/lib/libwx*" >> FILELIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{wxpref}/share >> FILELIST
|
||||
|
||||
$GFL $RPM_BUILD_ROOT %{wxpref}/include > DEVELLIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{wxpref}/include/wx >> DEVELLIST
|
||||
$GFL -r $RPM_BUILD_ROOT %{wxpref}/lib/wx >> DEVELLIST
|
||||
$GFL $RPM_BUILD_ROOT %{wxconfigname} >> DEVELLIST
|
||||
$GFL $RPM_BUILD_ROOT %{wxpref}/bin/wx-config >> DEVELLIST
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
@@ -178,40 +232,16 @@ done
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
%post
|
||||
/sbin/ldconfig
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
%files
|
||||
%doc docs/preamble.txt
|
||||
%doc docs/licence.txt
|
||||
%doc docs/readme.txt
|
||||
%doc docs/changes.txt
|
||||
%doc wxPython/README.txt
|
||||
%doc wxPython/CHANGES.txt
|
||||
%files -f FILELIST
|
||||
%defattr(-,root,root)
|
||||
%{wxpref}/lib/libwx*
|
||||
%{pref}/lib/python*
|
||||
%{wxpref}/share/
|
||||
%{pref}/bin/*
|
||||
%doc docs/preamble.txt docs/licence.txt docs/readme.txt docs/changes.txt
|
||||
%doc wxPython/README.txt wxPython/CHANGES.txt
|
||||
|
||||
|
||||
%files devel
|
||||
%files -n wxPython%{port}-devel -f DEVELLIST
|
||||
%defattr(-,root,root)
|
||||
%{wxpref}/include/wx
|
||||
%{wxpref}/lib/wx
|
||||
%{wxconfigname}
|
||||
%{wxpref}/bin/wx-config
|
||||
|
||||
|
||||
#----------------------------------------------------------------
|
||||
%changelog
|
||||
|
||||
# end of file
|
||||
|
@@ -1,4 +0,0 @@
|
||||
|
||||
find . | grep -v "/CVS" | grep -v "./build/" | grep -v "./distrib/" | grep -v ".pyd" | grep -v ".pdb" | grep -v "contrib/ogl/contrib" | grep -v "contrib/stc/contrib" | zip -@ wxPython.zip
|
||||
|
||||
|
@@ -1,44 +0,0 @@
|
||||
@echo off
|
||||
|
||||
rem **** Make a directory to build up a distribution tree
|
||||
md _distrib_zip
|
||||
md _distrib_zip\wxPython-%1
|
||||
|
||||
REM rem **** Copy the license files
|
||||
REM copy %WXWIN%\docs\gpl.txt _distrib_zip\wxPython-%1
|
||||
REM copy %WXWIN%\docs\lgpl.txt _distrib_zip\wxPython-%1
|
||||
REM copy %WXWIN%\docs\licence.txt _distrib_zip\wxPython-%1
|
||||
REM copy %WXWIN%\docs\licendoc.txt _distrib_zip\wxPython-%1
|
||||
REM copy %WXWIN%\docs\preamble.txt _distrib_zip\wxPython-%1
|
||||
|
||||
REM rem **** Make a zip fron the live files
|
||||
REM zip -@ -r _distrib_zip\temp.zip < distrib\wxPython.rsp
|
||||
|
||||
REM rem **** Unzip it in our build dir
|
||||
REM cd _distrib_zip\wxPython-%1
|
||||
REM unzip ..\temp.zip
|
||||
|
||||
REM rem **** zip up the build dir
|
||||
REM cd ..
|
||||
REM zip -r ..\distrib\wxPython-src-%1.zip wxPython-%1
|
||||
|
||||
cd _distrib_zip
|
||||
|
||||
rem **** copy the docs into the tree
|
||||
md wxPython-%1\docs
|
||||
md wxPython-%1\docs\wx
|
||||
md wxPython-%1\docs\ogl
|
||||
copy %WXWIN%\docs\html\wx\*.* wxPython-%1\docs\wx
|
||||
copy wxPython-%1\docs\wx\wx.htm wxPython-%1\docs\wx\index.htm
|
||||
copy %WXWIN%\docs\html\ogl\*.* wxPython-%1\docs\ogl
|
||||
copy wxPython-%1\docs\ogl\ogl.htm wxPython-%1\docs\ogl\index.htm
|
||||
|
||||
rem **** zip up the docs
|
||||
rem zip -r ..\distrib\wxPython-docs-%1.zip wxPython-%1\docs
|
||||
tar cvf ..\dist\wxPython-docs-%1.tar wxPython-%1
|
||||
gzip -9 ..\dist\wxPython-docs-%1.tar
|
||||
|
||||
|
||||
rem **** Cleanup
|
||||
cd ..
|
||||
del /sxzy _distrib_zip
|
Reference in New Issue
Block a user