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?)
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:

View File

@ -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)])

View File

@ -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))]

29
racket/src/configure vendored
View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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)