Updated Installer builder scripts and such for OS X
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25219 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -1 +0,0 @@
|
|||||||
.DS_Store
|
|
@@ -1,3 +0,0 @@
|
|||||||
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.
|
|
||||||
|
|
@@ -1,129 +0,0 @@
|
|||||||
#!/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
|
|
||||||
|
|
@@ -1,6 +0,0 @@
|
|||||||
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
|
|
@@ -1,67 +0,0 @@
|
|||||||
#!/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
|
|
@@ -60,7 +60,6 @@ Title
|
|||||||
Version
|
Version
|
||||||
Description
|
Description
|
||||||
DefaultLocation
|
DefaultLocation
|
||||||
Diskname
|
|
||||||
DeleteWarning
|
DeleteWarning
|
||||||
NeedsAuthorization
|
NeedsAuthorization
|
||||||
DisableStop
|
DisableStop
|
||||||
@@ -71,6 +70,10 @@ Required
|
|||||||
InstallOnly
|
InstallOnly
|
||||||
RequiresReboot
|
RequiresReboot
|
||||||
RootVolumeOnly
|
RootVolumeOnly
|
||||||
|
LongFilenames
|
||||||
|
LibrarySubdirectory
|
||||||
|
AllowBackRev
|
||||||
|
OverwritePermissions
|
||||||
InstallFat\
|
InstallFat\
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -138,7 +141,6 @@ class PackageMaker:
|
|||||||
'Version': None,
|
'Version': None,
|
||||||
'Description': '',
|
'Description': '',
|
||||||
'DefaultLocation': '/',
|
'DefaultLocation': '/',
|
||||||
'Diskname': '(null)',
|
|
||||||
'DeleteWarning': '',
|
'DeleteWarning': '',
|
||||||
'NeedsAuthorization': 'NO',
|
'NeedsAuthorization': 'NO',
|
||||||
'DisableStop': 'NO',
|
'DisableStop': 'NO',
|
||||||
@@ -149,7 +151,12 @@ class PackageMaker:
|
|||||||
'InstallOnly': 'NO',
|
'InstallOnly': 'NO',
|
||||||
'RequiresReboot': 'NO',
|
'RequiresReboot': 'NO',
|
||||||
'RootVolumeOnly' : 'NO',
|
'RootVolumeOnly' : 'NO',
|
||||||
'InstallFat': 'NO'}
|
'InstallFat': 'NO',
|
||||||
|
'LongFilenames': 'YES',
|
||||||
|
'LibrarySubdirectory': 'Standard',
|
||||||
|
'AllowBackRev': 'YES',
|
||||||
|
'OverwritePermissions': 'NO',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, title, version, desc):
|
def __init__(self, title, version, desc):
|
||||||
@@ -201,6 +208,7 @@ class PackageMaker:
|
|||||||
self._addArchive()
|
self._addArchive()
|
||||||
self._addResources()
|
self._addResources()
|
||||||
self._addSizes()
|
self._addSizes()
|
||||||
|
self._addLoc()
|
||||||
|
|
||||||
|
|
||||||
def _makeFolders(self):
|
def _makeFolders(self):
|
||||||
@@ -223,6 +231,7 @@ class PackageMaker:
|
|||||||
|
|
||||||
info = ""
|
info = ""
|
||||||
for f in string.split(PKG_INFO_FIELDS, "\n"):
|
for f in string.split(PKG_INFO_FIELDS, "\n"):
|
||||||
|
if self.packageInfo.has_key(f):
|
||||||
info = info + "%s %%(%s)s\n" % (f, f)
|
info = info + "%s %%(%s)s\n" % (f, f)
|
||||||
info = info % self.packageInfo
|
info = info % self.packageInfo
|
||||||
base = self.packageInfo["Title"] + ".info"
|
base = self.packageInfo["Title"] + ".info"
|
||||||
@@ -351,6 +360,11 @@ class PackageMaker:
|
|||||||
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
|
format = "NumFiles %d\nInstalledSize %d\nCompressedSize %d\n"
|
||||||
f.write(format % (numFiles, installedSize, zippedSize))
|
f.write(format % (numFiles, installedSize, zippedSize))
|
||||||
|
|
||||||
|
def _addLoc(self):
|
||||||
|
"Write .loc file."
|
||||||
|
base = self.packageInfo["Title"] + ".loc"
|
||||||
|
f = open(join(self.packageResourceFolder, base), "w")
|
||||||
|
f.write('/')
|
||||||
|
|
||||||
# Shortcut function interface
|
# Shortcut function interface
|
||||||
|
|
||||||
|
@@ -54,13 +54,13 @@ class Defaults:
|
|||||||
|
|
||||||
def _getDefaults(cls):
|
def _getDefaults(cls):
|
||||||
defaults = {}
|
defaults = {}
|
||||||
|
for base in cls.__bases__:
|
||||||
|
if hasattr(base, "_getDefaults"):
|
||||||
|
defaults.update(base._getDefaults())
|
||||||
for name, value in cls.__dict__.items():
|
for name, value in cls.__dict__.items():
|
||||||
if name[0] != "_" and not isinstance(value,
|
if name[0] != "_" and not isinstance(value,
|
||||||
(function, classmethod)):
|
(function, classmethod)):
|
||||||
defaults[name] = deepcopy(value)
|
defaults[name] = deepcopy(value)
|
||||||
for base in cls.__bases__:
|
|
||||||
if hasattr(base, "_getDefaults"):
|
|
||||||
defaults.update(base._getDefaults())
|
|
||||||
return defaults
|
return defaults
|
||||||
_getDefaults = classmethod(_getDefaults)
|
_getDefaults = classmethod(_getDefaults)
|
||||||
|
|
||||||
@@ -87,6 +87,9 @@ class BundleBuilder(Defaults):
|
|||||||
# The creator code of the bundle.
|
# The creator code of the bundle.
|
||||||
creator = None
|
creator = None
|
||||||
|
|
||||||
|
# the CFBundleIdentifier (this is used for the preferences file name)
|
||||||
|
bundle_id = None
|
||||||
|
|
||||||
# List of files that have to be copied to <bundle>/Contents/Resources.
|
# List of files that have to be copied to <bundle>/Contents/Resources.
|
||||||
resources = []
|
resources = []
|
||||||
|
|
||||||
@@ -126,7 +129,9 @@ class BundleBuilder(Defaults):
|
|||||||
else:
|
else:
|
||||||
self.creator = "????"
|
self.creator = "????"
|
||||||
plist.CFBundleSignature = self.creator
|
plist.CFBundleSignature = self.creator
|
||||||
if not hasattr(plist, "CFBundleIdentifier"):
|
if self.bundle_id:
|
||||||
|
plist.CFBundleIdentifier = self.bundle_id
|
||||||
|
elif not hasattr(plist, "CFBundleIdentifier"):
|
||||||
plist.CFBundleIdentifier = self.name
|
plist.CFBundleIdentifier = self.name
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
@@ -217,7 +222,8 @@ USE_ZIPIMPORT = "zipimport" in sys.builtin_module_names
|
|||||||
# all the cruft of the real site.py.
|
# all the cruft of the real site.py.
|
||||||
SITE_PY = """\
|
SITE_PY = """\
|
||||||
import sys
|
import sys
|
||||||
del sys.path[1:] # sys.path[0] is Contents/Resources/
|
if not %(semi_standalone)s:
|
||||||
|
del sys.path[1:] # sys.path[0] is Contents/Resources/
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if USE_ZIPIMPORT:
|
if USE_ZIPIMPORT:
|
||||||
@@ -229,8 +235,6 @@ if USE_ZIPIMPORT:
|
|||||||
path = fullname.replace(".", os.sep) + PYC_EXT
|
path = fullname.replace(".", os.sep) + PYC_EXT
|
||||||
return path, MAGIC + '\0\0\0\0' + marshal.dumps(code)
|
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
|
# Extension modules can't be in the modules zip archive, so a placeholder
|
||||||
# is added instead, that loads the extension from a specified location.
|
# is added instead, that loads the extension from a specified location.
|
||||||
@@ -279,10 +283,18 @@ libdir = os.path.join(os.path.dirname(execdir), "Frameworks")
|
|||||||
mainprogram = os.path.join(resdir, "%(mainprogram)s")
|
mainprogram = os.path.join(resdir, "%(mainprogram)s")
|
||||||
|
|
||||||
sys.argv.insert(1, mainprogram)
|
sys.argv.insert(1, mainprogram)
|
||||||
os.environ["PYTHONPATH"] = resdir
|
if %(standalone)s or %(semi_standalone)s:
|
||||||
%(pythonhome)s
|
os.environ["PYTHONPATH"] = resdir
|
||||||
|
if %(standalone)s:
|
||||||
|
os.environ["PYTHONHOME"] = resdir
|
||||||
|
else:
|
||||||
|
pypath = os.getenv("PYTHONPATH", "")
|
||||||
|
if pypath:
|
||||||
|
pypath = ":" + pypath
|
||||||
|
os.environ["PYTHONPATH"] = resdir + pypath
|
||||||
os.environ["PYTHONEXECUTABLE"] = executable
|
os.environ["PYTHONEXECUTABLE"] = executable
|
||||||
os.environ["DYLD_LIBRARY_PATH"] = libdir
|
os.environ["DYLD_LIBRARY_PATH"] = libdir
|
||||||
|
os.environ["DYLD_FRAMEWORK_PATH"] = libdir
|
||||||
os.execve(executable, sys.argv, os.environ)
|
os.execve(executable, sys.argv, os.environ)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@@ -297,6 +309,25 @@ argvemulator.ArgvCollector().mainloop()
|
|||||||
execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s"))
|
execfile(os.path.join(os.path.split(__file__)[0], "%(realmainprogram)s"))
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
#
|
||||||
|
# When building a standalone app with Python.framework, we need to copy
|
||||||
|
# a subset from Python.framework to the bundle. The following list
|
||||||
|
# specifies exactly what items we'll copy.
|
||||||
|
#
|
||||||
|
PYTHONFRAMEWORKGOODIES = [
|
||||||
|
"Python", # the Python core library
|
||||||
|
"Resources/English.lproj",
|
||||||
|
"Resources/Info.plist",
|
||||||
|
"Resources/version.plist",
|
||||||
|
]
|
||||||
|
|
||||||
|
def isFramework():
|
||||||
|
return sys.exec_prefix.find("Python.framework") > 0
|
||||||
|
|
||||||
|
|
||||||
|
LIB = os.path.join(sys.prefix, "lib", "python" + sys.version[:3])
|
||||||
|
SITE_PACKAGES = os.path.join(LIB, "site-packages")
|
||||||
|
|
||||||
|
|
||||||
class AppBuilder(BundleBuilder):
|
class AppBuilder(BundleBuilder):
|
||||||
|
|
||||||
@@ -331,6 +362,12 @@ class AppBuilder(BundleBuilder):
|
|||||||
# If True, build standalone app.
|
# If True, build standalone app.
|
||||||
standalone = 0
|
standalone = 0
|
||||||
|
|
||||||
|
# If True, build semi-standalone app (only includes third-party modules).
|
||||||
|
semi_standalone = 0
|
||||||
|
|
||||||
|
# If set, use this for #! lines in stead of sys.executable
|
||||||
|
python = None
|
||||||
|
|
||||||
# If True, add a real main program that emulates sys.argv before calling
|
# If True, add a real main program that emulates sys.argv before calling
|
||||||
# mainprogram
|
# mainprogram
|
||||||
argv_emulation = 0
|
argv_emulation = 0
|
||||||
@@ -346,7 +383,7 @@ class AppBuilder(BundleBuilder):
|
|||||||
# Include these packages.
|
# Include these packages.
|
||||||
includePackages = []
|
includePackages = []
|
||||||
|
|
||||||
# Strip binaries.
|
# Strip binaries from debug info.
|
||||||
strip = 0
|
strip = 0
|
||||||
|
|
||||||
# Found Python modules: [(name, codeobject, ispkg), ...]
|
# Found Python modules: [(name, codeobject, ispkg), ...]
|
||||||
@@ -356,11 +393,9 @@ class AppBuilder(BundleBuilder):
|
|||||||
missingModules = []
|
missingModules = []
|
||||||
maybeMissingModules = []
|
maybeMissingModules = []
|
||||||
|
|
||||||
# List of all binaries (executables or shared libs), for stripping purposes
|
|
||||||
binaries = []
|
|
||||||
|
|
||||||
def setup(self):
|
def setup(self):
|
||||||
if self.standalone and self.mainprogram is None:
|
if ((self.standalone or self.semi_standalone)
|
||||||
|
and self.mainprogram is None):
|
||||||
raise BundleBuilderError, ("must specify 'mainprogram' when "
|
raise BundleBuilderError, ("must specify 'mainprogram' when "
|
||||||
"building a standalone application.")
|
"building a standalone application.")
|
||||||
if self.mainprogram is None and self.executable is None:
|
if self.mainprogram is None and self.executable is None:
|
||||||
@@ -379,8 +414,11 @@ class AppBuilder(BundleBuilder):
|
|||||||
self.name += ".app"
|
self.name += ".app"
|
||||||
|
|
||||||
if self.executable is None:
|
if self.executable is None:
|
||||||
if not self.standalone:
|
if not self.standalone and not isFramework():
|
||||||
self.symlink_exec = 1
|
self.symlink_exec = 1
|
||||||
|
if self.python:
|
||||||
|
self.executable = self.python
|
||||||
|
else:
|
||||||
self.executable = sys.executable
|
self.executable = sys.executable
|
||||||
|
|
||||||
if self.nibname:
|
if self.nibname:
|
||||||
@@ -388,11 +426,14 @@ class AppBuilder(BundleBuilder):
|
|||||||
if not hasattr(self.plist, "NSPrincipalClass"):
|
if not hasattr(self.plist, "NSPrincipalClass"):
|
||||||
self.plist.NSPrincipalClass = "NSApplication"
|
self.plist.NSPrincipalClass = "NSApplication"
|
||||||
|
|
||||||
|
if self.standalone and isFramework():
|
||||||
|
self.addPythonFramework()
|
||||||
|
|
||||||
BundleBuilder.setup(self)
|
BundleBuilder.setup(self)
|
||||||
|
|
||||||
self.plist.CFBundleExecutable = self.name
|
self.plist.CFBundleExecutable = self.name
|
||||||
|
|
||||||
if self.standalone:
|
if self.standalone or self.semi_standalone:
|
||||||
self.findDependencies()
|
self.findDependencies()
|
||||||
|
|
||||||
def preProcess(self):
|
def preProcess(self):
|
||||||
@@ -405,7 +446,6 @@ class AppBuilder(BundleBuilder):
|
|||||||
execpath = pathjoin(self.execdir, execname)
|
execpath = pathjoin(self.execdir, execname)
|
||||||
if not self.symlink_exec:
|
if not self.symlink_exec:
|
||||||
self.files.append((self.executable, execpath))
|
self.files.append((self.executable, execpath))
|
||||||
self.binaries.append(execpath)
|
|
||||||
self.execpath = execpath
|
self.execpath = execpath
|
||||||
|
|
||||||
if self.mainprogram is not None:
|
if self.mainprogram is not None:
|
||||||
@@ -422,7 +462,7 @@ class AppBuilder(BundleBuilder):
|
|||||||
mainprogrampath = pathjoin(resdirpath, mainprogram)
|
mainprogrampath = pathjoin(resdirpath, mainprogram)
|
||||||
makedirs(resdirpath)
|
makedirs(resdirpath)
|
||||||
open(mainprogrampath, "w").write(ARGV_EMULATOR % locals())
|
open(mainprogrampath, "w").write(ARGV_EMULATOR % locals())
|
||||||
if self.standalone:
|
if self.standalone or self.semi_standalone:
|
||||||
self.includeModules.append("argvemulator")
|
self.includeModules.append("argvemulator")
|
||||||
self.includeModules.append("os")
|
self.includeModules.append("os")
|
||||||
if not self.plist.has_key("CFBundleDocumentTypes"):
|
if not self.plist.has_key("CFBundleDocumentTypes"):
|
||||||
@@ -437,16 +477,16 @@ class AppBuilder(BundleBuilder):
|
|||||||
execdir = pathjoin(self.bundlepath, self.execdir)
|
execdir = pathjoin(self.bundlepath, self.execdir)
|
||||||
bootstrappath = pathjoin(execdir, self.name)
|
bootstrappath = pathjoin(execdir, self.name)
|
||||||
makedirs(execdir)
|
makedirs(execdir)
|
||||||
if self.standalone:
|
if self.standalone or self.semi_standalone:
|
||||||
# XXX we're screwed when the end user has deleted
|
# XXX we're screwed when the end user has deleted
|
||||||
# /usr/bin/python
|
# /usr/bin/python
|
||||||
hashbang = "/usr/bin/python"
|
hashbang = "/usr/bin/python"
|
||||||
pythonhome = 'os.environ["PYTHONHOME"] = resdir'
|
elif self.python:
|
||||||
|
hashbang = self.python
|
||||||
else:
|
else:
|
||||||
hashbang = sys.executable
|
hashbang = os.path.realpath(sys.executable)
|
||||||
while os.path.islink(hashbang):
|
standalone = self.standalone
|
||||||
hashbang = os.readlink(hashbang)
|
semi_standalone = self.semi_standalone
|
||||||
pythonhome = ''
|
|
||||||
open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals())
|
open(bootstrappath, "w").write(BOOTSTRAP_SCRIPT % locals())
|
||||||
os.chmod(bootstrappath, 0775)
|
os.chmod(bootstrappath, 0775)
|
||||||
|
|
||||||
@@ -456,7 +496,7 @@ class AppBuilder(BundleBuilder):
|
|||||||
self.files.append((self.iconfile, pathjoin(resdir, iconbase)))
|
self.files.append((self.iconfile, pathjoin(resdir, iconbase)))
|
||||||
|
|
||||||
def postProcess(self):
|
def postProcess(self):
|
||||||
if self.standalone:
|
if self.standalone or self.semi_standalone:
|
||||||
self.addPythonModules()
|
self.addPythonModules()
|
||||||
if self.strip and not self.symlink:
|
if self.strip and not self.symlink:
|
||||||
self.stripBinaries()
|
self.stripBinaries()
|
||||||
@@ -471,6 +511,31 @@ class AppBuilder(BundleBuilder):
|
|||||||
if self.missingModules or self.maybeMissingModules:
|
if self.missingModules or self.maybeMissingModules:
|
||||||
self.reportMissing()
|
self.reportMissing()
|
||||||
|
|
||||||
|
def addPythonFramework(self):
|
||||||
|
# If we're building a standalone app with Python.framework,
|
||||||
|
# include a minimal subset of Python.framework, *unless*
|
||||||
|
# Python.framework was specified manually in self.libs.
|
||||||
|
for lib in self.libs:
|
||||||
|
if os.path.basename(lib) == "Python.framework":
|
||||||
|
# a Python.framework was specified as a library
|
||||||
|
return
|
||||||
|
|
||||||
|
frameworkpath = sys.exec_prefix[:sys.exec_prefix.find(
|
||||||
|
"Python.framework") + len("Python.framework")]
|
||||||
|
|
||||||
|
version = sys.version[:3]
|
||||||
|
frameworkpath = pathjoin(frameworkpath, "Versions", version)
|
||||||
|
destbase = pathjoin("Contents", "Frameworks", "Python.framework",
|
||||||
|
"Versions", version)
|
||||||
|
for item in PYTHONFRAMEWORKGOODIES:
|
||||||
|
src = pathjoin(frameworkpath, item)
|
||||||
|
dst = pathjoin(destbase, item)
|
||||||
|
self.files.append((src, dst))
|
||||||
|
|
||||||
|
def _getSiteCode(self):
|
||||||
|
return compile(SITE_PY % {"semi_standalone": self.semi_standalone},
|
||||||
|
"<-bundlebuilder.py->", "exec")
|
||||||
|
|
||||||
def addPythonModules(self):
|
def addPythonModules(self):
|
||||||
self.message("Adding Python modules", 1)
|
self.message("Adding Python modules", 1)
|
||||||
|
|
||||||
@@ -488,7 +553,7 @@ class AppBuilder(BundleBuilder):
|
|||||||
# add site.pyc
|
# add site.pyc
|
||||||
sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
|
sitepath = pathjoin(self.bundlepath, "Contents", "Resources",
|
||||||
"site" + PYC_EXT)
|
"site" + PYC_EXT)
|
||||||
writePyc(SITE_CO, sitepath)
|
writePyc(self._getSiteCode(), sitepath)
|
||||||
else:
|
else:
|
||||||
# Create individual .pyc files.
|
# Create individual .pyc files.
|
||||||
for name, code, ispkg in self.pymodules:
|
for name, code, ispkg in self.pymodules:
|
||||||
@@ -511,12 +576,30 @@ class AppBuilder(BundleBuilder):
|
|||||||
self.message("Error: can't strip binaries: no strip program at "
|
self.message("Error: can't strip binaries: no strip program at "
|
||||||
"%s" % STRIP_EXEC, 0)
|
"%s" % STRIP_EXEC, 0)
|
||||||
else:
|
else:
|
||||||
|
import stat
|
||||||
self.message("Stripping binaries", 1)
|
self.message("Stripping binaries", 1)
|
||||||
for relpath in self.binaries:
|
def walk(top):
|
||||||
|
for name in os.listdir(top):
|
||||||
|
path = pathjoin(top, name)
|
||||||
|
if os.path.islink(path):
|
||||||
|
continue
|
||||||
|
if os.path.isdir(path):
|
||||||
|
walk(path)
|
||||||
|
else:
|
||||||
|
mod = os.stat(path)[stat.ST_MODE]
|
||||||
|
if not (mod & 0100):
|
||||||
|
continue
|
||||||
|
relpath = path[len(self.bundlepath):]
|
||||||
self.message("Stripping %s" % relpath, 2)
|
self.message("Stripping %s" % relpath, 2)
|
||||||
abspath = pathjoin(self.bundlepath, relpath)
|
inf, outf = os.popen4("%s -S \"%s\"" %
|
||||||
assert not os.path.islink(abspath)
|
(STRIP_EXEC, path))
|
||||||
rv = os.system("%s -S \"%s\"" % (STRIP_EXEC, abspath))
|
output = outf.read().strip()
|
||||||
|
if output:
|
||||||
|
# usually not a real problem, like when we're
|
||||||
|
# trying to strip a script
|
||||||
|
self.message("Problem stripping %s:" % relpath, 3)
|
||||||
|
self.message(output, 3)
|
||||||
|
walk(self.bundlepath)
|
||||||
|
|
||||||
def findDependencies(self):
|
def findDependencies(self):
|
||||||
self.message("Finding module dependencies", 1)
|
self.message("Finding module dependencies", 1)
|
||||||
@@ -527,8 +610,8 @@ class AppBuilder(BundleBuilder):
|
|||||||
mf.import_hook("zlib")
|
mf.import_hook("zlib")
|
||||||
# manually add our own site.py
|
# manually add our own site.py
|
||||||
site = mf.add_module("site")
|
site = mf.add_module("site")
|
||||||
site.__code__ = SITE_CO
|
site.__code__ = self._getSiteCode()
|
||||||
mf.scan_code(SITE_CO, site)
|
mf.scan_code(site.__code__, site)
|
||||||
|
|
||||||
# warnings.py gets imported implicitly from C
|
# warnings.py gets imported implicitly from C
|
||||||
mf.import_hook("warnings")
|
mf.import_hook("warnings")
|
||||||
@@ -546,24 +629,28 @@ class AppBuilder(BundleBuilder):
|
|||||||
modules = mf.modules.items()
|
modules = mf.modules.items()
|
||||||
modules.sort()
|
modules.sort()
|
||||||
for name, mod in modules:
|
for name, mod in modules:
|
||||||
if mod.__file__ and mod.__code__ is None:
|
|
||||||
# C extension
|
|
||||||
path = mod.__file__
|
path = mod.__file__
|
||||||
|
if path and self.semi_standalone:
|
||||||
|
# skip the standard library
|
||||||
|
if path.startswith(LIB) and not path.startswith(SITE_PACKAGES):
|
||||||
|
continue
|
||||||
|
if path and mod.__code__ is None:
|
||||||
|
# C extension
|
||||||
filename = os.path.basename(path)
|
filename = os.path.basename(path)
|
||||||
|
pathitems = name.split(".")[:-1] + [filename]
|
||||||
|
dstpath = pathjoin(*pathitems)
|
||||||
if USE_ZIPIMPORT:
|
if USE_ZIPIMPORT:
|
||||||
|
if name != "zlib":
|
||||||
|
# neatly pack all extension modules in a subdirectory,
|
||||||
|
# except zlib, since it's neccesary for bootstrapping.
|
||||||
|
dstpath = pathjoin("ExtensionModules", dstpath)
|
||||||
# Python modules are stored in a Zip archive, but put
|
# Python modules are stored in a Zip archive, but put
|
||||||
# extensions in Contents/Resources/.a and add a tiny "loader"
|
# extensions in Contents/Resources/. Add a tiny "loader"
|
||||||
# program in the Zip archive. Due to Thomas Heller.
|
# program in the Zip archive. Due to Thomas Heller.
|
||||||
dstpath = pathjoin("Contents", "Resources", filename)
|
source = EXT_LOADER % {"name": name, "filename": dstpath}
|
||||||
source = EXT_LOADER % {"name": name, "filename": filename}
|
|
||||||
code = compile(source, "<dynloader for %s>" % name, "exec")
|
code = compile(source, "<dynloader for %s>" % name, "exec")
|
||||||
mod.__code__ = code
|
mod.__code__ = code
|
||||||
else:
|
self.files.append((path, pathjoin("Contents", "Resources", dstpath)))
|
||||||
# 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:
|
if mod.__code__ is not None:
|
||||||
ispkg = mod.__path__ is not None
|
ispkg = mod.__path__ is not None
|
||||||
if not USE_ZIPIMPORT or name != "site":
|
if not USE_ZIPIMPORT or name != "site":
|
||||||
@@ -607,7 +694,7 @@ class AppBuilder(BundleBuilder):
|
|||||||
# XXX something decent
|
# XXX something decent
|
||||||
import pprint
|
import pprint
|
||||||
pprint.pprint(self.__dict__)
|
pprint.pprint(self.__dict__)
|
||||||
if self.standalone:
|
if self.standalone or self.semi_standalone:
|
||||||
self.reportMissing()
|
self.reportMissing()
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -647,7 +734,7 @@ def copy(src, dst, mkdirs=0):
|
|||||||
if mkdirs:
|
if mkdirs:
|
||||||
makedirs(os.path.dirname(dst))
|
makedirs(os.path.dirname(dst))
|
||||||
if os.path.isdir(src):
|
if os.path.isdir(src):
|
||||||
shutil.copytree(src, dst)
|
shutil.copytree(src, dst, symlinks=1)
|
||||||
else:
|
else:
|
||||||
shutil.copy2(src, dst)
|
shutil.copy2(src, dst)
|
||||||
|
|
||||||
@@ -704,15 +791,22 @@ Options:
|
|||||||
-c, --creator=CCCC 4-char creator code (default: '????')
|
-c, --creator=CCCC 4-char creator code (default: '????')
|
||||||
--iconfile=FILE filename of the icon (an .icns file) to be used
|
--iconfile=FILE filename of the icon (an .icns file) to be used
|
||||||
as the Finder icon
|
as the Finder icon
|
||||||
|
--bundle-id=ID the CFBundleIdentifier, in reverse-dns format
|
||||||
|
(eg. org.python.BuildApplet; this is used for
|
||||||
|
the preferences file name)
|
||||||
-l, --link symlink files/folder instead of copying them
|
-l, --link symlink files/folder instead of copying them
|
||||||
--link-exec symlink the executable instead of copying it
|
--link-exec symlink the executable instead of copying it
|
||||||
--standalone build a standalone application, which is fully
|
--standalone build a standalone application, which is fully
|
||||||
independent of a Python installation
|
independent of a Python installation
|
||||||
|
--semi-standalone build a standalone application, which depends on
|
||||||
|
an installed Python, yet includes all third-party
|
||||||
|
modules.
|
||||||
|
--python=FILE Python to use in #! line in stead of current Python
|
||||||
--lib=FILE shared library or framework to be copied into
|
--lib=FILE shared library or framework to be copied into
|
||||||
the bundle
|
the bundle
|
||||||
-x, --exclude=MODULE exclude module (with --standalone)
|
-x, --exclude=MODULE exclude module (with --(semi-)standalone)
|
||||||
-i, --include=MODULE include module (with --standalone)
|
-i, --include=MODULE include module (with --(semi-)standalone)
|
||||||
--package=PACKAGE include a whole package (with --standalone)
|
--package=PACKAGE include a whole package (with --(semi-)standalone)
|
||||||
--strip strip binaries (remove debug info)
|
--strip strip binaries (remove debug info)
|
||||||
-v, --verbose increase verbosity level
|
-v, --verbose increase verbosity level
|
||||||
-q, --quiet decrease verbosity level
|
-q, --quiet decrease verbosity level
|
||||||
@@ -734,7 +828,7 @@ def main(builder=None):
|
|||||||
"mainprogram=", "creator=", "nib=", "plist=", "link",
|
"mainprogram=", "creator=", "nib=", "plist=", "link",
|
||||||
"link-exec", "help", "verbose", "quiet", "argv", "standalone",
|
"link-exec", "help", "verbose", "quiet", "argv", "standalone",
|
||||||
"exclude=", "include=", "package=", "strip", "iconfile=",
|
"exclude=", "include=", "package=", "strip", "iconfile=",
|
||||||
"lib=")
|
"lib=", "python=", "semi-standalone", "bundle-id=")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
|
options, args = getopt.getopt(sys.argv[1:], shortopts, longopts)
|
||||||
@@ -747,7 +841,7 @@ def main(builder=None):
|
|||||||
elif opt in ('-n', '--name'):
|
elif opt in ('-n', '--name'):
|
||||||
builder.name = arg
|
builder.name = arg
|
||||||
elif opt in ('-r', '--resource'):
|
elif opt in ('-r', '--resource'):
|
||||||
builder.resources.append(arg)
|
builder.resources.append(os.path.normpath(arg))
|
||||||
elif opt in ('-f', '--file'):
|
elif opt in ('-f', '--file'):
|
||||||
srcdst = arg.split(':')
|
srcdst = arg.split(':')
|
||||||
if len(srcdst) != 2:
|
if len(srcdst) != 2:
|
||||||
@@ -762,10 +856,12 @@ def main(builder=None):
|
|||||||
builder.argv_emulation = 1
|
builder.argv_emulation = 1
|
||||||
elif opt in ('-c', '--creator'):
|
elif opt in ('-c', '--creator'):
|
||||||
builder.creator = arg
|
builder.creator = arg
|
||||||
|
elif opt == '--bundle-id':
|
||||||
|
builder.bundle_id = arg
|
||||||
elif opt == '--iconfile':
|
elif opt == '--iconfile':
|
||||||
builder.iconfile = arg
|
builder.iconfile = arg
|
||||||
elif opt == "--lib":
|
elif opt == "--lib":
|
||||||
builder.libs.append(arg)
|
builder.libs.append(os.path.normpath(arg))
|
||||||
elif opt == "--nib":
|
elif opt == "--nib":
|
||||||
builder.nibname = arg
|
builder.nibname = arg
|
||||||
elif opt in ('-p', '--plist'):
|
elif opt in ('-p', '--plist'):
|
||||||
@@ -782,6 +878,10 @@ def main(builder=None):
|
|||||||
builder.verbosity -= 1
|
builder.verbosity -= 1
|
||||||
elif opt == '--standalone':
|
elif opt == '--standalone':
|
||||||
builder.standalone = 1
|
builder.standalone = 1
|
||||||
|
elif opt == '--semi-standalone':
|
||||||
|
builder.semi_standalone = 1
|
||||||
|
elif opt == '--python':
|
||||||
|
builder.python = arg
|
||||||
elif opt in ('-x', '--exclude'):
|
elif opt in ('-x', '--exclude'):
|
||||||
builder.excludeModules.append(arg)
|
builder.excludeModules.append(arg)
|
||||||
elif opt in ('-i', '--include'):
|
elif opt in ('-i', '--include'):
|
||||||
|
@@ -15,11 +15,13 @@ fi
|
|||||||
|
|
||||||
function usage {
|
function usage {
|
||||||
echo ""
|
echo ""
|
||||||
echo "Usage: $0 wx_version py_version [command flags...]"
|
echo "Usage: $0 [apple|local] [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 ""
|
||||||
echo "command flags:"
|
echo " apple Build for Apple's python in /usr/bin"
|
||||||
|
echo " local Build for a locally installed python in /usr/local/bin"
|
||||||
|
echo " (for example Jaguar's MacPython)"
|
||||||
|
echo ""
|
||||||
|
echo "optional command flags:"
|
||||||
echo " skiptar Don't unpack the tarball"
|
echo " skiptar Don't unpack the tarball"
|
||||||
echo " use_cvs Use the CVS workspace instead of a tarfile"
|
echo " use_cvs Use the CVS workspace instead of a tarfile"
|
||||||
echo " skipconfig Don't run configure"
|
echo " skipconfig Don't run configure"
|
||||||
@@ -27,17 +29,23 @@ function usage {
|
|||||||
echo " skipinstall Don't do the installation step"
|
echo " skipinstall Don't do the installation step"
|
||||||
echo " skipdmg Don't make the package or diskimage"
|
echo " skipdmg Don't make the package or diskimage"
|
||||||
echo " skipclean Don't do the cleanup at the end"
|
echo " skipclean Don't do the cleanup at the end"
|
||||||
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if [ $# -lt 2 ]; then
|
if [ $# -lt 1 ]; then
|
||||||
usage
|
usage
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VERSION=$1
|
KIND=$1
|
||||||
PYVER=$2
|
case $KIND in
|
||||||
shift;shift
|
apple) PYTHON=/usr/bin/python ;;
|
||||||
|
local) PYTHON=/usr/local/bin/python ;;
|
||||||
|
*) usage; exit 1 ;;
|
||||||
|
esac
|
||||||
|
PYTHONW=${PYTHON}w
|
||||||
|
shift
|
||||||
|
|
||||||
|
|
||||||
for flag in $*; do
|
for flag in $*; do
|
||||||
@@ -57,13 +65,18 @@ for flag in $*; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
SRCDIR=/Volumes/Gate.Stuff/Development/wxPython/dist/$VERSION
|
VERSION=`$PYTHON -c "import setup;print setup.VERSION"`
|
||||||
|
PYVER=`$PYTHON -c "import sys; print sys.version[:3]"`
|
||||||
|
PYPREFIX=`$PYTHON -c "import sys; print sys.exec_prefix"`
|
||||||
|
SITEPACKAGES=$PYPREFIX/lib/python$PYVER/site-packages
|
||||||
|
|
||||||
|
SRCDIR=/stuff/Development/wxPython/dist/$VERSION
|
||||||
TARBALL=$SRCDIR/wxPythonSrc-$VERSION.tar.gz
|
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/lib/wxPython-$VERSION
|
||||||
PREFIX=/usr/local
|
BINPREFIX=/usr/bin
|
||||||
|
|
||||||
|
WXROOT=`dirname $PWD`
|
||||||
PROGDIR="`dirname \"$0\"`"
|
PROGDIR="`dirname \"$0\"`"
|
||||||
TMPDIR=$PWD/_build_dmg
|
TMPDIR=$PWD/_build_dmg
|
||||||
|
|
||||||
@@ -81,7 +94,7 @@ DESTDIR=$PWD/dist
|
|||||||
|
|
||||||
mkdir -p $BUILDROOT
|
mkdir -p $BUILDROOT
|
||||||
mkdir -p $INSTALLROOT
|
mkdir -p $INSTALLROOT
|
||||||
mkdir -p $INSTALLDEVEL
|
#mkdir -p $INSTALLDEVEL
|
||||||
rm -rf $DMGDIR
|
rm -rf $DMGDIR
|
||||||
mkdir -p $DMGDIR/root
|
mkdir -p $DMGDIR/root
|
||||||
|
|
||||||
@@ -92,7 +105,8 @@ pushd $BUILDROOT
|
|||||||
# Unpack the tarball
|
# Unpack the tarball
|
||||||
|
|
||||||
if [ -z "$skiptar" ]; then
|
if [ -z "$skiptar" ]; then
|
||||||
tar xzvf $TARBALL
|
echo Unarchiving tarball...
|
||||||
|
tar xzf $TARBALL
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$use_cvs" = 1 ]; then
|
if [ "$use_cvs" = 1 ]; then
|
||||||
@@ -104,19 +118,21 @@ if [ "$use_cvs" = 1 ]; then
|
|||||||
if [ -e .last_copy ]; then
|
if [ -e .last_copy ]; then
|
||||||
FEXPR="-cnewer .last_copy"
|
FEXPR="-cnewer .last_copy"
|
||||||
fi
|
fi
|
||||||
find /projects/wx $FEXPR -print \
|
MEASURE=$WXROOT//
|
||||||
| grep -v wx/build \
|
find $WXROOT $FEXPR -print \
|
||||||
|
| grep -v $WXROOT/bld \
|
||||||
| grep -v wxPython/build \
|
| grep -v wxPython/build \
|
||||||
| grep -v wxPython/_build \
|
| grep -v wxPython/_build \
|
||||||
| grep -v CVS \
|
| grep -v CVS \
|
||||||
| cut -b 14- > filelist
|
| grep -v .pyc \
|
||||||
|
| cut -b ${#MEASURE}- > filelist
|
||||||
|
|
||||||
for x in `cat filelist`; do
|
for x in `cat filelist`; do
|
||||||
if [ -d "/projects/wx/$x" ]; then
|
if [ -d "$WXROOT/$x" ]; then
|
||||||
mkdir -p "wxPythonSrc-$VERSION/$x"
|
mkdir -p "wxPythonSrc-$VERSION/$x"
|
||||||
else
|
else
|
||||||
echo $x
|
echo $x
|
||||||
cp -p "/projects/wx/$x" "wxPythonSrc-$VERSION/$x"
|
cp -p "$WXROOT/$x" "wxPythonSrc-$VERSION/$x"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -126,60 +142,60 @@ fi
|
|||||||
|
|
||||||
cd wxPythonSrc-$VERSION
|
cd wxPythonSrc-$VERSION
|
||||||
WXDIR=`pwd`
|
WXDIR=`pwd`
|
||||||
mkdir -p $WXDIR/build
|
mkdir -p $WXDIR/bld
|
||||||
cd $WXDIR/build
|
cd $WXDIR/bld
|
||||||
|
|
||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
# Configure wxWindows
|
# Configure wxWindows
|
||||||
if [ -z "$skipconfig" ]; then
|
if [ -z "$skipconfig" ]; then
|
||||||
../configure --with-mac --prefix=$PREFIX \
|
../configure \
|
||||||
|
--prefix=$PREFIX \
|
||||||
|
--with-mac \
|
||||||
|
--disable-monolithic \
|
||||||
--with-opengl \
|
--with-opengl \
|
||||||
--enable-precomp=no \
|
|
||||||
--enable-geometry \
|
--enable-geometry \
|
||||||
--enable-optimise \
|
--enable-optimise \
|
||||||
|
--enable-precomp=no \
|
||||||
|
\
|
||||||
--with-libjpeg=builtin \
|
--with-libjpeg=builtin \
|
||||||
--with-libpng=builtin \
|
--with-libpng=builtin \
|
||||||
--with-libtiff=builtin \
|
--with-libtiff=builtin \
|
||||||
|
--with-zlib=builtin \
|
||||||
|
\
|
||||||
# --with-zlib=builtin
|
--enable-debug_flag
|
||||||
# --enable-debug_flag
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Build wxWindows and wxPython
|
# Build wxWindows and wxPython
|
||||||
if [ -z "$skipbuild" ]; then
|
if [ -z "$skipbuild" ]; then
|
||||||
make
|
|
||||||
|
|
||||||
|
# Make wxWindows and some contribs
|
||||||
|
make
|
||||||
|
make -C contrib/src/gizmos
|
||||||
|
make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0"
|
||||||
|
make -C contrib/src/stc
|
||||||
|
make -C contrib/src/xrc
|
||||||
|
|
||||||
|
if [ ! -e $WXDIR/include/wx/gizmos ]; then
|
||||||
|
# Make some links so the wxPython build can find all the headers it needs
|
||||||
|
pushd $WXDIR/include/wx
|
||||||
|
ln -s ../../contrib/include/wx/* .
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build wxPython
|
||||||
cd $WXDIR/wxPython
|
cd $WXDIR/wxPython
|
||||||
python$PYVER setup.py \
|
$PYTHON setup.py \
|
||||||
IN_CVS_TREE=1 \
|
NO_SCRIPTS=1 \
|
||||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
|
WX_CONFIG="$WXDIR/bld/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/bld" \
|
||||||
build
|
build
|
||||||
|
|
||||||
|
|
||||||
# Build wxrc (XRC resource tool) but don't use the makefiles since they expect
|
# Build wxrc (XRC resource tool)
|
||||||
# a shared version of the xrc lib to have been built...
|
cd $WXDIR/bld/contrib/utils/wxrc
|
||||||
cd $WXDIR/contrib/utils/wxrc
|
make
|
||||||
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
|
strip wxrc
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@@ -188,37 +204,42 @@ fi
|
|||||||
# Install wxWindows
|
# Install wxWindows
|
||||||
|
|
||||||
if [ -z "$skipinstall" ]; then
|
if [ -z "$skipinstall" ]; then
|
||||||
cd $WXDIR/build
|
cd $WXDIR/bld
|
||||||
make prefix=$INSTALLROOT/$PREFIX install
|
make prefix=$INSTALLROOT$PREFIX install
|
||||||
|
make -C contrib/src/gizmos prefix=$INSTALLROOT$PREFIX install
|
||||||
|
make -C contrib/src/ogl CXXFLAGS="-DwxUSE_DEPRECATED=0" prefix=$INSTALLROOT/$PREFIX install
|
||||||
|
make -C contrib/src/stc prefix=$INSTALLROOT$PREFIX install
|
||||||
|
make -C contrib/src/xrc prefix=$INSTALLROOT$PREFIX install
|
||||||
|
|
||||||
|
|
||||||
# and wxPython
|
# and wxPython
|
||||||
cd $WXDIR/wxPython
|
cd $WXDIR/wxPython
|
||||||
python$PYVER setup.py \
|
$PYTHON setup.py \
|
||||||
IN_CVS_TREE=1 \
|
NO_SCRIPTS=1 \
|
||||||
WX_CONFIG="$WXDIR/build/wx-config --prefix=$WXDIR --exec-prefix=$WXDIR/build" \
|
WX_CONFIG="$INSTALLROOT/$PREFIX/bin/wx-config --prefix=$INSTALLROOT/$PREFIX" \
|
||||||
install \
|
install \
|
||||||
--root=$INSTALLROOT
|
--root=$INSTALLROOT
|
||||||
|
|
||||||
|
|
||||||
# install wxPython's tool scripts
|
# install wxPython's tool scripts
|
||||||
|
mkdir -p $INSTALLROOT$BINPREFIX
|
||||||
cd $WXDIR/wxPython/scripts
|
cd $WXDIR/wxPython/scripts
|
||||||
python$PYVER CreateMacScripts.py $INSTALLROOT $PREFIX/bin
|
python$PYVER CreateMacScripts.py $INSTALLROOT $BINPREFIX
|
||||||
|
|
||||||
# Install wxrc
|
# Install wxrc
|
||||||
cp $WXDIR/contrib/utils/wxrc/wxrc $INSTALLROOT$PREFIX/bin
|
cp $WXDIR/bld/contrib/utils/wxrc/wxrc $INSTALLROOT$BINPREFIX
|
||||||
|
|
||||||
|
|
||||||
# Move wxWindows devel files and save for a separate installer package
|
# install the wxPython headers
|
||||||
mkdir -p $INSTALLDEVEL$PREFIX
|
cd $WXDIR/wxPython
|
||||||
mkdir -p $INSTALLDEVEL$PREFIX/bin
|
cp -R include $INSTALLROOT$PREFIX
|
||||||
mkdir -p $INSTALLDEVEL$PREFIX/lib
|
mkdir -p $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
|
||||||
mv -f $INSTALLROOT$PREFIX/include $INSTALLDEVEL$PREFIX
|
cp src/*.i $INSTALLROOT$PREFIX/include/wx/wxPython/i_files
|
||||||
mv -f $INSTALLROOT$PREFIX/lib/wx $INSTALLDEVEL$PREFIX/lib
|
|
||||||
mv -f $INSTALLROOT$PREFIX/bin/wx* $INSTALLDEVEL$PREFIX/bin
|
|
||||||
|
|
||||||
# TODO for $INSTALLROOT and $INSTALLDEVEL ?
|
# TODO for $INSTALLROOT and $INSTALLDEVEL ?
|
||||||
# chown -R root:admin
|
#chown -R root:admin $INSTALLROOT
|
||||||
# chmod -R g+w
|
#chmod -R g+w $INSTALLROOT
|
||||||
fi
|
fi
|
||||||
|
|
||||||
popd
|
popd
|
||||||
@@ -230,63 +251,18 @@ if [ -z "$skipdmg" ]; then
|
|||||||
|
|
||||||
# Remove the .pyc/.pyo files they just take up space and can be recreated
|
# Remove the .pyc/.pyo files they just take up space and can be recreated
|
||||||
# during the install.
|
# during the install.
|
||||||
python $PROGDIR/../zappycfiles.py $INSTALLROOT/Library/Frameworks/Python.framework
|
$PYTHON $PROGDIR/../zappycfiles.py $INSTALLROOT
|
||||||
|
|
||||||
# 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
|
# Make the welcome message
|
||||||
|
case $KIND in
|
||||||
|
apple) W_MSG="an Apple installed (Panther) version of" ;;
|
||||||
|
local) W_MSG="a locally built version (or Jaguar version) of" ;;
|
||||||
|
esac
|
||||||
cat > $RESOURCEDIR/Welcome.txt <<EOF
|
cat > $RESOURCEDIR/Welcome.txt <<EOF
|
||||||
Welcome!
|
Welcome!
|
||||||
|
|
||||||
This program will install wxPython $VERSION for MacPython-OSX $PYVER.
|
This program will install wxPython $VERSION for $W_MSG MacPython-OSX $PYVER.
|
||||||
|
|
||||||
Build date: `date`
|
Build date: `date`
|
||||||
EOF
|
EOF
|
||||||
@@ -296,6 +272,7 @@ EOF
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# Cleanup any old install of the wxPython package
|
# Cleanup any old install of the wxPython package
|
||||||
rm -rf \$2$SITEPACKAGES/wxPython
|
rm -rf \$2$SITEPACKAGES/wxPython
|
||||||
|
rm -rf \$2$SITEPACKAGES/wx
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
chmod +x $RESOURCEDIR/preflight
|
chmod +x $RESOURCEDIR/preflight
|
||||||
@@ -304,20 +281,17 @@ EOF
|
|||||||
cat > $RESOURCEDIR/postflight <<EOF
|
cat > $RESOURCEDIR/postflight <<EOF
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
# Compile the .py files in the wxPython pacakge
|
# Compile the .py files in the wxPython pacakge
|
||||||
/usr/local/bin/python \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
$PYTHON \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
||||||
/usr/local/bin/python -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
$PYTHON \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
|
||||||
|
$PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wxPython
|
||||||
|
$PYTHON -O \$2$SITEPACKAGES/../compileall.py \$2$SITEPACKAGES/wx
|
||||||
|
|
||||||
# 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
|
# and the wxPython pacakge should be group writable
|
||||||
chgrp -R admin \$2$SITEPACKAGES/wxPython
|
chgrp -R admin \$2$SITEPACKAGES/wxPython
|
||||||
chgrp -R admin /Applications/wxPythonOSX-$VERSION
|
|
||||||
chmod -R g+w \$2$SITEPACKAGES/wxPython
|
chmod -R g+w \$2$SITEPACKAGES/wxPython
|
||||||
chmod -R g+w /Applications/wxPythonOSX-$VERSION
|
chgrp -R admin \$2$SITEPACKAGES/wx
|
||||||
|
chmod -R g+w \$2$SITEPACKAGES/wx
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
@@ -325,63 +299,106 @@ EOF
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Finally, build the main package...
|
# Finally, build the main Installer Package...
|
||||||
rm -rf wxPythonOSX.pkg
|
rm -rf wxPythonOSX-$KIND.pkg
|
||||||
python $PROGDIR/../buildpkg.py \
|
python $PROGDIR/../buildpkg.py \
|
||||||
--Title=wxPythonOSX \
|
--Title=wxPythonOSX-$KIND \
|
||||||
--Version=$VERSION \
|
--Version=$VERSION \
|
||||||
--Description="wxPython $VERSION for MacPython-OSX $PYVER" \
|
--Description="wxPython $VERSION for $W_MSG MacPython-OSX $PYVER" \
|
||||||
--NeedsAuthorization="YES" \
|
--NeedsAuthorization="YES" \
|
||||||
--Relocatable="NO" \
|
--Relocatable="NO" \
|
||||||
--InstallOnly="YES" \
|
--InstallOnly="YES" \
|
||||||
$INSTALLROOT \
|
$INSTALLROOT \
|
||||||
$RESOURCEDIR
|
$RESOURCEDIR
|
||||||
|
|
||||||
mv wxPythonOSX.pkg $DMGDIR/root
|
mv wxPythonOSX-$KIND.pkg $DMGDIR/root
|
||||||
|
|
||||||
|
|
||||||
# and the devel package
|
# # and the devel package
|
||||||
rm -rf wxPythonOSX-devel.pkg
|
# rm -rf wxPythonOSX-devel.pkg
|
||||||
python $PROGDIR/../buildpkg.py \
|
# python $PROGDIR/../buildpkg.py \
|
||||||
--Title=wxPythonOSX-devel \
|
# --Title=wxPythonOSX-devel \
|
||||||
--Version=$VERSION \
|
# --Version=$VERSION \
|
||||||
--Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
|
# --Description="Headers and such that allow you to link with the same wxMac that wxPython does" \
|
||||||
--NeedsAuthorization="YES" \
|
# --NeedsAuthorization="YES" \
|
||||||
--Relocatable="NO" \
|
# --Relocatable="NO" \
|
||||||
--InstallOnly="YES" \
|
# --InstallOnly="YES" \
|
||||||
$INSTALLROOT
|
# $INSTALLDEVEL
|
||||||
|
|
||||||
mv wxPythonOSX-devel.pkg $DMGDIR/root
|
# mv wxPythonOSX-devel.pkg $DMGDIR/root
|
||||||
|
|
||||||
|
|
||||||
# Make a README.txt to go on the disk image
|
# Make a README.txt to go on the disk image
|
||||||
cat > $DMGDIR/root/README.txt <<EOF
|
cat > $DMGDIR/root/README.txt <<EOF
|
||||||
The files on this disk image are Installer packages for wxPythonOSX
|
Welcome to wxPython!
|
||||||
$VERSION for MacPython-OSX $PVER. You must already have MacPython-OSX
|
|
||||||
installed.
|
|
||||||
|
|
||||||
The wxPython extension modules, library, demo and samples are
|
On this disk image you will find the installer for the wxPython $VERSION for $W_MSG MacPython-OSX $PYVER. You must already have MacPython-OSX installed.
|
||||||
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
|
wxPython-$KIND.pkg The installer package. It contains the wxPython
|
||||||
link with the same wxMac that wxPython does, then you can also install
|
extension modules, wxMac dynamic libraries and
|
||||||
the wxPythonOSX-devel package to get the necessary header files and
|
headers, and some scripts for the command-line
|
||||||
such. Otherwise you don't need it.
|
tools.
|
||||||
|
|
||||||
|
Everything else here is optional and you can drag them out of the disk
|
||||||
|
image and drop them where ever you want.
|
||||||
|
|
||||||
|
docs/ A few readmes, change log, etc. The full
|
||||||
|
documentation is downloadable separately.
|
||||||
|
|
||||||
|
licence/ License docs.
|
||||||
|
|
||||||
|
demo/ A copy of the wxPython demo.
|
||||||
|
|
||||||
|
samples/ Several small sample applications that
|
||||||
|
demonstrate how to use wxPython.
|
||||||
|
|
||||||
Happy Hacking!
|
Happy Hacking!
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
||||||
# license files, etc.
|
# license files, docs, etc.
|
||||||
cp -pR $WXDIR/wxPython/licence $DMGDIR/root
|
cp -pR $WXDIR/wxPython/licence $DMGDIR/root
|
||||||
cp $WXDIR/wxPython/CHANGES.txt $DMGDIR/root
|
rm -rf $WXDIR/wxPython/docs/xml-raw
|
||||||
|
cp -pR $WXDIR/wxPython/docs $DMGDIR/root
|
||||||
|
rm -rf $DMGDIR/root/docs/bin
|
||||||
|
|
||||||
|
# Copy the demo and samples to the disk image
|
||||||
|
cp -pR $WXDIR/wxPython/demo $DMGDIR/root
|
||||||
|
cp -pR $WXDIR/wxPython/samples $DMGDIR/root
|
||||||
|
rm $DMGDIR/root/demo/b
|
||||||
|
|
||||||
|
|
||||||
|
# Make an app bundle to launch PyCrust
|
||||||
|
$PYTHONW $PROGDIR/../buildapp.py \
|
||||||
|
--builddir=$DMGDIR/root \
|
||||||
|
--name=PyCrust \
|
||||||
|
--mainprogram=$INSTALLROOT$BINPREFIX/pycrust.py \
|
||||||
|
--iconfile=$PROGDIR/PieShell.icns \
|
||||||
|
build
|
||||||
|
|
||||||
|
# Make an app to launch XRCed
|
||||||
|
$PYTHONW $PROGDIR/../buildapp.py \
|
||||||
|
--builddir=$DMGDIR/root \
|
||||||
|
--name=XRCed \
|
||||||
|
--mainprogram=$INSTALLROOT$BINPREFIX/xrced.py \
|
||||||
|
--iconfile=$PROGDIR/XRCed.icns \
|
||||||
|
build
|
||||||
|
|
||||||
|
# Make an app bundle to run the demo
|
||||||
|
$PYTHONW $PROGDIR/../buildapp.py \
|
||||||
|
--builddir=$DMGDIR/root \
|
||||||
|
--name="wxPython Demo" \
|
||||||
|
--mainprogram=$DMGDIR/root/demo/demo.py \
|
||||||
|
--iconfile=$PROGDIR/RunDemo.icns \
|
||||||
|
build
|
||||||
|
cp -pR $DMGDIR/root/demo/* "$DMGDIR/root/wxPython Demo.app/Contents/Resources"
|
||||||
|
|
||||||
|
|
||||||
# and then finally make a disk image containing the packages and etc.
|
# and then finally make a disk image containing the packages and etc.
|
||||||
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-py$PYVER
|
$PROGDIR/../makedmg $DMGDIR/root $DMGDIR wxPythonOSX-$VERSION-$KIND-Py$PYVER
|
||||||
|
|
||||||
echo Moving $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg to $DESTDIR
|
echo Moving $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg to $DESTDIR
|
||||||
mv $DMGDIR/wxPythonOSX-$VERSION-py$PYVER.dmg $DESTDIR
|
mv $DMGDIR/wxPythonOSX-$VERSION-$KIND-Py$PYVER.dmg $DESTDIR
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
2
wxPython/distrib/mac/wxPythonOSX/resources/.cvsignore
Normal file
2
wxPython/distrib/mac/wxPythonOSX/resources/.cvsignore
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Welcome.txt
|
||||||
|
postflight
|
@@ -1,79 +0,0 @@
|
|||||||
{\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\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 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) related to your questions (see below).\
|
|
||||||
\
|
|
||||||
|
|
||||||
\fs18 [1] \cf2 http://sf.net/tracker/?atid=109863&group_id=9863
|
|
||||||
\fs24 \cf0 \
|
|
||||||
\
|
|
||||||
\
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\f0\b \cf0 What will be installed and where\
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\f1\b0 \cf0 \
|
|
||||||
wxMac goes into
|
|
||||||
\f2 /usr/local
|
|
||||||
\f1 and wxPython will be installed into the appropriate subfolder of the Python framework. Choose the
|
|
||||||
\f3 Show files
|
|
||||||
\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 \
|
|
||||||
|
|
||||||
\f1 \
|
|
||||||
\
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\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
|
|
||||||
\f2 demo.py
|
|
||||||
\f1 or drag and drop it onto the Python interpreter in your
|
|
||||||
\f2 Application
|
|
||||||
\f1 folder.\
|
|
||||||
\
|
|
||||||
The official wxPython site:\
|
|
||||||
\
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\f2 \cf2 http://wxPython.org\cf0 \
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\f1 \cf0 \
|
|
||||||
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://wxPython.org/maillist.php\
|
|
||||||
\
|
|
||||||
\pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural
|
|
||||||
|
|
||||||
\f1 \cf0 \
|
|
||||||
\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 \
|
|
||||||
\
|
|
||||||
\
|
|
||||||
Robin Dunn\
|
|
||||||
\
|
|
||||||
}
|
|
@@ -1,4 +0,0 @@
|
|||||||
#!/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
|
|
@@ -10,11 +10,10 @@ doit = 1
|
|||||||
def main():
|
def main():
|
||||||
if not sys.argv[1:]:
|
if not sys.argv[1:]:
|
||||||
if os.name == 'mac':
|
if os.name == 'mac':
|
||||||
import macfs
|
import EasyDialogs
|
||||||
fss, ok = macfs.GetDirectory('Directory to zap pyc files in')
|
dir = EasyDialogs.AskFolder(message='Directory to zap pyc files in')
|
||||||
if not ok:
|
if not dir:
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
dir = fss.as_pathname()
|
|
||||||
zappyc(dir)
|
zappyc(dir)
|
||||||
else:
|
else:
|
||||||
print 'Usage: zappyc dir ...'
|
print 'Usage: zappyc dir ...'
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
#----------------------------------------------------------------------
|
#----------------------------------------------------------------------
|
||||||
# Name: CreateMacScripts.py
|
# Name: CreateMacScripts.py
|
||||||
# Purpose: Massages the scripts to be usable with MachoPython
|
# Purpose: Massages the scripts to be usable with MacPython-OSX
|
||||||
#
|
#
|
||||||
# Author: Robin Dunn
|
# Author: Robin Dunn
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user