From 2596758cb42cb592f2e3c33ef77bc9b02c995510 Mon Sep 17 00:00:00 2001 From: Ronald Oussoren Date: Sun, 6 Sep 2009 10:00:26 +0000 Subject: [PATCH] Fix build issues on OSX 10.6 (issue 6802) --- Lib/plat-mac/aepack.py | 6 +- Lib/plat-mac/applesingle.py | 9 ++- Lib/plat-mac/buildtools.py | 21 ++++-- Lib/plat-mac/macresource.py | 56 ++++++-------- Lib/test/test_aepack.py | 5 ++ Mac/scripts/BuildApplet.py | 14 +++- Makefile.pre.in | 1 + Misc/NEWS | 2 + configure | 146 ++++++++++++++++++++++++++++++------ configure.in | 71 +++++++++++++++--- 10 files changed, 253 insertions(+), 78 deletions(-) diff --git a/Lib/plat-mac/aepack.py b/Lib/plat-mac/aepack.py index 3b31b048cbf..6021283e7aa 100644 --- a/Lib/plat-mac/aepack.py +++ b/Lib/plat-mac/aepack.py @@ -58,7 +58,11 @@ unpacker_coercions = { # Some python types we need in the packer: # AEDescType = AE.AEDescType -FSSType = Carbon.File.FSSpecType +try: + FSSType = Carbon.File.FSSpecType +except AttributeError: + class FSSType: + pass FSRefType = Carbon.File.FSRefType AliasType = Carbon.File.AliasType diff --git a/Lib/plat-mac/applesingle.py b/Lib/plat-mac/applesingle.py index f6c605fd70c..13962f60982 100644 --- a/Lib/plat-mac/applesingle.py +++ b/Lib/plat-mac/applesingle.py @@ -119,8 +119,13 @@ def decode(infile, outpath, resonly=False, verbose=False): if not hasattr(infile, 'read'): if isinstance(infile, Carbon.File.Alias): infile = infile.ResolveAlias()[0] - if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): - infile = infile.as_pathname() + + if hasattr(Carbon.File, "FSSpec"): + if isinstance(infile, (Carbon.File.FSSpec, Carbon.File.FSRef)): + infile = infile.as_pathname() + else: + if isinstance(infile, Carbon.File.FSRef): + infile = infile.as_pathname() infile = open(infile, 'rb') asfile = AppleSingle(infile, verbose=verbose) diff --git a/Lib/plat-mac/buildtools.py b/Lib/plat-mac/buildtools.py index 3480226203d..f137411184b 100644 --- a/Lib/plat-mac/buildtools.py +++ b/Lib/plat-mac/buildtools.py @@ -15,7 +15,10 @@ import Carbon.File import MacOS import macostools import macresource -import EasyDialogs +try: + import EasyDialogs +except ImportError: + EasyDialogs = None import shutil @@ -67,9 +70,13 @@ def process(template, filename, destname, copy_codefragment=0, rsrcname=None, others=[], raw=0, progress="default", destroot=""): if progress == "default": - progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) - progress.label("Compiling...") - progress.inc(0) + if EasyDialogs is None: + print "Compiling %s"%(os.path.split(filename)[1],) + process = None + else: + progress = EasyDialogs.ProgressBar("Processing %s..."%os.path.split(filename)[1], 120) + progress.label("Compiling...") + progress.inc(0) # check for the script name being longer than 32 chars. This may trigger a bug # on OSX that can destroy your sourcefile. if '#' in os.path.split(filename)[1]: @@ -119,7 +126,11 @@ def update(template, filename, output): if MacOS.runtimemodel == 'macho': raise BuildError, "No updating yet for MachO applets" if progress: - progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) + if EasyDialogs is None: + print "Updating %s"%(os.path.split(filename)[1],) + progress = None + else: + progress = EasyDialogs.ProgressBar("Updating %s..."%os.path.split(filename)[1], 120) else: progress = None if not output: diff --git a/Lib/plat-mac/macresource.py b/Lib/plat-mac/macresource.py index f02453ba1d7..d693c87226d 100644 --- a/Lib/plat-mac/macresource.py +++ b/Lib/plat-mac/macresource.py @@ -77,52 +77,38 @@ def need(restype, resid, filename=None, modname=None): def open_pathname(pathname, verbose=0): """Open a resource file given by pathname, possibly decoding an AppleSingle file""" + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. try: - refno = Res.FSpOpenResFile(pathname, 1) + refno = Res.FSOpenResourceFile(pathname, u'', 1) except Res.Error, arg: - if arg[0] in (-37, -39): - # No resource fork. We may be on OSX, and this may be either - # a data-fork based resource file or a AppleSingle file - # from the CVS repository. - try: - refno = Res.FSOpenResourceFile(pathname, u'', 1) - except Res.Error, arg: - if arg[0] != -199: - # -199 is "bad resource map" - raise - else: - return refno - # Finally try decoding an AppleSingle file - pathname = _decode(pathname, verbose=verbose) - refno = Res.FSOpenResourceFile(pathname, u'', 1) - else: + if arg[0] != -199: + # -199 is "bad resource map" raise - return refno + else: + return refno + # Finally try decoding an AppleSingle file + pathname = _decode(pathname, verbose=verbose) + refno = Res.FSOpenResourceFile(pathname, u'', 1) def resource_pathname(pathname, verbose=0): """Return the pathname for a resource file (either DF or RF based). If the pathname given already refers to such a file simply return it, otherwise first decode it.""" + # No resource fork. We may be on OSX, and this may be either + # a data-fork based resource file or a AppleSingle file + # from the CVS repository. try: - refno = Res.FSpOpenResFile(pathname, 1) - Res.CloseResFile(refno) + refno = Res.FSOpenResourceFile(pathname, u'', 1) except Res.Error, arg: - if arg[0] in (-37, -39): - # No resource fork. We may be on OSX, and this may be either - # a data-fork based resource file or a AppleSingle file - # from the CVS repository. - try: - refno = Res.FSOpenResourceFile(pathname, u'', 1) - except Res.Error, arg: - if arg[0] != -199: - # -199 is "bad resource map" - raise - else: - return refno - # Finally try decoding an AppleSingle file - pathname = _decode(pathname, verbose=verbose) - else: + if arg[0] != -199: + # -199 is "bad resource map" raise + else: + return refno + # Finally try decoding an AppleSingle file + pathname = _decode(pathname, verbose=verbose) return pathname def open_error_resource(): diff --git a/Lib/test/test_aepack.py b/Lib/test/test_aepack.py index 5d4ab3e20b0..f4ea25b5f04 100755 --- a/Lib/test/test_aepack.py +++ b/Lib/test/test_aepack.py @@ -60,6 +60,9 @@ class TestAepack(unittest.TestCase): import Carbon.File except: return + + if not hasattr(Carbon.File, "FSSpec"): + return o = Carbon.File.FSSpec(os.curdir) packed = aepack.pack(o) unpacked = aepack.unpack(packed) @@ -70,6 +73,8 @@ class TestAepack(unittest.TestCase): import Carbon.File except: return + if not hasattr(Carbon.File, "FSSpec"): + return o = Carbon.File.FSSpec(os.curdir).NewAliasMinimal() packed = aepack.pack(o) unpacked = aepack.unpack(packed) diff --git a/Mac/scripts/BuildApplet.py b/Mac/scripts/BuildApplet.py index e71ebc1261f..eeeb82bfd7c 100644 --- a/Mac/scripts/BuildApplet.py +++ b/Mac/scripts/BuildApplet.py @@ -12,7 +12,10 @@ sys.stdout = sys.stderr import os import MacOS -import EasyDialogs +try: + import EasyDialogs +except ImportError: + EasyDialogs = None import buildtools import getopt @@ -32,7 +35,10 @@ def main(): try: buildapplet() except buildtools.BuildError, detail: - EasyDialogs.Message(detail) + if EasyDialogs is None: + print detail + else: + EasyDialogs.Message(detail) def buildapplet(): @@ -46,6 +52,10 @@ def buildapplet(): # Ask for source text if not specified in sys.argv[1:] if not sys.argv[1:]: + if EasyDialogs is None: + usage() + sys.exit(1) + filename = EasyDialogs.AskFileForOpen(message='Select Python source or applet:', typeList=('TEXT', 'APPL')) if not filename: diff --git a/Makefile.pre.in b/Makefile.pre.in index 8d6cfdc2776..3176d12d695 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -770,6 +770,7 @@ bininstall: altbininstall (cd $(DESTDIR)$(BINDIR); $(LN) python$(VERSION)$(EXE) $(PYTHON)) -rm -f $(DESTDIR)$(BINDIR)/python-config (cd $(DESTDIR)$(BINDIR); $(LN) -s python$(VERSION)-config python-config) + -test -d $(DESTDIR)$(LIBPC) || $(INSTALL) -d -m $(DIRMODE) $(DESTDIR)$(LIBPC) -rm -f $(DESTDIR)$(LIBPC)/python.pc (cd $(DESTDIR)$(LIBPC); $(LN) -s python-$(VERSION).pc python.pc) diff --git a/Misc/NEWS b/Misc/NEWS index a5ea3beb329..07f90f139bd 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -1189,6 +1189,8 @@ Tools/Demos Build ----- +- Issue #6802: Fix build issues on MacOSX 10.6 + - Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6. - Issue 5390: Add uninstall icon independent of whether file diff --git a/configure b/configure index 2706337039b..9d9252600b5 100755 --- a/configure +++ b/configure @@ -1,5 +1,5 @@ #! /bin/sh -# From configure.in Revision: 74644 . +# From configure.in Revision: 74667 . # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.61 for python 2.7. # @@ -1911,7 +1911,6 @@ fi -ARCH_RUN_32BIT= UNIVERSAL_ARCHS="32-bit" @@ -3852,7 +3851,7 @@ else { echo "$as_me:$LINENO: result: no" >&5 echo "${ECHO_T}no" >&6; } fi -rm -f conftest* +rm -f -r conftest* @@ -4689,6 +4688,7 @@ echo "${ECHO_T}$ac_cv_no_strict_aliasing_ok" >&6; } elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + ARCH_RUN_32BIT="true" elif test "$UNIVERSAL_ARCHS" = "all" ; then UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" @@ -4714,12 +4714,22 @@ echo "$as_me: error: proper usage is --with-universalarch=32-bit|64-bit|all" >&2 cur_target=`sw_vers -productVersion | sed 's/\(10\.[0-9]*\).*/\1/'` if test ${cur_target} '>' 10.2; then cur_target=10.3 - fi - if test "${UNIVERSAL_ARCHS}" = "all"; then - # Ensure that the default platform for a 4-way - # universal build is OSX 10.5, that's the first - # OS release where 4-way builds make sense. - cur_target='10.5' + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + fi + else + if test `arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi fi CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} @@ -5381,7 +5391,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -5402,7 +5412,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | else ac_cv_header_stdc=no fi -rm -f conftest* +rm -f -r conftest* fi @@ -6500,7 +6510,7 @@ _ACEOF fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $was_it_defined" >&5 echo "${ECHO_T}$was_it_defined" >&6; } @@ -7030,7 +7040,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | else ac_cv_type_uid_t=no fi -rm -f conftest* +rm -f -r conftest* fi { echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 @@ -14457,13 +14467,15 @@ case $ac_sys_system/$ac_sys_release in esac +ARCH_RUN_32BIT="" + case $ac_sys_system/$ac_sys_release in Darwin/[01567]\..*) LIBTOOL_CRUFT="-framework System -lcc_dynamic" if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -14475,7 +14487,93 @@ case $ac_sys_system/$ac_sys_release in else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + if test "$cross_compiling" = yes; then + ac_osx_32bit=no +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +[ + #include + int main(int argc, char*argv[]) + { + if (sizeof(long) == 4) { + return 0; + } else { + return 1; + } + ] +_ACEOF +rm -f conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_osx_32bit=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_osx_32bit=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + + + + if test "${ac_osx_32bit}" = "yes"; then + case `arch` in + i386) + MACOSX_DEFAULT_ARCH="i386" + ;; + ppc) + MACOSX_DEFAULT_ARCH="ppc" + ;; + *) + { { echo "$as_me:$LINENO: error: Unexpected output of 'arch' on OSX" >&5 +echo "$as_me: error: Unexpected output of 'arch' on OSX" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + else + case `arch` in + i386) + MACOSX_DEFAULT_ARCH="x86_64" + ;; + ppc) + MACOSX_DEFAULT_ARCH="ppc64" + ;; + *) + { { echo "$as_me:$LINENO: error: Unexpected output of 'arch' on OSX" >&5 +echo "$as_me: error: Unexpected output of 'arch' on OSX" >&2;} + { (exit 1); exit 1; }; } + ;; + esac + + #ARCH_RUN_32BIT="true" + fi + + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac @@ -15601,7 +15699,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | else unistd_defines_pthreads=no fi -rm -f conftest* +rm -f -r conftest* { echo "$as_me:$LINENO: result: $unistd_defines_pthreads" >&5 echo "${ECHO_T}$unistd_defines_pthreads" >&6; } @@ -17215,7 +17313,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then ipv6type=$i fi -rm -f conftest* +rm -f -r conftest* ;; kame) @@ -17238,7 +17336,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ipv6libdir=/usr/local/v6/lib ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-glibc) @@ -17259,7 +17357,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ipv6type=$i; ipv6trylibc=yes fi -rm -f conftest* +rm -f -r conftest* ;; linux-inet6) @@ -17297,7 +17395,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; v6d) @@ -17320,7 +17418,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ipv6libdir=/usr/local/v6/lib; BASECFLAGS="-I/usr/local/v6/include $BASECFLAGS" fi -rm -f conftest* +rm -f -r conftest* ;; zeta) @@ -17342,7 +17440,7 @@ if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -f -r conftest* ;; esac @@ -25159,7 +25257,7 @@ cat >>confdefs.h <<\_ACEOF _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi @@ -25429,7 +25527,7 @@ cat >>confdefs.h <<\_ACEOF _ACEOF fi -rm -f conftest* +rm -f -r conftest* fi diff --git a/configure.in b/configure.in index 7b823124de5..7b8f19db7e6 100644 --- a/configure.in +++ b/configure.in @@ -109,7 +109,6 @@ AC_ARG_ENABLE(universalsdk, ]) AC_SUBST(UNIVERSALSDK) -ARCH_RUN_32BIT= AC_SUBST(ARCH_RUN_32BIT) UNIVERSAL_ARCHS="32-bit" @@ -947,6 +946,7 @@ yes) elif test "$UNIVERSAL_ARCHS" = "64-bit" ; then UNIVERSAL_ARCH_FLAGS="-arch ppc64 -arch x86_64" + ARCH_RUN_32BIT="true" elif test "$UNIVERSAL_ARCHS" = "all" ; then UNIVERSAL_ARCH_FLAGS="-arch i386 -arch ppc -arch ppc64 -arch x86_64" @@ -970,12 +970,22 @@ yes) cur_target=`sw_vers -productVersion | sed 's/\(10\.[[0-9]]*\).*/\1/'` if test ${cur_target} '>' 10.2; then cur_target=10.3 - fi - if test "${UNIVERSAL_ARCHS}" = "all"; then - # Ensure that the default platform for a 4-way - # universal build is OSX 10.5, that's the first - # OS release where 4-way builds make sense. - cur_target='10.5' + if test ${enable_universalsdk}; then + if test "${UNIVERSAL_ARCHS}" = "all"; then + # Ensure that the default platform for a + # 4-way universal build is OSX 10.5, + # that's the first OS release where + # 4-way builds make sense. + cur_target='10.5' + fi + else + if test `arch` = "i386"; then + # On Intel macs default to a deployment + # target of 10.4, that's the first OSX + # release with Intel support. + cur_target="10.4" + fi + fi fi CONFIGURE_MACOSX_DEPLOYMENT_TARGET=${MACOSX_DEPLOYMENT_TARGET-${cur_target}} @@ -1508,6 +1518,8 @@ case $ac_sys_system/$ac_sys_release in ;; esac + +ARCH_RUN_32BIT="" AC_SUBST(LIBTOOL_CRUFT) case $ac_sys_system/$ac_sys_release in Darwin/@<:@01567@:>@\..*) @@ -1515,7 +1527,7 @@ case $ac_sys_system/$ac_sys_release in if test "${enable_universalsdk}"; then : else - LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" + LIBTOOL_CRUFT="${LIBTOOL_CRUFT} -arch_only `arch`" fi LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; @@ -1527,7 +1539,48 @@ case $ac_sys_system/$ac_sys_release in else LIBTOOL_CRUFT="" fi - LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only `arch`" + AC_TRY_RUN([[ + #include + int main(int argc, char*argv[]) + { + if (sizeof(long) == 4) { + return 0; + } else { + return 1; + } + ]], ac_osx_32bit=yes, + ac_osx_32bit=no, + ac_osx_32bit=no) + + if test "${ac_osx_32bit}" = "yes"; then + case `arch` in + i386) + MACOSX_DEFAULT_ARCH="i386" + ;; + ppc) + MACOSX_DEFAULT_ARCH="ppc" + ;; + *) + AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) + ;; + esac + else + case `arch` in + i386) + MACOSX_DEFAULT_ARCH="x86_64" + ;; + ppc) + MACOSX_DEFAULT_ARCH="ppc64" + ;; + *) + AC_MSG_ERROR([Unexpected output of 'arch' on OSX]) + ;; + esac + + #ARCH_RUN_32BIT="true" + fi + + LIBTOOL_CRUFT=$LIBTOOL_CRUFT" -lSystem -lSystemStubs -arch_only ${MACOSX_DEFAULT_ARCH}" LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -install_name $(PYTHONFRAMEWORKINSTALLDIR)/Versions/$(VERSION)/$(PYTHONFRAMEWORK)' LIBTOOL_CRUFT=$LIBTOOL_CRUFT' -compatibility_version $(VERSION) -current_version $(VERSION)';; esac