Skip to content

Commit eef6635

Browse files
committed
Do not depend on Mono executables being in the PATH, but use prefix and system Mono paths to resolve them. Fixes El Capitan build issues.
The symlinks for the system Mono executables are installed in /usr/local/bin starting from OS X El Capitan, and we may no longer rely on them being part of the user's PATH. These changes prioritize using pkg-config to resolve their path, and look for pkg-config itself first in the F# install prefix, and then at the system Mono location. PATH is last resort. This also properly isolates parallel installations from System Mono.
1 parent c3d4eb8 commit eef6635

File tree

13 files changed

+32
-27
lines changed

13 files changed

+32
-27
lines changed

config.make.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ topdir := @abs_top_srcdir@/
44
builddir := @abs_top_builddir@/
55
libdir := ${prefix}/lib/
66
bindir := ${prefix}/bin/
7+
monobindir := @MONOBINDIR@
78
monolibdir := @MONOLIBDIR@
89
monogacdir := @MONOGACDIR@
910

configure.ac

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,13 @@ AC_PROG_MAKE_SET
99

1010
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
1111

12-
# On OSX use Mono's private copy of pkg-config if it exists, see https://github.com/fsharp/fsharp/issues/107
12+
# pkg-config precedence: 1) our prefix 2) the system Mono location 3) the PATH
13+
prefix_pkg_config="$prefix"/bin/pkg-config
1314
osx_pkg_config=/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
14-
if test -e $osx_pkg_config; then
15+
16+
if test -e $prefix_pkg_config; then
17+
PKG_CONFIG=$prefix_pkg_config
18+
elif test -e $osx_pkg_config; then
1519
PKG_CONFIG=$osx_pkg_config
1620
elif test "x$PKG_CONFIG" = "xno"; then
1721
AC_MSG_ERROR([You need to install pkg-config])
@@ -20,18 +24,6 @@ fi
2024
AC_MSG_NOTICE("pkg-config: $PKG_CONFIG")
2125
AC_MSG_NOTICE("PKG_CONFIG_LIBDIR: $PKG_CONFIG_LIBDIR")
2226

23-
# On OSX El Capitan, xbuild is no longer in PATH, so we need to use the full path.
24-
AC_PATH_PROG(XBUILD, xbuild, no)
25-
osx_xbuild=/Library/Frameworks/Mono.framework/Versions/Current/bin/xbuild
26-
if test "x$XBUILD" == "xno"; then
27-
if test -e $osx_xbuild; then
28-
XBUILD=$osx_xbuild
29-
else
30-
AC_MSG_ERROR([Could not find xbuild])
31-
fi
32-
fi
33-
AC_MSG_NOTICE(xbuild: $XBUILD)
34-
3527
MONO_REQUIRED_VERSION=3.0
3628
MONO_RECOMMENDED_VERSION=3.2
3729

@@ -64,7 +56,18 @@ AC_ARG_WITH([gacdir],
6456
)
6557

6658
MONOPREFIX=$(cd `$PKG_CONFIG --variable=prefix mono` && pwd)
59+
MONOBINDIR="$MONOPREFIX"/bin
6760
MONOLIBDIR="$MONOPREFIX"/lib
61+
62+
AC_PATH_PROG(XBUILD, xbuild, no)
63+
xbuild_from_pkg_config="$MONOBINDIR"/xbuild
64+
if test -e $xbuild_from_pkg_config; then
65+
XBUILD=$xbuild_from_pkg_config
66+
elif test "x$XBUILD" == "xno"; then
67+
AC_MSG_ERROR([Could not find xbuild])
68+
fi
69+
AC_MSG_NOTICE(xbuild: $XBUILD)
70+
6871
MONOGACDIR="$MONOLIBDIR"/mono
6972
if ! test "x$with_gacdir" = "xno"; then
7073
MONOGACDIR=$(cd "$with_gacdir/.." && pwd)
@@ -138,6 +141,7 @@ AC_SUBST(MONOTOUCHENABLED)
138141
AC_SUBST(MONODROIDENABLED)
139142
AC_SUBST(XAMARINMACENABLED)
140143

144+
AC_SUBST(MONOBINDIR)
141145
AC_SUBST(MONOLIBDIR)
142146
AC_SUBST(MONOGACDIR)
143147

launcher.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ fi
2121
# location of the default FSharp install in order to find the FSharp compiler binaries (see
2222
# fsharpbinding/MonoDevelop.FSharpBinding/Services/CompilerLocationUtils.fs). That's a pretty unfortunate
2323
# way of finding those binaries. And really should be changed.
24-
$EXEC mono $DEBUG $MONO_OPTIONS @DIR@/@TOOL@ --exename:$(basename "$0") "$@"
24+
$EXEC @MONOBINDIR@/mono $DEBUG $MONO_OPTIONS @DIR@/@TOOL@ --exename:$(basename "$0") "$@"

src/fsharp/policy.2.0.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.2.3.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.3.259.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.3.3.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.3.47.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.3.7.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

src/fsharp/policy.3.78.FSharp.Core/Makefile.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ include $(topdir)/src/fsharp/targets.make
1414
$(outdir)/$(NAME).dll: $(NAME).dll.config
1515
@mkdir -p $(@D)
1616
cp $(NAME).dll.config $(@D)
17-
al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
17+
$(monobindir)/al /link:$(NAME).dll.config /out:$@ /delaysign /keyfile:$(topdir)msfinal.pub
1818

1919
build:
2020
$(MAKE) $(outdir)/$(NAME).dll

0 commit comments

Comments
 (0)