OS X: support Unix-style install

Support "Unix-style" (as opposed to "in-place") installation for
OS X, which is mostly a matter of putting ".app" files in the
right place and correcting relative references.

Intended to fix #1180
This commit is contained in:
Matthew Flatt 2016-01-28 07:59:16 -08:00
parent 7a11d09134
commit 4e7bb3071a
7 changed files with 83 additions and 24 deletions

View File

@ -1486,8 +1486,11 @@
(mac-dest->executable dest mred?) (mac-dest->executable dest mred?)
mred?) mred?)
(when mred? (when mred?
;; adjust relative path (since GRacket is off by one): ;; adjust relative path (since GRacket is normally off by one):
(update-framework-path "@executable_path/../../../lib/" (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?) (mac-dest->executable dest mred?)
#t))) #t)))
;; Check whether we need an absolute path to frameworks: ;; Check whether we need an absolute path to frameworks:

View File

@ -399,7 +399,14 @@
(find-lib-dir) (find-lib-dir)
(let ([p (path-only dest)]) (let ([p (path-only dest)])
(if (eq? 'macosx (cross-system-type)) (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)))) p))))
(find-console-bin-dir))]) (find-console-bin-dir))])
(if (let ([a (assq 'relative? aux)]) (if (let ([a (assq 'relative? aux)])

View File

@ -134,7 +134,9 @@
[file (cdr file)]) [file (cdr file)])
(cond [(null? dir) (if (null? file) filename (apply build-path file))] (cond [(null? dir) (if (null? file) filename (apply build-path file))]
[(null? file) (apply build-path/convention-type [(null? file) (apply build-path/convention-type
(path-convention-type filename) (if (string? filename)
(system-path-convention-type)
(path-convention-type filename))
(map (lambda (x) 'up) dir))] (map (lambda (x) 'up) dir))]
[(equal? (car dir) (car file)) [(equal? (car dir) (car file))
(loop (cdr dir) (cdr file))] (loop (cdr dir) (cdr file))]

25
racket/src/configure vendored
View File

@ -639,13 +639,16 @@ CGC
MMM_CAP_INSTALLED MMM_CAP_INSTALLED
MMM_INSTALLED MMM_INSTALLED
MMM MMM
GR_APP_CONFIG_PATH
GUI_CONFIG_PATH GUI_CONFIG_PATH
CONFIG_PATH CONFIG_PATH
GR_APP_COLLECTS_PATH
GUI_COLLECTS_PATH GUI_COLLECTS_PATH
COLLECTS_PATH COLLECTS_PATH
includepltdir includepltdir
etcpltdir etcpltdir
sharepltdir sharepltdir
libpltdir_rel
libpltdir libpltdir
appsdir appsdir
collectsdir collectsdir
@ -2872,7 +2875,9 @@ else
case "$host_os" in case "$host_os" in
darwin*) darwin*)
enable_quartz=yes enable_quartz=yes
if test "${enable_origtree}" != "no" ; then
enable_origtree=yes enable_origtree=yes
fi
if test "${prefix}" != "NONE" ; then if test "${prefix}" != "NONE" ; then
if test "${enable_macprefix}" != "yes" ; then if test "${enable_macprefix}" != "yes" ; then
echo "ERROR: --prefix not allowed for a Mac OS X build, unless either" echo "ERROR: --prefix not allowed for a Mac OS X build, unless either"
@ -2952,6 +2957,7 @@ if test "${unixstyle}" = "no" ; then
fi fi
bindir='${prefix}/bin' bindir='${prefix}/bin'
libpltdir='${prefix}/lib' libpltdir='${prefix}/lib'
libpltdir_rel='lib'
sharepltdir='${prefix}/share' sharepltdir='${prefix}/share'
etcpltdir='${prefix}/etc' etcpltdir='${prefix}/etc'
includepltdir='${prefix}/include' includepltdir='${prefix}/include'
@ -2961,6 +2967,8 @@ if test "${unixstyle}" = "no" ; then
appsdir='${prefix}/share/applications' appsdir='${prefix}/share/applications'
COLLECTS_PATH="../collects" COLLECTS_PATH="../collects"
CONFIG_PATH="../etc" CONFIG_PATH="../etc"
GR_APP_COLLECTS_PATH="../../../../collects"
GR_APP_CONFIG_PATH="../../../../etc"
INSTALL_ORIG_TREE=yes INSTALL_ORIG_TREE=yes
else else
if test "${prefix}" = "NONE" ; then if test "${prefix}" = "NONE" ; then
@ -2968,12 +2976,20 @@ else
prefix="${ac_default_prefix}" prefix="${ac_default_prefix}"
fi fi
libpltdir="${libdir}/"'${PACKAGE}' 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}' sharepltdir="${datadir}/"'${PACKAGE}'
etcpltdir="${sysconfdir}/"'${PACKAGE}' etcpltdir="${sysconfdir}/"'${PACKAGE}'
includepltdir="${includedir}/"'${PACKAGE}' includepltdir="${includedir}/"'${PACKAGE}'
MAKE_COPYTREE=copytree MAKE_COPYTREE=copytree
COLLECTS_PATH='${collectsdir}' COLLECTS_PATH='${collectsdir}'
CONFIG_PATH='${etcpltdir}' CONFIG_PATH='${etcpltdir}'
GR_APP_COLLECTS_PATH="${COLLECTS_PATH}"
GR_APP_CONFIG_PATH="${CONFIG_PATH}"
INSTALL_ORIG_TREE=no INSTALL_ORIG_TREE=no
fi fi
@ -4847,10 +4863,14 @@ fi
FRAMEWORK_REL_INSTALL=no FRAMEWORK_REL_INSTALL=no
FRAMEWORK_PREFIX='' FRAMEWORK_PREFIX=''
else else
FRAMEWORK_INSTALL_DIR='${libdir}' FRAMEWORK_INSTALL_DIR='${libpltdir}'
FRAMEWORK_REL_INSTALL=yes FRAMEWORK_REL_INSTALL=yes
if test "${libpltdir_rel}" = "" ; then
FRAMEWORK_PREFIX='$(FRAMEWORK_ABS_PREFIX)'
else
FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)'
fi fi
fi
else else
PREFLAGS="$PREFLAGS -DXONX " PREFLAGS="$PREFLAGS -DXONX "
fi fi
@ -6995,6 +7015,9 @@ LIBS="$LIBS $EXTRALIBS"

View File

@ -11,6 +11,7 @@ datarootdir = @datarootdir@
bindir = @bindir@ bindir = @bindir@
libdir = @libdir@ libdir = @libdir@
libpltdir = @libpltdir@ libpltdir = @libpltdir@
libpltdir_rel = @libpltdir_rel@
etcpltdir = @etcpltdir@ etcpltdir = @etcpltdir@
sharepltdir = @sharepltdir@ sharepltdir = @sharepltdir@
collectsdir = @collectsdir@ collectsdir = @collectsdir@
@ -235,6 +236,7 @@ install-wx_xt-post-collects:
# Mac OS X ---------------------------------------- # Mac OS X ----------------------------------------
FRAMEWORK_REL_PREFIX="@executable_path/../../../" FRAMEWORK_REL_PREFIX="@executable_path/../../../"
FRAMEWORK_ABS_PREFIX = "$(libpltdir)/"
install-wx_mac: install-wx_mac:
$(MAKE) install-common $(MAKE) install-common
@ -242,28 +244,28 @@ install-wx_mac:
cd ..; rm -rf $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" cd ..; rm -rf $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app"
install-wx_mac-cgc: install-wx_mac-cgc:
cd ..; $(ICP) -r gracket/GRacket@CGC@.app $(DESTDIR)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app" 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)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app" "GRacket@CGC@" "GRacket@CGC_CAP_INSTALLED@" @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)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/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)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" ../../../../collects ../../../../etc @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)"$(prefix)/lib/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@" @STRIP_DEBUG@ $(DESTDIR)"$(libpltdir)/GRacket@CGC_CAP_INSTALLED@.app/Contents/MacOS/GRacket@CGC_CAP_INSTALLED@"
install-wx_mac-cgc-final: install-wx_mac-cgc-final:
$(NOOP) $(NOOP)
install-wx_mac-3m: install-wx_mac-3m:
cd ..; $(ICP) -r "gracket/GRacket@MMM@.app" $(DESTDIR)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" 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)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app" "GRacket@MMM@" "GRacket@MMM_CAP_INSTALLED@" @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)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/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)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" "../../../../collects" ../../../../etc @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)"$(prefix)/lib/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@" @STRIP_DEBUG@ $(DESTDIR)"$(libpltdir)/GRacket@MMM_CAP_INSTALLED@.app/Contents/MacOS/GRacket@MMM_CAP_INSTALLED@"
install-wx_mac-3m-final: install-wx_mac-3m-final:
$(NOOP) $(NOOP)
install-wx_mac-post-collects: install-wx_mac-post-collects:
cd ..; rm -rf $(DESTDIR)$(prefix)/lib/Starter.app cd ..; rm -rf $(DESTDIR)$(libpltdir)/Starter.app
cd ..; $(ICP) -r gracket/Starter.app $(DESTDIR)$(prefix)/lib/. cd ..; $(ICP) -r gracket/Starter.app $(DESTDIR)$(libpltdir)/.
@INCLUDEDEP@ grmain.d @INCLUDEDEP@ grmain.d

View File

@ -12,6 +12,7 @@ bindir = @bindir@
libdir = @libdir@ libdir = @libdir@
includepltdir = @includepltdir@ includepltdir = @includepltdir@
libpltdir = @libpltdir@ libpltdir = @libpltdir@
libpltdir_rel = @libpltdir_rel@
etcpltdir = @etcpltdir@ etcpltdir = @etcpltdir@
sharepltdir = @sharepltdir@ sharepltdir = @sharepltdir@
collectsdir = @collectsdir@ collectsdir = @collectsdir@
@ -494,7 +495,8 @@ mingw-install-3m-final:
MZFWDIR = @FRAMEWORK_INSTALL_DIR@/Racket.framework MZFWDIR = @FRAMEWORK_INSTALL_DIR@/Racket.framework
MZFWMMM = Racket.framework/Versions/$(FWVERSION)_3m/Racket 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: osx-install:
$(MAKE) unix-install $(MAKE) unix-install

View File

@ -143,7 +143,9 @@ else
case "$host_os" in case "$host_os" in
darwin*) darwin*)
enable_quartz=yes enable_quartz=yes
if test "${enable_origtree}" != "no" ; then
enable_origtree=yes enable_origtree=yes
fi
if test "${prefix}" != "NONE" ; then if test "${prefix}" != "NONE" ; then
if test "${enable_macprefix}" != "yes" ; then if test "${enable_macprefix}" != "yes" ; then
echo "ERROR: --prefix not allowed for a Mac OS X build, unless either" echo "ERROR: --prefix not allowed for a Mac OS X build, unless either"
@ -223,6 +225,7 @@ if test "${unixstyle}" = "no" ; then
fi fi
bindir='${prefix}/bin' bindir='${prefix}/bin'
libpltdir='${prefix}/lib' libpltdir='${prefix}/lib'
libpltdir_rel='lib'
sharepltdir='${prefix}/share' sharepltdir='${prefix}/share'
etcpltdir='${prefix}/etc' etcpltdir='${prefix}/etc'
includepltdir='${prefix}/include' includepltdir='${prefix}/include'
@ -232,6 +235,8 @@ if test "${unixstyle}" = "no" ; then
appsdir='${prefix}/share/applications' appsdir='${prefix}/share/applications'
COLLECTS_PATH="../collects" COLLECTS_PATH="../collects"
CONFIG_PATH="../etc" CONFIG_PATH="../etc"
GR_APP_COLLECTS_PATH="../../../../collects"
GR_APP_CONFIG_PATH="../../../../etc"
INSTALL_ORIG_TREE=yes INSTALL_ORIG_TREE=yes
else else
if test "${prefix}" = "NONE" ; then if test "${prefix}" = "NONE" ; then
@ -239,12 +244,20 @@ else
prefix="${ac_default_prefix}" prefix="${ac_default_prefix}"
fi fi
libpltdir="${libdir}/"'${PACKAGE}' 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}' sharepltdir="${datadir}/"'${PACKAGE}'
etcpltdir="${sysconfdir}/"'${PACKAGE}' etcpltdir="${sysconfdir}/"'${PACKAGE}'
includepltdir="${includedir}/"'${PACKAGE}' includepltdir="${includedir}/"'${PACKAGE}'
MAKE_COPYTREE=copytree MAKE_COPYTREE=copytree
COLLECTS_PATH='${collectsdir}' COLLECTS_PATH='${collectsdir}'
CONFIG_PATH='${etcpltdir}' CONFIG_PATH='${etcpltdir}'
GR_APP_COLLECTS_PATH="${COLLECTS_PATH}"
GR_APP_CONFIG_PATH="${CONFIG_PATH}"
INSTALL_ORIG_TREE=no INSTALL_ORIG_TREE=no
fi fi
@ -928,10 +941,14 @@ case "$host_os" in
FRAMEWORK_REL_INSTALL=no FRAMEWORK_REL_INSTALL=no
FRAMEWORK_PREFIX='' FRAMEWORK_PREFIX=''
else else
FRAMEWORK_INSTALL_DIR='${libdir}' FRAMEWORK_INSTALL_DIR='${libpltdir}'
FRAMEWORK_REL_INSTALL=yes FRAMEWORK_REL_INSTALL=yes
if test "${libpltdir_rel}" = "" ; then
FRAMEWORK_PREFIX='$(FRAMEWORK_ABS_PREFIX)'
else
FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)' FRAMEWORK_PREFIX='$(FRAMEWORK_REL_PREFIX)'
fi fi
fi
else else
PREFLAGS="$PREFLAGS -DXONX " PREFLAGS="$PREFLAGS -DXONX "
fi fi
@ -1817,14 +1834,17 @@ AC_SUBST(LTA)
AC_SUBST(collectsdir) AC_SUBST(collectsdir)
AC_SUBST(appsdir) AC_SUBST(appsdir)
AC_SUBST(libpltdir) AC_SUBST(libpltdir)
AC_SUBST(libpltdir_rel)
AC_SUBST(sharepltdir) AC_SUBST(sharepltdir)
AC_SUBST(etcpltdir) AC_SUBST(etcpltdir)
AC_SUBST(includepltdir) AC_SUBST(includepltdir)
AC_SUBST(docdir) AC_SUBST(docdir)
AC_SUBST(COLLECTS_PATH) AC_SUBST(COLLECTS_PATH)
AC_SUBST(GUI_COLLECTS_PATH) AC_SUBST(GUI_COLLECTS_PATH)
AC_SUBST(GR_APP_COLLECTS_PATH)
AC_SUBST(CONFIG_PATH) AC_SUBST(CONFIG_PATH)
AC_SUBST(GUI_CONFIG_PATH) AC_SUBST(GUI_CONFIG_PATH)
AC_SUBST(GR_APP_CONFIG_PATH)
AC_SUBST(MMM) AC_SUBST(MMM)
AC_SUBST(MMM_INSTALLED) AC_SUBST(MMM_INSTALLED)