From 836b039b7cbcf99dd0864dcdffa30ef66a81d819 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sun, 14 May 2006 19:56:34 +0000 Subject: [PATCH] Rework the build system for osx applications: * Don't use xcodebuild for building PythonLauncher, but use a normal unix makefile. This makes it a lot easier to use the same build flags as for the rest of python (e.g. make a universal version of python launcher) * Convert the mac makefile-s to makefile.in-s and use configure to set makefile variables instead of forwarding them as command-line arguments * Add a C version of pythonw, that we you can use '#!/usr/local/bin/pythonw' * Build IDLE.app using bundlebuilder instead of BuildApplet, that will allow easier modification of the bundle contents later on. --- Lib/plat-mac/bundlebuilder.py | 23 +- Mac/OSX/IDLE/Makefile.in | 48 ++ Mac/OSX/IDLE/idlemain.py | 19 + Mac/OSX/Icons/IDLE.icns | Bin 0 -> 36565 bytes .../PythonCompiled.icns | Bin .../PythonLauncher.icns} | Bin .../PythonSource.icns | Bin Mac/OSX/Makefile | 273 ------- Mac/OSX/Makefile.in | 235 ++++++ .../PreferenceWindow.nib/classes.nib | 26 + .../PreferenceWindow.nib/info.nib | 16 + .../PreferenceWindow.nib/objects.nib | Bin 0 -> 5882 bytes Mac/OSX/PythonLauncher/Info.plist | 65 ++ Mac/OSX/PythonLauncher/Makefile.in | 77 ++ .../PythonLauncher.pbproj/project.pbxproj | 681 ------------------ Mac/OSX/PythonLauncher/PythonWSource.icns | Bin 49891 -> 0 bytes Mac/OSX/Tools/pythonw.c | 17 + Mac/OSXResources/framework/Info.plist | 4 +- Makefile.pre.in | 17 +- configure | 14 +- configure.in | 6 + 21 files changed, 547 insertions(+), 974 deletions(-) create mode 100644 Mac/OSX/IDLE/Makefile.in create mode 100644 Mac/OSX/IDLE/idlemain.py create mode 100644 Mac/OSX/Icons/IDLE.icns rename Mac/OSX/{PythonLauncher => Icons}/PythonCompiled.icns (100%) rename Mac/OSX/{PythonLauncher/PythonInterpreter.icns => Icons/PythonLauncher.icns} (100%) rename Mac/OSX/{PythonLauncher => Icons}/PythonSource.icns (100%) delete mode 100644 Mac/OSX/Makefile create mode 100644 Mac/OSX/Makefile.in create mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib create mode 100644 Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib create mode 100644 Mac/OSX/PythonLauncher/Info.plist create mode 100644 Mac/OSX/PythonLauncher/Makefile.in delete mode 100755 Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj delete mode 100644 Mac/OSX/PythonLauncher/PythonWSource.icns create mode 100644 Mac/OSX/Tools/pythonw.c diff --git a/Lib/plat-mac/bundlebuilder.py b/Lib/plat-mac/bundlebuilder.py index 03d8c81776d..aac92bd636a 100755 --- a/Lib/plat-mac/bundlebuilder.py +++ b/Lib/plat-mac/bundlebuilder.py @@ -145,11 +145,24 @@ class BundleBuilder(Defaults): 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() + if os.path.exists(self.bundlepath + '~'): + shutil.rmtree(self.bundlepath + '~') + bp = self.bundlepath + + # Create the app bundle in a temporary location and then + # rename the completed bundle. This way the Finder will + # never see an incomplete bundle (where it might pick up + # and cache the wrong meta data) + self.bundlepath = bp + '~' + try: + os.mkdir(self.bundlepath) + self.preProcess() + self._copyFiles() + self._addMetaFiles() + self.postProcess() + os.rename(self.bundlepath, bp) + finally: + self.bundlepath = bp self.message("Done.", 1) def preProcess(self): diff --git a/Mac/OSX/IDLE/Makefile.in b/Mac/OSX/IDLE/Makefile.in new file mode 100644 index 00000000000..26ecad4d41f --- /dev/null +++ b/Mac/OSX/IDLE/Makefile.in @@ -0,0 +1,48 @@ +CC=@CC@ +LD=@CC@ +BASECFLAGS=@BASECFLAGS@ +OPT=@OPT@ +CFLAGS=$(BASECFLAGS) $(OPT) +LDFLAGS=@LDFLAGS@ +srcdir= @srcdir@ +VERSION= @VERSION@ +UNIVERSALSDK=@UNIVERSALSDK@ +builddir= ../../.. + +RUNSHARED= @RUNSHARED@ +BUILDEXE= @BUILDEXEEXT@ +BUILDPYTHON= ../../../python$(BUILDEXE) + +# Deployment target selected during configure, to be checked +# by distutils +MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ +@EXPORT_MACOSX_DEPLOYMENT_TARGET@export MACOSX_DEPLOYMENT_TARGET + +BUNDLEBULDER=$(srcdir)/../../../Lib/plat-mac/bundlebuilder.py + +PYTHONAPPSDIR=/Applications/MacPython $(VERSION) + +all: IDLE.app + +install: IDLE.app + test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)" + -test -d "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" && rm -r "$(DESTDIR)$(PYTHONAPPSDIR)/IDLE.app" + cp -r IDLE.app "$(DESTDIR)$(PYTHONAPPSDIR)" + +clean: + rm -rf IDLE.app + +IDLE.app: \ + $(srcdir)/../Icons/IDLE.icns $(srcdir)/idlemain.py \ + $(srcdir)/../Icons/PythonSource.icns \ + $(srcdir)/../Icons/PythonCompiled.icns + rm -fr PythonLauncher.app + $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \ + --builddir=. \ + --name=IDLE \ + --mainprogram=$(srcdir)/idlemain.py \ + --iconfile=$(srcdir)/../Icons/IDLE.icns \ + --bundle-id=org.python.IDLE \ + --resource=$(srcdir)/../Icons/PythonSource.icns \ + --resource=$(srcdir)/../Icons/PythonCompiled.icns \ + build diff --git a/Mac/OSX/IDLE/idlemain.py b/Mac/OSX/IDLE/idlemain.py new file mode 100644 index 00000000000..b7a3c0430ea --- /dev/null +++ b/Mac/OSX/IDLE/idlemain.py @@ -0,0 +1,19 @@ +import argvemulator +from idlelib.PyShell import main +import sys, os + +# Make sure sys.executable points to the python interpreter inside the +# framework, instead of at the helper executable inside the application +# bundle (the latter works, but doesn't allow access to the window server) +sys.executable = os.path.join(sys.prefix, 'bin', 'python') + +# Look for the -psn argument that the launcher adds and remove it, it will +# only confuse the IDLE startup code. +for idx, value in enumerate(sys.argv): + if value.startswith('-psn_'): + del sys.argv[idx] + break + +argvemulator.ArgvCollector().mainloop() +if __name__ == '__main__': + main() diff --git a/Mac/OSX/Icons/IDLE.icns b/Mac/OSX/Icons/IDLE.icns new file mode 100644 index 0000000000000000000000000000000000000000..ffe7ef0ff12063973438b1dec190060a1b017f6f GIT binary patch literal 36565 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 pythonw.sh - echo "exec \"$(INSTALLED_PYTHONW)\" \"\$$@\"" >> pythonw.sh - $(INSTALL) pythonw.sh $(DESTDIR)$(bindir)/pythonw$(VERSION) - $(INSTALL_SYMLINK) pythonw$(VERSION) $(DESTDIR)$(bindir)/pythonw - -installextras: - $(INSTALL) -d $(DESTDIR)$(PYTHONAPPSDIR)/Extras - $(INSTALL) $(srcdir)/Mac/OSX/Extras.ReadMe.txt $(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe - $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Demo \ - $(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo - $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Tools \ - $(DESTDIR)$(PYTHONAPPSDIR)/Extras/Tools - -checkapplepython: - @if ! $(BUILDPYTHON) $(srcdir)/Mac/OSX/fixapplepython23.py -n; then \ - echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \ - echo "* WARNING: Run $(srcdir)/Mac/OSX/fixapplepython23.py with \"sudo\" to fix this."; \ - fi - diff --git a/Mac/OSX/Makefile.in b/Mac/OSX/Makefile.in new file mode 100644 index 00000000000..fd430f7c71f --- /dev/null +++ b/Mac/OSX/Makefile.in @@ -0,0 +1,235 @@ +# This file can be invoked from the various frameworkinstall... targets in the +# main Makefile. The next couple of variables are overridden on the +# commandline in that case. + +VERSION=@VERSION@ +builddir = ../.. +srcdir = @srcdir@ +prefix=/Library/Frameworks/Python.framework/Versions/$(VERSION) +LIBDEST=$(prefix)/lib/python$(VERSION) +BUILDPYTHON=$(builddir)/python.exe +DESTDIR= + +# These are normally glimpsed from the previous set +bindir=@exec_prefix@/bin +PYTHONAPPSDIR=/Applications/MacPython $(VERSION) +APPINSTALLDIR=$(prefix)/Resources/Python.app + +# Variables for installing the "normal" unix binaries +INSTALLED_PYDOC=$(prefix)/bin/pydoc +INSTALLED_IDLE=$(prefix)/bin/idle +INSTALLED_PYTHON=$(prefix)/bin/python +INSTALLED_PYTHONW=$(prefix)/bin/pythonw +INSTALLED_PYTHONAPP=$(APPINSTALLDIR)/Contents/MacOS/Python + +# Items more-or-less copied from the main Makefile +DIRMODE=755 +FILEMODE=644 +INSTALL=@INSTALL@ +INSTALL_SYMLINK=ln -fsn +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +INSTALL_SCRIPT= @INSTALL_SCRIPT@ +INSTALL_DATA=@INSTALL_DATA@ +LN=@LN@ +STRIPFLAG=-s +CPMAC=/Developer/Tools/CpMac + +APPTEMPLATE=$(srcdir)/OSXResources/app +APPSUBDIRS=MacOS Resources Resources/English.lproj \ + Resources/English.lproj/Documentation \ + Resources/English.lproj/Documentation/doc \ + Resources/English.lproj/Documentation/ide +DOCDIR=$(srcdir)/Mac/OSXResources/app/Resources/English.lproj/Documentation +DOCINDEX=$(DOCDIR)/"Documentation idx" +CACHERSRC=$(srcdir)/../scripts/cachersrc.py +compileall=$(srcdir)/../../Lib/compileall.py + +installapps: install_Python install_BuildApplet install_PythonLauncher \ + install_IDLE checkapplepython install_pythonw install_versionedtools + +install_pythonw: pythonw + $(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/pythonw$(VERSION)" + $(INSTALL_PROGRAM) $(STRIPFLAG) pythonw "$(DESTDIR)$(prefix)/bin/python$(VERSION)" + ln -sf python$(VERSION) "$(DESTDIR)$(prefix)/bin/python" + ln -sf pythonw$(VERSION) "$(DESTDIR)$(prefix)/bin/pythonw" + +# +# Install unix tools in /usr/local/bin. These are just aliases for the +# actual installation inside the framework. +# +installunixtools: + if [ ! -d "$(DESTDIR)/usr/local/bin" ]; then \ + $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)/usr/local/bin" ;\ + fi + for fn in `ls "$(DESTDIR)$(prefix)/bin/"` ; \ + do \ + ln -fs "$(prefix)/bin/$${fn}" "$(DESTDIR)/usr/local/bin/$${fn}" ;\ + done + +# By default most tools are installed without a version in their basename, to +# make it easier to install (and use) several python versions side-by-side move +# the tools to a version-specific name and add the non-versioned name as an +# alias. +install_versionedtools: + for fn in idle pydoc python-config ;\ + do \ + mv "$(DESTDIR)$(prefix)/bin/$${fn}" "$(DESTDIR)$(prefix)/bin/$${fn}$(VERSION)" ;\ + ln -sf "$${fn}$(VERSION)" "$${fn}" ;\ + done + rm -f "$(DESTDIR)$(prefix)/bin/smtpd.py" + + +pythonw: $(srcdir)/Tools/pythonw.c + $(CC) $(LDFLAGS) -o $@ $(srcdir)/Tools/pythonw.c \ + -DPYTHONWEXECUTABLE='"$(APPINSTALLDIR)/Contents/MacOS/Python"' + + +install_PythonLauncher: + cd PythonLauncher && make install DESTDIR=$(DESTDIR) + +install_Python: + @if test ! -f $(DOCINDEX); then \ + echo WARNING: you should run Apple Help Indexing Tool on $(DOCDIR); \ + fi + @for i in "$(PYTHONAPPSDIR)" "$(APPINSTALLDIR)" "$(APPINSTALLDIR)/Contents"; do \ + if test ! -d "$(DESTDIR)$$i"; then \ + echo "Creating directory $(DESTDIR)$$i"; \ + $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$$i"; \ + fi;\ + done + @for i in $(APPSUBDIRS); do \ + if test ! -d "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; then \ + echo "Creating directory $(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \ + $(INSTALL) -d -m $(DIRMODE) "$(DESTDIR)$(APPINSTALLDIR)/Contents/$$i"; \ + else true; \ + fi; \ + done + @for d in . $(APPSUBDIRS); \ + do \ + a=$(APPTEMPLATE)/$$d; \ + if test ! -d $$a; then continue; else true; fi; \ + b="$(DESTDIR)$(APPINSTALLDIR)/Contents/$$d"; \ + for i in $$a/*; \ + do \ + case $$i in \ + *CVS) ;; \ + *.svn) ;; \ + *.py[co]) ;; \ + *.orig) ;; \ + *~) ;; \ + *idx) \ + echo $(CPMAC) "$$i" $$b; \ + $(CPMAC) "$$i" "$$b"; \ + ;; \ + *) \ + if test -d $$i; then continue; fi; \ + if test -x $$i; then \ + echo $(INSTALL_SCRIPT) "$$i" "$$b"; \ + $(INSTALL_SCRIPT) "$$i" "$$b"; \ + else \ + echo $(INSTALL_DATA) "$$i" "$$b"; \ + $(INSTALL_DATA) "$$i" "$$b"; \ + fi;; \ + esac; \ + done; \ + done + $(INSTALL_PROGRAM) $(STRIPFLAG) $(BUILDPYTHON) "$(DESTDIR)$(APPINSTALLDIR)/Contents/MacOS/Python" + +install_IDLE: + cd IDLE && make install + +install_BuildApplet: + $(BUILDPYTHON) $(srcdir)/../scripts/BuildApplet.py \ + --destroot "$(DESTDIR)" \ + --python $(INSTALLED_PYTHONAPP) \ + --output "$(DESTDIR)$(PYTHONAPPSDIR)/BuildApplet.app" \ + $(srcdir)/../scripts/BuildApplet.py + +MACLIBDEST=$(LIBDEST)/plat-mac +MACTOOLSDEST=$(prefix)/Mac/Tools +MACTOOLSSRC=$(srcdir)/Mac/Tools +MACTOOLSSUBDIRS=IDE + +installmacsubtree: + @for i in $(MACTOOLSDEST); \ + do \ + if test ! -d $(DESTDIR)$$i; then \ + echo "Creating directory $(DESTDIR)$$i"; \ + $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$$i; \ + else true; \ + fi; \ + done + @for d in $(MACTOOLSSUBDIRS); \ + do \ + a=$(MACTOOLSSRC)/$$d; \ + if test ! -d $$a; then continue; else true; fi; \ + b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \ + if test ! -d $$b; then \ + echo "Creating directory $$b"; \ + $(INSTALL) -d -m $(DIRMODE) $$b; \ + else true; \ + fi; \ + done + @for d in $(MACTOOLSSUBDIRS); \ + do \ + a=$(MACTOOLSSRC)/$$d; \ + if test ! -d $$a; then continue; else true; fi; \ + b=$(DESTDIR)$(MACTOOLSDEST)/$$d; \ + for i in $$a/*; \ + do \ + case $$i in \ + *CVS) ;; \ + *.svn) ;; \ + *.py[co]) ;; \ + *.orig) ;; \ + *~) ;; \ + *.rsrc) \ + echo $(CPMAC) $$i $$b ; \ + $(CPMAC) $$i $$b ; \ + ;; \ + *) \ + if test -d $$i; then continue; fi; \ + if test -x $$i; then \ + echo $(INSTALL_SCRIPT) $$i $$b; \ + $(INSTALL_SCRIPT) $$i $$b; \ + else \ + echo $(INSTALL_DATA) $$i $$b; \ + $(INSTALL_DATA) $$i $$b; \ + fi;; \ + esac; \ + done; \ + done + + + $(BUILDPYTHON) $(CACHERSRC) -v $(DESTDIR)$(MACLIBDEST) $(DESTDIR)$(MACTOOLSDEST) + $(BUILDPYTHON) -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST) + $(BUILDPYTHON) -O -Wi -tt $(compileall) -d $(MACTOOLSDEST) -x badsyntax $(DESTDIR)$(MACTOOLSDEST) + +# +# We use the full name here in stead of $(INSTALLED_PYTHONAPP), because +# the latter may be overridden by Makefile.jaguar when building for a pre-installed +$(INSTALLED_PYTHONAPP)/Contents/MacOS/Python: install_Python + +# $(INSTALLED_PYTHON) has to be done by the main Makefile, we cannot do that here. +# At least this rule will give an error if it doesn't exist. + +installextras: + $(INSTALL) -d "$(DESTDIR)$(PYTHONAPPSDIR)/Extras" + $(INSTALL) $(srcdir)/Mac/OSX/Extras.ReadMe.txt "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/ReadMe.txt" + $(BUILDPYTHON) $(srcdir)/Mac/OSX/Extras.install.py $(srcdir)/Demo \ + "$(DESTDIR)$(PYTHONAPPSDIR)/Extras/Demo" + + +checkapplepython: + @if ! $(BUILDPYTHON) $(srcdir)/Mac/OSX/fixapplepython23.py -n; then \ + echo "* WARNING: Apple-installed Python 2.3 will have trouble building extensions from now on."; \ + echo "* WARNING: Run $(srcdir)/Mac/OSX/fixapplepython23.py with \"sudo\" to fix this."; \ + fi + + +clean: + rm pythonw + cd PythonLauncher && make clean + cd IDLE && make clean + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib new file mode 100644 index 00000000000..467aa8b2612 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/classes.nib @@ -0,0 +1,26 @@ +{ + IBClasses = ( + {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, + { + ACTIONS = {"do_apply" = id; "do_filetype" = id; "do_reset" = id; }; + CLASS = PreferencesWindowController; + LANGUAGE = ObjC; + OUTLETS = { + commandline = NSTextField; + debug = NSButton; + filetype = NSPopUpButton; + honourhashbang = NSButton; + inspect = NSButton; + interpreter = NSTextField; + nosite = NSButton; + optimize = NSButton; + others = NSTextField; + tabs = NSButton; + verbose = NSButton; + "with_terminal" = NSButton; + }; + SUPERCLASS = NSWindowController; + } + ); + IBVersion = 1; +} \ No newline at end of file diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib new file mode 100644 index 00000000000..bc558f7e828 --- /dev/null +++ b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/info.nib @@ -0,0 +1,16 @@ + + + + + IBDocumentLocation + 565 235 519 534 0 0 1280 1002 + IBFramework Version + 364.0 + IBOpenObjects + + 5 + + IBSystem Version + 7H63 + + diff --git a/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib b/Mac/OSX/PythonLauncher/English.lproj/PreferenceWindow.nib/objects.nib new file mode 100644 index 0000000000000000000000000000000000000000..3dfed33cbdb5b263001bd8bc5a1fd7ec268d704c GIT binary patch literal 5882 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 literal 0 HcmV?d00001 diff --git a/Mac/OSX/PythonLauncher/Info.plist b/Mac/OSX/PythonLauncher/Info.plist new file mode 100644 index 00000000000..5e9e4572710 --- /dev/null +++ b/Mac/OSX/PythonLauncher/Info.plist @@ -0,0 +1,65 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + py + pyw + + CFBundleTypeIconFile + PythonSource.icns + CFBundleTypeName + Python Script + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleTypeExtensions + + pyc + pyo + + CFBundleTypeIconFile + PythonCompiled.icns + CFBundleTypeName + Python Bytecode Document + CFBundleTypeRole + Viewer + NSDocumentClass + MyDocument + + + CFBundleExecutable + PythonLauncher + CFBundleGetInfoString + 2.5, © 2001-2006 Python Software Foundation + CFBundleIconFile + PythonLauncher.icns + CFBundleIdentifier + org.python.PythonLauncher + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + PythonLauncher + CFBundlePackageType + APPL + CFBundleShortVersionString + 2.5 + CFBundleSignature + PytL + CFBundleVersion + 2.5 + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Mac/OSX/PythonLauncher/Makefile.in b/Mac/OSX/PythonLauncher/Makefile.in new file mode 100644 index 00000000000..41ea9d52a04 --- /dev/null +++ b/Mac/OSX/PythonLauncher/Makefile.in @@ -0,0 +1,77 @@ +CC=@CC@ +LD=@CC@ +BASECFLAGS=@BASECFLAGS@ +OPT=@OPT@ +CFLAGS=$(BASECFLAGS) $(OPT) +LDFLAGS=@LDFLAGS@ +srcdir= @srcdir@ +VERSION= @VERSION@ +UNIVERSALSDK=@UNIVERSALSDK@ +builddir= ../../.. + +RUNSHARED= @RUNSHARED@ +BUILDEXE= @BUILDEXEEXT@ +BUILDPYTHON= ../../../python$(BUILDEXE) + +# Deployment target selected during configure, to be checked +# by distutils +MACOSX_DEPLOYMENT_TARGET=@CONFIGURE_MACOSX_DEPLOYMENT_TARGET@ +@EXPORT_MACOSX_DEPLOYMENT_TARGET@export MACOSX_DEPLOYMENT_TARGET + +BUNDLEBULDER=$(srcdir)/../../../Lib/plat-mac/bundlebuilder.py + +PYTHONAPPSDIR=/Applications/MacPython $(VERSION) +OBJECTS=FileSettings.o MyAppDelegate.o MyDocument.o PreferencesWindowController.o doscript.o main.o + +all: Python\ Launcher.app + +install: Python\ Launcher.app + test -d "$(DESTDIR)$(PYTHONAPPSDIR)" || mkdir -p "$(DESTDIR)$(PYTHONAPPSDIR)" + -test -d "$(DESTDIR)$(PYTHONAPPSDIR)/Python Launcher.app" && rm -r "$(DESTDIR)$(PYTHONAPPSDIR)/Python Launcher.app" + cp -r "Python Launcher.app" "$(DESTDIR)$(PYTHONAPPSDIR)" + +clean: + rm -f *.o "Python Launcher" + rm -rf "Python Launcher.app" + +Python\ Launcher.app: \ + Python\ Launcher $(srcdir)/../Icons/PythonLauncher.icns \ + $(srcdir)/../Icons/PythonSource.icns \ + $(srcdir)/../Icons/PythonCompiled.icns \ + $(srcdir)/factorySettings.plist + rm -fr "Python Launcher.app" + $(RUNSHARED) $(BUILDPYTHON) $(BUNDLEBULDER) \ + --builddir=. \ + --name="Python Launcher" \ + --executable="Python Launcher" \ + --iconfile=$(srcdir)/../Icons/PythonLauncher.icns \ + --bundle-id=org.python.PythonLauncher \ + --resource=$(srcdir)/../Icons/PythonSource.icns \ + --resource=$(srcdir)/../Icons/PythonCompiled.icns \ + --resource=$(srcdir)/English.lproj \ + --resource=$(srcdir)/factorySettings.plist \ + --plist=$(srcdir)/Info.plist \ + build + find "Python Launcher.app" -name '.svn' -print0 | xargs -0 rm -r + + +FileSettings.o: $(srcdir)/FileSettings.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/FileSettings.m + +MyAppDelegate.o: $(srcdir)/MyAppDelegate.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/MyAppDelegate.m + +MyDocument.o: $(srcdir)/MyDocument.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/MyDocument.m + +PreferencesWindowController.o: $(srcdir)/PreferencesWindowController.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/PreferencesWindowController.m + +doscript.o: $(srcdir)/doscript.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/doscript.m + +main.o: $(srcdir)/main.m + $(CC) $(CFLAGS) -o $@ -c $(srcdir)/main.m + +Python\ Launcher: $(OBJECTS) + $(CC) $(LDFLAGS) -o "Python Launcher" $(OBJECTS) -framework AppKit -framework Carbon diff --git a/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj b/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj deleted file mode 100755 index 06e45dc4fcc..00000000000 --- a/Mac/OSX/PythonLauncher/PythonLauncher.pbproj/project.pbxproj +++ /dev/null @@ -1,681 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 38; - objects = { - 080E96D9FE201CDB7F000001 = { - fileRef = 2A37F4B9FDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - }; - }; - 080E96DAFE201CDB7F000001 = { - fileRef = 2A37F4B6FDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - }; - }; - 080E96DBFE201CDB7F000001 = { - fileRef = 2A37F4B4FDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - }; - }; - 089C165FFE840EACC02AAC07 = { - children = ( - 089C1660FE840EACC02AAC07, - ); - isa = PBXVariantGroup; - name = InfoPlist.strings; - refType = 4; - }; - 089C1660FE840EACC02AAC07 = { - fileEncoding = 10; - isa = PBXFileReference; - name = English; - path = English.lproj/InfoPlist.strings; - refType = 4; - }; - 089C1661FE840EACC02AAC07 = { - fileRef = 089C165FFE840EACC02AAC07; - isa = PBXBuildFile; - settings = { - }; - }; -//080 -//081 -//082 -//083 -//084 -//100 -//101 -//102 -//103 -//104 - 1058C7A6FEA54F5311CA2CBB = { - children = ( - 1058C7A7FEA54F5311CA2CBB, - F5AA9D0102F807EE0110C447, - ); - isa = PBXGroup; - name = "Linked Frameworks"; - refType = 4; - }; - 1058C7A7FEA54F5311CA2CBB = { - isa = PBXFrameworkReference; - name = Cocoa.framework; - path = /System/Library/Frameworks/Cocoa.framework; - refType = 0; - }; - 1058C7A8FEA54F5311CA2CBB = { - children = ( - 2A37F4C5FDCFA73011CA2CEA, - 2A37F4C4FDCFA73011CA2CEA, - ); - isa = PBXGroup; - name = "Other Frameworks"; - refType = 4; - }; - 1058C7A9FEA54F5311CA2CBB = { - fileRef = 1058C7A7FEA54F5311CA2CBB; - isa = PBXBuildFile; - settings = { - }; - }; -//100 -//101 -//102 -//103 -//104 -//170 -//171 -//172 -//173 -//174 - 1758732AFF379DA111CA2CBB = { - isa = PBXApplicationReference; - path = PythonLauncher.app; - refType = 3; - }; -//170 -//171 -//172 -//173 -//174 -//190 -//191 -//192 -//193 -//194 - 19C28FB0FE9D524F11CA2CBB = { - children = ( - 1758732AFF379DA111CA2CBB, - ); - isa = PBXGroup; - name = Products; - refType = 4; - }; -//190 -//191 -//192 -//193 -//194 -//2A0 -//2A1 -//2A2 -//2A3 -//2A4 - 2A37F4A9FDCFA73011CA2CEA = { - buildStyles = ( - 4A9504D0FFE6A4CB11CA0CBA, - 4A9504D1FFE6A4CB11CA0CBA, - ); - isa = PBXProject; - mainGroup = 2A37F4AAFDCFA73011CA2CEA; - projectDirPath = ""; - targets = ( - 2A37F4C6FDCFA73011CA2CEA, - ); - }; - 2A37F4AAFDCFA73011CA2CEA = { - children = ( - 2A37F4ABFDCFA73011CA2CEA, - 2A37F4AFFDCFA73011CA2CEA, - 2A37F4B8FDCFA73011CA2CEA, - 2A37F4C3FDCFA73011CA2CEA, - 19C28FB0FE9D524F11CA2CBB, - ); - isa = PBXGroup; - name = PythonLauncher; - path = ""; - refType = 4; - }; - 2A37F4ABFDCFA73011CA2CEA = { - children = ( - 2A37F4AEFDCFA73011CA2CEA, - 2A37F4ACFDCFA73011CA2CEA, - F52A90CD02EB5C6A01000102, - F52A90CE02EB5C6A01000102, - F5A4C14002F2055C01000102, - F5A4C14102F2055C01000102, - F5A4C14402F2070D01000102, - F5A4C14502F2070D01000102, - ); - isa = PBXGroup; - name = Classes; - path = ""; - refType = 4; - }; - 2A37F4ACFDCFA73011CA2CEA = { - fileEncoding = 30; - isa = PBXFileReference; - path = MyDocument.m; - refType = 4; - }; - 2A37F4AEFDCFA73011CA2CEA = { - fileEncoding = 30; - isa = PBXFileReference; - path = MyDocument.h; - refType = 4; - }; - 2A37F4AFFDCFA73011CA2CEA = { - children = ( - F5AA9C6A02F8042D0110C447, - 2A37F4B0FDCFA73011CA2CEA, - F5AAA21D02F8115D0110C447, - ); - isa = PBXGroup; - name = "Other Sources"; - path = ""; - refType = 4; - }; - 2A37F4B0FDCFA73011CA2CEA = { - fileEncoding = 30; - isa = PBXFileReference; - path = main.m; - refType = 4; - }; - 2A37F4B4FDCFA73011CA2CEA = { - children = ( - 2A37F4B5FDCFA73011CA2CEA, - ); - isa = PBXVariantGroup; - name = MyDocument.nib; - path = ""; - refType = 4; - }; - 2A37F4B5FDCFA73011CA2CEA = { - isa = PBXFileReference; - name = English; - path = English.lproj/MyDocument.nib; - refType = 4; - }; - 2A37F4B6FDCFA73011CA2CEA = { - children = ( - 2A37F4B7FDCFA73011CA2CEA, - ); - isa = PBXVariantGroup; - name = MainMenu.nib; - path = ""; - refType = 4; - }; - 2A37F4B7FDCFA73011CA2CEA = { - isa = PBXFileReference; - name = English; - path = English.lproj/MainMenu.nib; - refType = 4; - }; - 2A37F4B8FDCFA73011CA2CEA = { - children = ( - F58D4A3A02F1F94B01000102, - F58D4A3B02F1F94B01000102, - F58D4A3C02F1F94B01000102, - F5449B4B02FB3F7E01000102, - 2A37F4B9FDCFA73011CA2CEA, - 2A37F4B6FDCFA73011CA2CEA, - 2A37F4B4FDCFA73011CA2CEA, - F5A4C13E02F203F601000102, - 089C165FFE840EACC02AAC07, - F5A42167038BDD8E0110C447, - ); - isa = PBXGroup; - name = Resources; - path = ""; - refType = 4; - }; - 2A37F4B9FDCFA73011CA2CEA = { - children = ( - 2A37F4BAFDCFA73011CA2CEA, - ); - isa = PBXVariantGroup; - name = Credits.rtf; - path = ""; - refType = 4; - }; - 2A37F4BAFDCFA73011CA2CEA = { - isa = PBXFileReference; - name = English; - path = English.lproj/Credits.rtf; - refType = 4; - }; - 2A37F4C3FDCFA73011CA2CEA = { - children = ( - 1058C7A6FEA54F5311CA2CBB, - 1058C7A8FEA54F5311CA2CBB, - ); - isa = PBXGroup; - name = Frameworks; - path = ""; - refType = 4; - }; - 2A37F4C4FDCFA73011CA2CEA = { - isa = PBXFrameworkReference; - name = AppKit.framework; - path = /System/Library/Frameworks/AppKit.framework; - refType = 0; - }; - 2A37F4C5FDCFA73011CA2CEA = { - isa = PBXFrameworkReference; - name = Foundation.framework; - path = /System/Library/Frameworks/Foundation.framework; - refType = 0; - }; - 2A37F4C6FDCFA73011CA2CEA = { - buildPhases = ( - 2A37F4C7FDCFA73011CA2CEA, - 2A37F4C9FDCFA73011CA2CEA, - 2A37F4CEFDCFA73011CA2CEA, - 2A37F4D1FDCFA73011CA2CEA, - ); - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ""; - HEADER_SEARCH_PATHS = ""; - INSTALL_MODE_FLAG = "a+rX"; - INSTALL_PATH = /Applications/Python; - LIBRARY_SEARCH_PATHS = ""; - OPTIMIZATION_CFLAGS = "-O0"; - OTHER_LDFLAGS = ""; - PRODUCT_NAME = PythonLauncher; - SECTORDER_FLAGS = ""; - WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; - WRAPPER_EXTENSION = app; - }; - dependencies = ( - ); - isa = PBXApplicationTarget; - name = PythonLauncher; - productInstallPath = /Applications/Python; - productName = PythonLauncher; - productReference = 1758732AFF379DA111CA2CBB; - productSettingsXML = " - - - - CFBundleDevelopmentRegion - English - CFBundleDocumentTypes - - - CFBundleTypeExtensions - - py - - CFBundleTypeIconFile - PythonSource.icns - CFBundleTypeName - Python Script - CFBundleTypeRole - Viewer - NSDocumentClass - MyDocument - - - CFBundleTypeExtensions - - pyw - - CFBundleTypeIconFile - PythonWSource.icns - CFBundleTypeName - Python GUI Script - CFBundleTypeRole - Viewer - NSDocumentClass - MyDocument - - - CFBundleTypeExtensions - - pyc - - CFBundleTypeIconFile - PythonCompiled.icns - CFBundleTypeName - Python Bytecode Document - CFBundleTypeRole - Viewer - NSDocumentClass - MyDocument - - - CFBundleExecutable - PythonLauncher - CFBundleGetInfoString - 2.3, © 2001-2003 Python Software Foundation - CFBundleIconFile - PythonInterpreter.icns - CFBundleIdentifier - org.python.PythonLauncher - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - PythonLauncher - CFBundlePackageType - APPL - CFBundleShortVersionString - 2.3 - CFBundleSignature - PytL - CFBundleVersion - 2.3 - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - -"; - shouldUseHeadermap = 0; - }; - 2A37F4C7FDCFA73011CA2CEA = { - buildActionMask = 2147483647; - files = ( - 2A37F4C8FDCFA73011CA2CEA, - F52A90D002EB5C6A01000102, - F5A4C14202F2055D01000102, - F5A4C14702F2070D01000102, - F5AA9C6C02F8042D0110C447, - ); - isa = PBXHeadersBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 2A37F4C8FDCFA73011CA2CEA = { - fileRef = 2A37F4AEFDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - }; - }; - 2A37F4C9FDCFA73011CA2CEA = { - buildActionMask = 2147483647; - files = ( - 080E96D9FE201CDB7F000001, - 080E96DAFE201CDB7F000001, - 080E96DBFE201CDB7F000001, - 089C1661FE840EACC02AAC07, - F58D4A3D02F1F94B01000102, - F58D4A3E02F1F94B01000102, - F58D4A3F02F1F94B01000102, - F5A4C13F02F203F701000102, - F5449B4C02FB3F7E01000102, - F5A42168038BDD8E0110C447, - ); - isa = PBXResourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 2A37F4CEFDCFA73011CA2CEA = { - buildActionMask = 2147483647; - files = ( - 2A37F4CFFDCFA73011CA2CEA, - 2A37F4D0FDCFA73011CA2CEA, - F52A90CF02EB5C6A01000102, - F5A4C14302F2055D01000102, - F5A4C14602F2070D01000102, - F5AAA21E02F8115D0110C447, - ); - isa = PBXSourcesBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; - 2A37F4CFFDCFA73011CA2CEA = { - fileRef = 2A37F4ACFDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - ); - }; - }; - 2A37F4D0FDCFA73011CA2CEA = { - fileRef = 2A37F4B0FDCFA73011CA2CEA; - isa = PBXBuildFile; - settings = { - ATTRIBUTES = ( - ); - }; - }; - 2A37F4D1FDCFA73011CA2CEA = { - buildActionMask = 2147483647; - files = ( - 1058C7A9FEA54F5311CA2CBB, - F5AA9D9B02F807EF0110C447, - ); - isa = PBXFrameworksBuildPhase; - runOnlyForDeploymentPostprocessing = 0; - }; -//2A0 -//2A1 -//2A2 -//2A3 -//2A4 -//4A0 -//4A1 -//4A2 -//4A3 -//4A4 - 4A9504D0FFE6A4CB11CA0CBA = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = NO; - OPTIMIZATION_CFLAGS = "-O0"; - }; - isa = PBXBuildStyle; - name = Development; - }; - 4A9504D1FFE6A4CB11CA0CBA = { - buildRules = ( - ); - buildSettings = { - COPY_PHASE_STRIP = YES; - }; - isa = PBXBuildStyle; - name = Deployment; - }; -//4A0 -//4A1 -//4A2 -//4A3 -//4A4 -//F50 -//F51 -//F52 -//F53 -//F54 - F52A90CD02EB5C6A01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = FileSettings.m; - refType = 4; - }; - F52A90CE02EB5C6A01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = FileSettings.h; - refType = 4; - }; - F52A90CF02EB5C6A01000102 = { - fileRef = F52A90CD02EB5C6A01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F52A90D002EB5C6A01000102 = { - fileRef = F52A90CE02EB5C6A01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5449B4B02FB3F7E01000102 = { - isa = PBXFileReference; - path = PythonWSource.icns; - refType = 4; - }; - F5449B4C02FB3F7E01000102 = { - fileRef = F5449B4B02FB3F7E01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58D4A3A02F1F94B01000102 = { - isa = PBXFileReference; - path = PythonCompiled.icns; - refType = 4; - }; - F58D4A3B02F1F94B01000102 = { - isa = PBXFileReference; - path = PythonInterpreter.icns; - refType = 4; - }; - F58D4A3C02F1F94B01000102 = { - isa = PBXFileReference; - path = PythonSource.icns; - refType = 4; - }; - F58D4A3D02F1F94B01000102 = { - fileRef = F58D4A3A02F1F94B01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58D4A3E02F1F94B01000102 = { - fileRef = F58D4A3B02F1F94B01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F58D4A3F02F1F94B01000102 = { - fileRef = F58D4A3C02F1F94B01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5A42167038BDD8E0110C447 = { - fileEncoding = 30; - isa = PBXFileReference; - path = factorySettings.plist; - refType = 4; - }; - F5A42168038BDD8E0110C447 = { - fileRef = F5A42167038BDD8E0110C447; - isa = PBXBuildFile; - settings = { - }; - }; - F5A4C13E02F203F601000102 = { - isa = PBXFileReference; - path = PreferenceWindow.nib; - refType = 4; - }; - F5A4C13F02F203F701000102 = { - fileRef = F5A4C13E02F203F601000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5A4C14002F2055C01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PreferencesWindowController.h; - refType = 4; - }; - F5A4C14102F2055C01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = PreferencesWindowController.m; - refType = 4; - }; - F5A4C14202F2055D01000102 = { - fileRef = F5A4C14002F2055C01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5A4C14302F2055D01000102 = { - fileRef = F5A4C14102F2055C01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5A4C14402F2070D01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = MyAppDelegate.m; - refType = 4; - }; - F5A4C14502F2070D01000102 = { - fileEncoding = 30; - isa = PBXFileReference; - path = MyAppDelegate.h; - refType = 4; - }; - F5A4C14602F2070D01000102 = { - fileRef = F5A4C14402F2070D01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5A4C14702F2070D01000102 = { - fileRef = F5A4C14502F2070D01000102; - isa = PBXBuildFile; - settings = { - }; - }; - F5AA9C6A02F8042D0110C447 = { - fileEncoding = 30; - isa = PBXFileReference; - path = doscript.h; - refType = 4; - }; - F5AA9C6C02F8042D0110C447 = { - fileRef = F5AA9C6A02F8042D0110C447; - isa = PBXBuildFile; - settings = { - }; - }; - F5AA9D0102F807EE0110C447 = { - isa = PBXFrameworkReference; - name = Carbon.framework; - path = /System/Library/Frameworks/Carbon.framework; - refType = 0; - }; - F5AA9D9B02F807EF0110C447 = { - fileRef = F5AA9D0102F807EE0110C447; - isa = PBXBuildFile; - settings = { - }; - }; - F5AAA21D02F8115D0110C447 = { - fileEncoding = 30; - isa = PBXFileReference; - path = doscript.m; - refType = 4; - }; - F5AAA21E02F8115D0110C447 = { - fileRef = F5AAA21D02F8115D0110C447; - isa = PBXBuildFile; - settings = { - }; - }; - }; - rootObject = 2A37F4A9FDCFA73011CA2CEA; -} diff --git a/Mac/OSX/PythonLauncher/PythonWSource.icns b/Mac/OSX/PythonLauncher/PythonWSource.icns deleted file mode 100644 index b0a859323b0d21397b24cfac0d7e00f452607c61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49891 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