diff --git a/racket/collects/compiler/embed.rkt b/racket/collects/compiler/embed.rkt index 9c58d28b80..8ed985785f 100644 --- a/racket/collects/compiler/embed.rkt +++ b/racket/collects/compiler/embed.rkt @@ -1486,8 +1486,11 @@ (mac-dest->executable dest mred?) mred?) (when mred? - ;; adjust relative path (since GRacket is off by one): - (update-framework-path "@executable_path/../../../lib/" + ;; adjust relative path (since GRacket is normally off by one): + (define rel (find-relative-path (find-gui-bin-dir) + (find-lib-dir))) + (update-framework-path (format "@executable_path/../../../~a" + (path->directory-path rel)) (mac-dest->executable dest mred?) #t))) ;; Check whether we need an absolute path to frameworks: diff --git a/racket/collects/launcher/launcher.rkt b/racket/collects/launcher/launcher.rkt index 162fc5b939..8bf48c802d 100644 --- a/racket/collects/launcher/launcher.rkt +++ b/racket/collects/launcher/launcher.rkt @@ -399,7 +399,14 @@ (find-lib-dir) (let ([p (path-only dest)]) (if (eq? 'macosx (cross-system-type)) - (build-path p 'up) + (let* ([cdir (find-console-bin-dir)] + [gdir (find-gui-bin-dir)] + [rel (find-relative-path cdir gdir)]) + (cond + [(relative-path? rel) + (build-path p rel)] + [(equal? cdir gdir) p] + [else rel])) p)))) (find-console-bin-dir))]) (if (let ([a (assq 'relative? aux)]) diff --git a/racket/collects/racket/path.rkt b/racket/collects/racket/path.rkt index 3210cc69d5..2a8f04ec4f 100644 --- a/racket/collects/racket/path.rkt +++ b/racket/collects/racket/path.rkt @@ -133,8 +133,10 @@ (let loop ([dir (cdr dir)] [file (cdr file)]) (cond [(null? dir) (if (null? file) filename (apply build-path file))] - [(null? file) (apply build-path/convention-type - (path-convention-type filename) + [(null? file) (apply build-path/convention-type + (if (string? filename) + (system-path-convention-type) + (path-convention-type filename)) (map (lambda (x) 'up) dir))] [(equal? (car dir) (car file)) (loop (cdr dir) (cdr file))] diff --git a/racket/src/configure b/racket/src/configure index 86e48fb970..4056d18e26 100755 --- a/racket/src/configure +++ b/racket/src/configure @@ -639,13 +639,16 @@ CGC MMM_CAP_INSTALLED MMM_INSTALLED MMM +GR_APP_CONFIG_PATH GUI_CONFIG_PATH CONFIG_PATH +GR_APP_COLLECTS_PATH GUI_COLLECTS_PATH COLLECTS_PATH includepltdir etcpltdir sharepltdir +libpltdir_rel libpltdir appsdir collectsdir @@ -2872,7 +2875,9 @@ else case "$host_os" in darwin*) enable_quartz=yes - enable_origtree=yes + if test "${enable_origtree}" != "no" ; then + enable_origtree=yes + fi if test "${prefix}" != "NONE" ; then if test "${enable_macprefix}" != "yes" ; then echo "ERROR: --prefix not allowed for a Mac OS X build, unless either" @@ -2952,6 +2957,7 @@ if test "${unixstyle}" = "no" ; then fi bindir='${prefix}/bin' libpltdir='${prefix}/lib' + libpltdir_rel='lib' sharepltdir='${prefix}/share' etcpltdir='${prefix}/etc' includepltdir='${prefix}/include' @@ -2961,6 +2967,8 @@ if test "${unixstyle}" = "no" ; then appsdir='${prefix}/share/applications' COLLECTS_PATH="../collects" CONFIG_PATH="../etc" + GR_APP_COLLECTS_PATH="../../../../collects" + GR_APP_CONFIG_PATH="../../../../etc" INSTALL_ORIG_TREE=yes else if test "${prefix}" = "NONE" ; then @@ -2968,12 +2976,20 @@ else prefix="${ac_default_prefix}" fi libpltdir="${libdir}/"'${PACKAGE}' + libpltdir_rel="" + if test "${libpltdir}" = '${exec_prefix}/lib/${PACKAGE}' ; then + if test "${bindir}" = '${exec_prefix}/bin' ; then + libpltdir_rel="lib/"'${PACKAGE}' + fi + fi sharepltdir="${datadir}/"'${PACKAGE}' etcpltdir="${sysconfdir}/"'${PACKAGE}' includepltdir="${includedir}/"'${PACKAGE}' MAKE_COPYTREE=copytree COLLECTS_PATH='${collectsdir}' CONFIG_PATH='${etcpltdir}' + GR_APP_COLLECTS_PATH="${COLLECTS_PATH}" + GR_APP_CONFIG_PATH="${CONFIG_PATH}" INSTALL_ORIG_TREE=no fi @@ -4847,9 +4863,13 @@ fi FRAMEWORK_REL_INSTALL=no FRAMEWORK_PREFIX='' else - FRAMEWORK_INSTALL_DIR='${libdir}' + FRAMEWORK_INSTALL_DIR='${libpltdir}' FRAMEWORK_REL_INSTALL=yes - FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' + if test "${libpltdir_rel}" = "" ; then + FRAMEWORK_PREFIX='$(FRAMEWORK_ABS_PREFIX)' + else + FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' + fi fi else PREFLAGS="$PREFLAGS -DXONX " @@ -6995,6 +7015,9 @@ LIBS="$LIBS $EXTRALIBS" + + + diff --git a/racket/src/gracket/Makefile.in b/racket/src/gracket/Makefile.in index 7bdf0793b8..f8b97111ef 100644 --- a/racket/src/gracket/Makefile.in +++ b/racket/src/gracket/Makefile.in @@ -11,6 +11,7 @@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ libpltdir = @libpltdir@ +libpltdir_rel = @libpltdir_rel@ etcpltdir = @etcpltdir@ sharepltdir = @sharepltdir@ collectsdir = @collectsdir@ @@ -235,6 +236,7 @@ install-wx_xt-post-collects: # Mac OS X ---------------------------------------- FRAMEWORK_REL_PREFIX="@executable_path/../../../" +FRAMEWORK_ABS_PREFIX = "$(libpltdir)/" install-wx_mac: $(MAKE) install-common @@ -242,28 +244,28 @@ install-wx_mac: cd ..; rm -rf $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" install-wx_mac-cgc: - cd ..; $(ICP) -r gracket/GRacket@CGC@.app $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app" - @RUN_RACKET_CGC@ $(SELF_RACKET_FLAGS) -cqu "$(srcdir)/../mac/rename-app.rkt" $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app" "GRacket@CGC@" "GRacket@CGC_CAP_INSTALLED@" - /usr/bin/install_name_tool -change "@executable_path/../../../../racket/Racket.framework/Versions/$(FWVERSION)/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)/Racket" $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" - @RUN_RACKET_CGC@ $(SELF_RACKET_FLAGS) -cu "$(srcdir)/../racket/collects-path.rkt" $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" ../../../../collects ../../../../etc - @STRIP_DEBUG@ $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" + cd ..; $(ICP) -r gracket/GRacket@CGC@.app $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app" + @RUN_RACKET_CGC@ $(SELF_RACKET_FLAGS) -cqu "$(srcdir)/../mac/rename-app.rkt" $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app" "GRacket@CGC@" "GRacket@CGC_CAP_INSTALLED@" + /usr/bin/install_name_tool -change "@executable_path/../../../../racket/Racket.framework/Versions/$(FWVERSION)/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)/Racket" $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" + @RUN_RACKET_CGC@ $(SELF_RACKET_FLAGS) -cu "$(srcdir)/../racket/collects-path.rkt" $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" @GR_APP_COLLECTS_PATH@ @GR_APP_CONFIG_PATH@ + @STRIP_DEBUG@ $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" install-wx_mac-cgc-final: $(NOOP) install-wx_mac-3m: - cd ..; $(ICP) -r "gracket/GRacket@MMM@.app" $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" - @RUN_RACKET_MMM@ $(SELF_RACKET_FLAGS) -cqu "$(srcdir)/../mac/rename-app.rkt" $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" "GRacket@MMM@" "GRacket@MMM_CAP_INSTALLED@" - /usr/bin/install_name_tool -change "@executable_path/../../../../racket/Racket.framework/Versions/$(FWVERSION)_3m/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_3m/Racket" $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" - @RUN_RACKET_MMM@ $(SELF_RACKET_FLAGS) -cu "$(srcdir)/../racket/collects-path.rkt" $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" "../../../../collects" ../../../../etc - @STRIP_DEBUG@ $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" + cd ..; $(ICP) -r "gracket/GRacket@MMM@.app" $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app" + @RUN_RACKET_MMM@ $(SELF_RACKET_FLAGS) -cqu "$(srcdir)/../mac/rename-app.rkt" $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app" "GRacket@MMM@" "GRacket@MMM_CAP_INSTALLED@" + /usr/bin/install_name_tool -change "@executable_path/../../../../racket/Racket.framework/Versions/$(FWVERSION)_3m/Racket" "@FRAMEWORK_PREFIX@Racket.framework/Versions/$(FWVERSION)_3m/Racket" $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" + @RUN_RACKET_MMM@ $(SELF_RACKET_FLAGS) -cu "$(srcdir)/../racket/collects-path.rkt" $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" @GR_APP_COLLECTS_PATH@ @GR_APP_CONFIG_PATH@ + @STRIP_DEBUG@ $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" install-wx_mac-3m-final: $(NOOP) install-wx_mac-post-collects: - cd ..; rm -rf $(DESTDIR)$(prefix)/lib/Starter.app - cd ..; $(ICP) -r gracket/Starter.app $(DESTDIR)$(prefix)/lib/. + cd ..; rm -rf $(DESTDIR)$(libpltdir)/Starter.app + cd ..; $(ICP) -r gracket/Starter.app $(DESTDIR)$(libpltdir)/. @INCLUDEDEP@ grmain.d diff --git a/racket/src/racket/Makefile.in b/racket/src/racket/Makefile.in index 8c52c7ba34..e6d234053b 100644 --- a/racket/src/racket/Makefile.in +++ b/racket/src/racket/Makefile.in @@ -12,6 +12,7 @@ bindir = @bindir@ libdir = @libdir@ includepltdir = @includepltdir@ libpltdir = @libpltdir@ +libpltdir_rel = @libpltdir_rel@ etcpltdir = @etcpltdir@ sharepltdir = @sharepltdir@ collectsdir = @collectsdir@ @@ -494,7 +495,8 @@ mingw-install-3m-final: MZFWDIR = @FRAMEWORK_INSTALL_DIR@/Racket.framework MZFWMMM = Racket.framework/Versions/$(FWVERSION)_3m/Racket -FRAMEWORK_REL_PREFIX = "@executable_path/../lib/" +FRAMEWORK_REL_PREFIX = "@executable_path/../$(libpltdir_rel)/" +FRAMEWORK_ABS_PREFIX = "$(libpltdir)/" osx-install: $(MAKE) unix-install diff --git a/racket/src/racket/configure.ac b/racket/src/racket/configure.ac index e37b39ec5a..7b1481c1e6 100644 --- a/racket/src/racket/configure.ac +++ b/racket/src/racket/configure.ac @@ -143,7 +143,9 @@ else case "$host_os" in darwin*) enable_quartz=yes - enable_origtree=yes + if test "${enable_origtree}" != "no" ; then + enable_origtree=yes + fi if test "${prefix}" != "NONE" ; then if test "${enable_macprefix}" != "yes" ; then echo "ERROR: --prefix not allowed for a Mac OS X build, unless either" @@ -223,6 +225,7 @@ if test "${unixstyle}" = "no" ; then fi bindir='${prefix}/bin' libpltdir='${prefix}/lib' + libpltdir_rel='lib' sharepltdir='${prefix}/share' etcpltdir='${prefix}/etc' includepltdir='${prefix}/include' @@ -232,6 +235,8 @@ if test "${unixstyle}" = "no" ; then appsdir='${prefix}/share/applications' COLLECTS_PATH="../collects" CONFIG_PATH="../etc" + GR_APP_COLLECTS_PATH="../../../../collects" + GR_APP_CONFIG_PATH="../../../../etc" INSTALL_ORIG_TREE=yes else if test "${prefix}" = "NONE" ; then @@ -239,12 +244,20 @@ else prefix="${ac_default_prefix}" fi libpltdir="${libdir}/"'${PACKAGE}' + libpltdir_rel="" + if test "${libpltdir}" = '${exec_prefix}/lib/${PACKAGE}' ; then + if test "${bindir}" = '${exec_prefix}/bin' ; then + libpltdir_rel="lib/"'${PACKAGE}' + fi + fi sharepltdir="${datadir}/"'${PACKAGE}' etcpltdir="${sysconfdir}/"'${PACKAGE}' includepltdir="${includedir}/"'${PACKAGE}' MAKE_COPYTREE=copytree COLLECTS_PATH='${collectsdir}' CONFIG_PATH='${etcpltdir}' + GR_APP_COLLECTS_PATH="${COLLECTS_PATH}" + GR_APP_CONFIG_PATH="${CONFIG_PATH}" INSTALL_ORIG_TREE=no fi @@ -928,9 +941,13 @@ case "$host_os" in FRAMEWORK_REL_INSTALL=no FRAMEWORK_PREFIX='' else - FRAMEWORK_INSTALL_DIR='${libdir}' + FRAMEWORK_INSTALL_DIR='${libpltdir}' FRAMEWORK_REL_INSTALL=yes - FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' + if test "${libpltdir_rel}" = "" ; then + FRAMEWORK_PREFIX='$(FRAMEWORK_ABS_PREFIX)' + else + FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' + fi fi else PREFLAGS="$PREFLAGS -DXONX " @@ -1817,14 +1834,17 @@ AC_SUBST(LTA) AC_SUBST(collectsdir) AC_SUBST(appsdir) AC_SUBST(libpltdir) +AC_SUBST(libpltdir_rel) AC_SUBST(sharepltdir) AC_SUBST(etcpltdir) AC_SUBST(includepltdir) AC_SUBST(docdir) AC_SUBST(COLLECTS_PATH) AC_SUBST(GUI_COLLECTS_PATH) +AC_SUBST(GR_APP_COLLECTS_PATH) AC_SUBST(CONFIG_PATH) AC_SUBST(GUI_CONFIG_PATH) +AC_SUBST(GR_APP_CONFIG_PATH) AC_SUBST(MMM) AC_SUBST(MMM_INSTALLED)