diff --git a/collects/compiler/doc.txt b/collects/compiler/doc.txt index e2a55ac6a4..51bfaeccd1 100644 --- a/collects/compiler/doc.txt +++ b/collects/compiler/doc.txt @@ -488,7 +488,10 @@ _embedr-sig.ss_ library provides the signature, _compiler:embed^_. prefix start "@executable_path/" works for a MzScheme-based application, the corresponding prefix start for a MrEd-based application is - "@executable_path/../../../" + "@executable_path/../../../"; if #f is supplied, the + executable's framework path is left as-is, otherwise + a relative path to a framework in the installation's "lib" + directory is converted to an absolute path _'subsystem_ (Windows) - a symbol, either 'console for a console application or 'windows for a consoleless application; diff --git a/collects/compiler/embed-unit.ss b/collects/compiler/embed-unit.ss index b6e46b9567..5205a4c264 100644 --- a/collects/compiler/embed-unit.ss +++ b/collects/compiler/embed-unit.ss @@ -7,10 +7,11 @@ (lib "port.ss") (lib "moddep.ss" "syntax") (lib "plist.ss" "xml") - (lib "process.ss") + (lib "plthome.ss" "setup") "embed-sig.ss" "private/winicon.ss" - "private/winsubsys.ss") + "private/winsubsys.ss" + "private/macfw.ss") (provide compiler:embed@) @@ -46,6 +47,14 @@ (fixup #rx#"[.][aA][pP][pP]$" #".app") path)] [else path]))) + + (define (mac-dest->executable dest mred?) + (if mred? + (let-values ([(base name dir?) (split-path dest)]) + (build-path dest + "Contents" "MacOS" + (path-replace-suffix name #""))) + dest)) ;; Find executable relative to the "mzlib" ;; collection. @@ -336,7 +345,7 @@ (format "~a~a" prefix name)) mappings) (unbox codes))))))))))) - + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (make-module-name-resolver code-l) @@ -512,28 +521,22 @@ (when (file-exists? dest) (delete-file dest))) (raise x))]) - (let ([m (and (eq? 'macosx (system-type)) - (assq 'framework-root aux))]) - (when m - (for-each (lambda (p) - (system* "/usr/bin/install_name_tool" - "-change" - (format "~a.framework/Versions/~a/~a" p (version) p) - (format "~a~a.framework/Versions/~a/~a" - (cdr m) - p (version) p) - (let ([dest (if mred? - (let-values ([(base name dir?) (split-path dest)]) - (build-path dest - "Contents" "MacOS" - (path-replace-suffix name #""))) - dest)]) - (if (path? dest) - (path->string dest) - dest)))) - (if mred? - '("PLT_MzScheme" "PLT_MrEd") - '("PLT_MzScheme"))))) + (when (eq? 'macosx (system-type)) + (let ([m (assq 'framework-root aux)]) + (if m + (when (cdr m) + (update-framework-path (cdr m) + (mac-dest->executable dest mred?) + mred?)) + ;; Check whether we need an absolute path to frameworks: + (let ([dest (mac-dest->executable dest mred?)]) + (when (regexp-match #rx"^@executable_path" + (get-current-framework-path dest "PLT_MzScheme")) + (update-framework-path (string-append + (path->string (build-path plthome "lib")) + "/") + dest + mred?)))))) (let ([start (file-size dest-exe)]) (with-output-to-file dest-exe (lambda () diff --git a/collects/compiler/private/macfw.ss b/collects/compiler/private/macfw.ss new file mode 100644 index 0000000000..98c04e0d57 --- /dev/null +++ b/collects/compiler/private/macfw.ss @@ -0,0 +1,51 @@ + +(module macfw mzscheme + (require (lib "process.ss")) + + (provide update-framework-path + get-current-framework-path) + + (define (update-framework-path fw-path dest mred?) + (let ([dest (if (path? dest) + (path->string dest) + dest)]) + (for-each (lambda (p) + (system* "/usr/bin/install_name_tool" + "-change" + (or (get-current-framework-path dest p) + (format "~a.framework/Versions/~a/~a" p (version) p)) + (format "~a~a.framework/Versions/~a/~a" + fw-path + p (version) p) + dest)) + (if mred? + '("PLT_MzScheme" "PLT_MrEd") + '("PLT_MzScheme"))))) + + (define (get-current-framework-path dest p) + (let-values ([(r w) (make-pipe)]) + (parameterize ([current-output-port w]) + (system* "/usr/bin/otool" + "-L" + (if (path? dest) + (path->string dest) + dest))) + (close-output-port w) + (let ([m (regexp-match (bytes-append #"[\r\n][ \t]*([^ \t][^\r\n]*" + (string->bytes/utf-8 p) + #"[^\r\n]*)" + #" [(]compatibility version [0-9.]*," + #" current version [0-9.]*[)][\r\n]") + r)]) + (if m + (bytes->string/utf-8 (cadr m)) + (begin + (fprintf (current-error-port) + "warning: cannot find existing link for ~a in ~a\n" + p dest) + #f)))))) + + + + + \ No newline at end of file diff --git a/collects/launcher/doc.txt b/collects/launcher/doc.txt index dd60f48b9e..eb3351a03c 100644 --- a/collects/launcher/doc.txt +++ b/collects/launcher/doc.txt @@ -22,47 +22,21 @@ executables. The optional `aux' argument is an association list for platform-specific options (i.e., it is a list of pairs where the first element of the pair is a key symbol and the second element is - the value for that key). The currently supported keys are as - follows: + the value for that key). See `make-embedding-executable' (from the + "compiler" collection) for a list that applies to Windows launchers + and Mac OS X MrEd launchers; the following additional associations + apply to launchers: - _'icns_ (Mac OS X) - an icon file path (suffix ".icns") to - use for the executable's desktop icon - - _'ico_ (Windows) - an icon file path (suffix ".ico") to - use for the executable's desktop icon; the executable - will have 16x16, 32x32, and 48x48 icons at 4-bit, - 8-bit, and 32-bit (RBBA) depths; the icons are - copied and generated from any 16x16, 32x32, and 48x48 - icons in the ".ico" file - - _'independent?_ (Windows) - a boolean; #t creates an old-style + _'independent?_ (Windows) - a boolean; #t creates an old-style launcher that is independent of the MzScheme or MrEd - binary, like "Setup PLT.exe" + binary, like "Setup PLT.exe"; no other `aux' + associations are used for an old-style launcher -'exe-name_ (Mac OS X, MrEd 'script[-3m] variant) - provides the base name for a 'normal variant launcher, which the - script will call ignoring `args'; if this name is not + script will call (ignoring `args'); if this name is not provided, the script will go through the MrEd executable - _'creator_ (Mac OS X) - provides a 4-character string to use as - the application signature. - - _'file-types_ (Mac OS X) - provides a list of association lists, - one for each type of file handled by the application; - each association is a 2-element list, where the first (key) - element is a string recognized by Finder, and the second - element is a plist value (see doc.txt in the "xml" collection); - see plt/collects/drscheme/drscheme.filetypes for an example. - - -'resource-files_ (Mac OS X) - extra files to copy into the - "Resources" directory of the generated executable - - _'forget-exe?_ (Windows, Mac OS X) - a boolean; #t does not - preserve the original executable name for - `(find-system-path 'exec-file)'; the main consequence is - that library collections will be found relative to the - launcher instead of the original executable - See also `build-aux-from-path' below. The default `aux' is `null'. For Unix/X, the script created by `make-mred-launcher' detects and diff --git a/collects/setup/setup-unit.ss b/collects/setup/setup-unit.ss index eda6f79be2..bbf2070848 100644 --- a/collects/setup/setup-unit.ss +++ b/collects/setup/setup-unit.ss @@ -729,10 +729,11 @@ (for-each (lambda (mzln mzll mzlf) (let ([p (program-launcher-path mzln)] - [aux (cons `(exe-name . ,mzln) - (build-aux-from-path - (build-path (cc-path cc) - (path-replace-suffix (or mzll mzln) #""))))]) + [aux (list* `(exe-name . ,mzln) + '(framework-root . #f) + (build-aux-from-path + (build-path (cc-path cc) + (path-replace-suffix (or mzll mzln) #""))))]) (unless (up-to-date? p aux) (setup-printf "Installing ~a~a launcher ~a" kind (if (eq? (current-launcher-variant) 'normal) diff --git a/collects/tests/mzscheme/mzlib.ss b/collects/tests/mzscheme/mzlib.ss index f874b53555..420e21bb82 100644 --- a/collects/tests/mzscheme/mzlib.ss +++ b/collects/tests/mzscheme/mzlib.ss @@ -34,7 +34,7 @@ (load-relative "pretty.ss") -(load-relative "package.ss") +;; (load-relative "package.ss") (load-relative "contract-test.ss") diff --git a/src/configure b/src/configure index 49497f8c42..0945fdfb03 100755 --- a/src/configure +++ b/src/configure @@ -314,7 +314,7 @@ ac_subdirs_all="$ac_subdirs_all foreign/gcc/libffi" ac_subdirs_all="$ac_subdirs_all llvm/llvm" ac_subdirs_all="$ac_subdirs_all wxcommon/jpeg" ac_subdirs_all="$ac_subdirs_all wxxt/src/x/wbuild" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP CXX CXXFLAGS ac_ct_CXX CXXCPP RANLIB ac_ct_RANLIB PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS PREFLAGS COMPFLAGS PROFFLAGS SED AS AR STATIC_AR ARFLAGS WBUILD CC_FOR_BUILD REZ MZLINKER PLAIN_CC DYN_CFLAGS x_includes x_libraries OPTIONS MZOPTIONS CGCOPTIONS GC2OPTIONS MROPTIONS GCDIR MZBINTARGET MZINSTALLTARGET EXTRA_GMP_OBJ OSX NOT_OSX FRAMEWORK_INSTALL_DIR MREDLINKER LIBSFX WXLIBS WXVARIANT ICP MRLIBINSTALL LIBFINISH MAKE_MRED MAKE_MRED3M MAKE_MREDINSTALL MAKE_MREDINSTALL3M MAKE_WBUILD MAKE_COPYTREE MAKE_FINISH WXPRECOMP USE_WXPRECOMP INCLUDEDEP WX_MMD_FLAG JPEG_A JPEG_INC ZLIB_A ZLIB_INC PNG_A OSKHOME EXTRA_OSK_LIBS FOREIGN_OBJSLIB_IF_USED FOREIGN_LIB_IF_USED FOREIGN_OBJSLIB FOREIGN_CONVENIENCE FOREIGNTARGET LIBMZSCHEME_DEP LIBMRED_DEP LLVMTARGET LTO LTA subdirs LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP CXX CXXFLAGS ac_ct_CXX CXXCPP RANLIB ac_ct_RANLIB PERL X_CFLAGS X_PRE_LIBS X_LIBS X_EXTRA_LIBS PREFLAGS COMPFLAGS PROFFLAGS SED AS AR STATIC_AR ARFLAGS WBUILD CC_FOR_BUILD REZ MZLINKER PLAIN_CC DYN_CFLAGS x_includes x_libraries OPTIONS MZOPTIONS CGCOPTIONS GC2OPTIONS MROPTIONS GCDIR MZBINTARGET MZINSTALLTARGET EXTRA_GMP_OBJ OSX NOT_OSX FRAMEWORK_INSTALL_DIR FRAMEWORK_REL_INSTALL MREDLINKER LIBSFX WXLIBS WXVARIANT ICP MRLIBINSTALL LIBFINISH MAKE_MRED MAKE_MRED3M MAKE_MREDINSTALL MAKE_MREDINSTALL3M MAKE_WBUILD MAKE_COPYTREE MAKE_FINISH WXPRECOMP USE_WXPRECOMP INCLUDEDEP WX_MMD_FLAG JPEG_A JPEG_INC ZLIB_A ZLIB_INC PNG_A OSKHOME EXTRA_OSK_LIBS FOREIGN_OBJSLIB_IF_USED FOREIGN_LIB_IF_USED FOREIGN_OBJSLIB FOREIGN_CONVENIENCE FOREIGNTARGET LIBMZSCHEME_DEP LIBMRED_DEP LLVMTARGET LTO LTA subdirs LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -890,6 +890,7 @@ Optional Features: --enable-noopt drop -O C flags --enable-xonx compile X11 (not Quartz) MrEd for Mac OS X --enable-libfw install Mac OS X frameworks to /Library/Frameworks + --enable-userfw install Mac OS X frameworks to ~/Library/Frameworks Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1508,6 +1509,11 @@ fi; if test "${enable_libfw+set}" = set; then enableval="$enable_libfw" +fi; +# Check whether --enable-libfw or --disable-libfw was given. +if test "${enable_libfw+set}" = set; then + enableval="$enable_libfw" + fi; ###### Get OS Type ####### @@ -8622,8 +8628,13 @@ case $OS in enable_pthread=no if test "${enable_libfw}" = "yes" ; then FRAMEWORK_INSTALL_DIR=/Library/Frameworks - else + FRAMEWORK_REL_INSTALL=no + elif test "${enable_userfw}" = "yes" ; then FRAMEWORK_INSTALL_DIR=~/Library/Frameworks + FRAMEWORK_REL_INSTALL=no + else + FRAMEWORK_INSTALL_DIR='${LIBIDIR}' + FRAMEWORK_REL_INSTALL=yes fi else PREFLAGS="$PREFLAGS -DXONX " @@ -11068,6 +11079,7 @@ LIBS="$LIBS $EXTRALIBS" + mk_needed_dir() @@ -11903,6 +11915,7 @@ s,@EXTRA_GMP_OBJ@,$EXTRA_GMP_OBJ,;t t s,@OSX@,$OSX,;t t s,@NOT_OSX@,$NOT_OSX,;t t s,@FRAMEWORK_INSTALL_DIR@,$FRAMEWORK_INSTALL_DIR,;t t +s,@FRAMEWORK_REL_INSTALL@,$FRAMEWORK_REL_INSTALL,;t t s,@MREDLINKER@,$MREDLINKER,;t t s,@LIBSFX@,$LIBSFX,;t t s,@WXLIBS@,$WXLIBS,;t t diff --git a/src/mred/Makefile.in b/src/mred/Makefile.in index aedc945843..5efcba7002 100644 --- a/src/mred/Makefile.in +++ b/src/mred/Makefile.in @@ -108,10 +108,10 @@ MRFW = PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd MRFWRES = PLT_MrEd.framework/Versions/$(FWVERSION)/Resources/PLT_MrEd.rsrc $(MRFW) : $(MZSCHEME) $(MREDOBJECTS) $(@WXLIBS@) $(MRSTATIC_STUB) - $(MREDLINKER) $(MREDLDFLAGS) -dynamiclib -o $(MRFW) -F../mzscheme -framework PLT_MzScheme $(@WXLIBS@) $(GUILIBS_@WXVARIANT@) @X_EXTRA_LIBS@ + $(MREDLINKER) $(MREDLDFLAGS) -dynamiclib -o $(MRFW) -Wl,-headerpad_max_install_names -F../mzscheme -framework PLT_MzScheme $(@WXLIBS@) $(GUILIBS_@WXVARIANT@) @X_EXTRA_LIBS@ MrEd.app/Contents/MacOS/MrEd: $(MRFWRES) $(MRFW) mrmain.@LTO@ - $(MREDLINKER) -o MrEd.app/Contents/MacOS/MrEd mrmain.@LTO@ -F. -F../mzscheme -framework PLT_MrEd -framework Carbon -framework PLT_MzScheme @PROFFLAGS@ + $(MREDLINKER) -o MrEd.app/Contents/MacOS/MrEd mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -F../mzscheme -framework PLT_MrEd -framework Carbon -framework PLT_MzScheme @PROFFLAGS@ $(MRFWRES): $(srcdir)/../mac/osx_appl.ss $(srcdir)/../mac/cw/MrEd.r rm -rf PLT_MrEd.framework/Resources PLT_MrEd.framework/PLT_MrEd @@ -234,6 +234,9 @@ install_wx_xt: $(MAKE) @MRLIBINSTALL@ cd ..; $(ICP) mred/mred `(cd $(prefix); pwd)`/bin/ +LIBIDIR=$(prefix)/lib +BUILDINFO=$(LIBIDIR)/buildinfo + MRFWDIR = @FRAMEWORK_INSTALL_DIR@/PLT_MrEd.framework install_wx_mac: @@ -241,6 +244,7 @@ install_wx_mac: rm -rf $(MRFWDIR)/Versions/$(FWVERSION)/Resources rm -f $(MRFWDIR)/PLT_MrEd rm -rf $(MRFWDIR)/Resources + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then rm -rf $(MZFWDIR) ; fi if [ ! -d @FRAMEWORK_INSTALL_DIR@ ] ; then mkdir @FRAMEWORK_INSTALL_DIR@ ; fi if [ ! -d $(MRFWDIR) ] ; then mkdir $(MRFWDIR) ; fi if [ ! -d $(MRFWDIR)/Versions ] ; then mkdir $(MRFWDIR)/Versions ; fi @@ -255,9 +259,9 @@ install_wx_mac: if [ ! -d $(prefix)/collects ] ; then mkdir $(prefix)/collects ; fi if [ ! -d $(prefix)/collects/launcher ] ; then mkdir $(prefix)/collects/launcher ; fi cd ..; $(ICP) -r mred/Starter.app $(prefix)/collects/launcher/. - -LIBIDIR=$(prefix)/lib -BUILDINFO=$(LIBIDIR)/buildinfo + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/../../../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "$(MRFWDIR)/Versions/$(FWVERSION)/PLT_MrEd" ; fi + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/../../../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "$(prefix)/MrEd.app/Contents/MacOS/MrEd" ; fi + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" "@executable_path/../../../lib/PLT_MrEd.framework/Versions/$(FWVERSION)/PLT_MrEd" "$(prefix)/MrEd.app/Contents/MacOS/MrEd" ; fi install: $(MAKE) install_@WXVARIANT@ @@ -295,6 +299,9 @@ install-3m_wx_mac: if [ ! -d $(prefix)/collects ] ; then mkdir $(prefix)/collects ; fi if [ ! -d $(prefix)/collects/launcher ] ; then mkdir $(prefix)/collects/launcher ; fi cd ..; $(ICP) -r mred/Starter3m.app $(prefix)/collects/launcher/. + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/../../../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "$(MRFWDIR)/Versions/$(FWVERSION)_3m/PLT_MrEd" ; fi + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/../../../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "$(prefix)/MrEd3m.app/Contents/MacOS/MrEd3m" ; fi + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "@executable_path/../../../lib/PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd" "$(prefix)/MrEd3m.app/Contents/MacOS/MrEd3m" ; fi install-3m: $(MAKE) install-3m_@WXVARIANT@ diff --git a/src/mred/gc2/Makefile.in b/src/mred/gc2/Makefile.in index f3da8c8e15..8f4e27936d 100644 --- a/src/mred/gc2/Makefile.in +++ b/src/mred/gc2/Makefile.in @@ -1366,13 +1366,13 @@ MRFW = PLT_MrEd.framework/Versions/$(FWVERSION)_3m/PLT_MrEd MRFWRES = PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources/PLT_MrEd.rsrc ../MrEd3m.app/Contents/MacOS/MrEd3m: $(MRFWRES) $(MRFW) mrmain.@LTO@ - $(MREDLINKER) -o ../MrEd3m.app/Contents/MacOS/MrEd3m mrmain.@LTO@ -F. -F../../mzscheme/gc2 -framework PLT_MrEd -framework Carbon -framework PLT_MzScheme + $(MREDLINKER) -o ../MrEd3m.app/Contents/MacOS/MrEd3m mrmain.@LTO@ -Wl,-headerpad_max_install_names -F. -F../../mzscheme/gc2 -framework PLT_MrEd -framework Carbon -framework PLT_MzScheme if [ ! -d ../PLT_MrEd.framework/Versions/$(FWVERSION)_3m ] ; then mkdir ../PLT_MrEd.framework/Versions/$(FWVERSION)_3m ; fi cp $(MRFW) ../$(MRFW) cp -r PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources ../PLT_MrEd.framework/Versions/$(FWVERSION)_3m/Resources $(MRFW) : $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) - $(MREDLINKER) -dynamiclib -o $(MRFW) -F../../mzscheme/gc2 -framework PLT_MzScheme $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) $(@WXVARIANT@_LIBS) + $(MREDLINKER) -dynamiclib -o $(MRFW) -F../../mzscheme/gc2 -framework PLT_MzScheme -Wl,-headerpad_max_install_names $(XOBJS) $(@WXVARIANT@_PLAIN_OBJS) $(@WXVARIANT@_LIBS) $(MRFWRES): $(srcdir)/../../mac/osx_appl.ss $(srcdir)/../../mac/cw/MrEd.r rm -rf PLT_MrEd.framework/Resources PLT_MrEd.framework/PLT_MrEd diff --git a/src/mzscheme/Makefile.in b/src/mzscheme/Makefile.in index eb6d0ecda3..65fe4c06a0 100644 --- a/src/mzscheme/Makefile.in +++ b/src/mzscheme/Makefile.in @@ -149,7 +149,7 @@ $(MZFW): libmzscheme.@LIBSFX@ libmzgc.@LIBSFX@ $(SPECIALIZINGOBJECTS) ln -s Versions/$(FWVERSION)/PLT_MzScheme PLT_MzScheme.framework/PLT_MzScheme mzscheme@OSX@: $(MZFW) main.@LTO@ - $(CC) -o mzscheme @PROFFLAGS@ main.@LTO@ -F. -framework PLT_MzScheme + $(CC) -o mzscheme @PROFFLAGS@ main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme # OSKit ---------------------------------------- @@ -252,6 +252,7 @@ clean@OSX@: $(MAKE) clean@NOT_OSX@ LIBIDIR=`(cd $(prefix); pwd)`/lib +BINDIR=`(cd $(prefix); pwd)`/bin BUILDINFO=$(LIBIDIR)/buildinfo ICP=@ICP@ @@ -276,7 +277,7 @@ unix-install: cd ..; if [ ! -d $(LIBIDIR) ] ; then mkdir $(LIBIDIR) ; fi cd ..; $(ICP) mzscheme/libmzgc.@LIBSFX@ $(LIBIDIR)/libmzgc.@LIBSFX@ cd ..; $(ICP) mzscheme/libmzscheme.@LIBSFX@ $(LIBIDIR)/libmzscheme.@LIBSFX@ - cd ..; $(ICP) mzscheme/mzscheme `(cd $(prefix); pwd)`/bin/mzscheme + cd ..; $(ICP) mzscheme/mzscheme "$(BINDIR)/mzscheme" cd ..; echo 'CC=@CC@' > $(BUILDINFO) cd ..; echo 'CFLAGS=@CFLAGS@ @PREFLAGS@ @COMPFLAGS@' >> $(BUILDINFO) cd ..; echo 'OPTIONS=@OPTIONS@' >> $(BUILDINFO) @@ -294,12 +295,14 @@ osx-install: $(MAKE) normal-install rm -f $(MZFWDIR)/Versions/$(FWVERSION)/PLT_MzScheme rm -f $(MZFWDIR)/PLT_MzScheme + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then rm -rf $(MZFWDIR) ; fi if [ ! -d @FRAMEWORK_INSTALL_DIR@ ] ; then mkdir @FRAMEWORK_INSTALL_DIR@ ; fi if [ ! -d $(MZFWDIR) ] ; then mkdir $(MZFWDIR) ; fi if [ ! -d $(MZFWDIR)/Versions ] ; then mkdir $(MZFWDIR)/Versions ; fi if [ ! -d $(MZFWDIR)/Versions/$(FWVERSION) ] ; then mkdir $(MZFWDIR)/Versions/$(FWVERSION) ; fi cp $(MZFW) $(MZFWDIR)/Versions/$(FWVERSION)/ ln -s Versions/$(FWVERSION)/PLT_MzScheme $(MZFWDIR)/ + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)/PLT_MzScheme" "$(BINDIR)/mzscheme" ; fi MZFWMMM = PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme @@ -308,6 +311,7 @@ install-3m@OSX@: rm -f $(MZFWDIR)/Versions/$(FWVERSION)_3m/PLT_MzScheme if [ ! -d $(MZFWDIR)/Versions/$(FWVERSION)_3m ] ; then mkdir $(MZFWDIR)/Versions/$(FWVERSION)_3m ; fi cp $(MZFWMMM) $(MZFWDIR)/Versions/$(FWVERSION)_3m/ + if [ @FRAMEWORK_REL_INSTALL@ = yes ] ; then /usr/bin/install_name_tool -change "PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "@executable_path/../lib/PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme" "$(BINDIR)/mzscheme3m" ; fi WLIBIDIR=`(cd $(prefix); pwd)`/lib WBUILDINFO=$(WLIBIDIR)/buildinfo diff --git a/src/mzscheme/configure.ac b/src/mzscheme/configure.ac index 6a88012fad..e614b17807 100644 --- a/src/mzscheme/configure.ac +++ b/src/mzscheme/configure.ac @@ -63,6 +63,7 @@ AC_ARG_ENABLE(noopt, [ --enable-noopt drop -O C flags]) AC_ARG_ENABLE(xonx, [ --enable-xonx compile X11 (not Quartz) MrEd for Mac OS X]) AC_ARG_ENABLE(libfw, [ --enable-libfw install Mac OS X frameworks to /Library/Frameworks]) +AC_ARG_ENABLE(libfw, [ --enable-userfw install Mac OS X frameworks to ~/Library/Frameworks]) ###### Get OS Type ####### @@ -494,8 +495,13 @@ case $OS in enable_pthread=no if test "${enable_libfw}" = "yes" ; then FRAMEWORK_INSTALL_DIR=/Library/Frameworks - else + FRAMEWORK_REL_INSTALL=no + elif test "${enable_userfw}" = "yes" ; then FRAMEWORK_INSTALL_DIR=~/Library/Frameworks + FRAMEWORK_REL_INSTALL=no + else + FRAMEWORK_INSTALL_DIR='${LIBIDIR}' + FRAMEWORK_REL_INSTALL=yes fi else PREFLAGS="$PREFLAGS -DXONX " @@ -1044,6 +1050,7 @@ AC_SUBST(EXTRA_GMP_OBJ) AC_SUBST(OSX) AC_SUBST(NOT_OSX) AC_SUBST(FRAMEWORK_INSTALL_DIR) +AC_SUBST(FRAMEWORK_REL_INSTALL) AC_SUBST(MREDLINKER) AC_SUBST(LIBSFX) diff --git a/src/mzscheme/gc2/Makefile.in b/src/mzscheme/gc2/Makefile.in index cf944d2b87..d5bbe8d2ba 100644 --- a/src/mzscheme/gc2/Makefile.in +++ b/src/mzscheme/gc2/Makefile.in @@ -305,7 +305,7 @@ $(MZFWMMM): $(OBJS) $(EXTRA_OBJS_T) ln -s Versions/$(FWVERSION)_3m/PLT_MzScheme PLT_MzScheme.framework/PLT_MzScheme ../mzscheme3m@OSX@: $(MZFWMMM) main.@LTO@ - $(CC) -o ../mzscheme3m main.@LTO@ -F. -framework PLT_MzScheme + $(CC) -o ../mzscheme3m main.@LTO@ -Wl,-headerpad_max_install_names -F. -framework PLT_MzScheme if [ ! -d ../PLT_MzScheme.framework/Versions/$(FWVERSION)_3m ] ; then mkdir ../PLT_MzScheme.framework/Versions/$(FWVERSION)_3m ; fi cp PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme ../PLT_MzScheme.framework/Versions/$(FWVERSION)_3m/PLT_MzScheme