Skip to content

Commit

Permalink
Improve libgdiplus path handling
Browse files Browse the repository at this point in the history
Since libgdiplus is not installed together with Mono, it should not be
assumed to be in the same prefix.

The new policy for the --with-libgdiplus configure option is the
following:

 - --with-libgdiplus=/absolute/path/to/libgdiplus.{so,dylib}

   both during build/check and after installation Mono will try to use
   the specified libgdiplus library; the rationale is that when an
   absolute path is given, it can be assumed to be the full path to
   the library that is already installed (possibly in a non-default
   path).

 - default, --with-libgdiplus=no, --with-libgdiplus=installed

   both during build/check and after installation Mono will try to use
   a system-wide libgdiplus library, that is assumed to reside in the
   paths that are automatically searched by the dynamic linker; the
   library is supposed to be already installed in the default path and
   to be useable both during the build and afterwards.

 - --with-libgdiplus=sibling, --with-libgdiplus=yes

   during build/check Mono will try to use the libgdiplus library that
   is assumed to be in the sibling folder (../libgdiplus), but after
   the installation it will try to use a system-wide libgdiplus
   library, that should be in the paths that are automatically
   searched by the dynamic linker; the assumption is that the library
   is not yet installed, but it will go to the default prefix after
   installing it.

 - --with-libgdiplus=../some/relative/path/to/libgdiplus.{so,dylib,la}

   during build/check Mono will try to use the specified libgdiplus
   library, but after the installation it will try to use a
   system-wide libgdiplus library, that should be in the paths that
   are automatically searched by the dynamic linker; the assumption is
   that the library is not yet installed, but it will go to the
   default prefix after installing it.
  • Loading branch information
ranma42 committed Jul 1, 2014
1 parent 3408b8e commit 39108b0
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 17 deletions.
39 changes: 27 additions & 12 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -649,18 +649,6 @@ if test "x$USE_NLS" = "xyes"; then
fi
fi

AC_ARG_WITH([libgdiplus],
[ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
[], [with_libgdiplus=installed])

case $with_libgdiplus in
no|installed) libgdiplus_loc= ;;
yes|sibling) libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la ;;
/*) libgdiplus_loc=$with_libgdiplus ;;
*) libgdiplus_loc=`pwd`/$with_libgdiplus ;;
esac
AC_SUBST([libgdiplus_loc])

AC_PATH_PROG(PKG_CONFIG, pkg-config, no)

pkg_config_path=
Expand Down Expand Up @@ -3006,6 +2994,33 @@ esac

AC_SUBST(libsuffix)

AC_ARG_WITH([libgdiplus],
[ --with-libgdiplus=installed|sibling|<path> Override the libgdiplus used for System.Drawing tests (defaults to installed)],
[], [with_libgdiplus=installed])

# default install location
libgdiplus_install_loc=libgdiplus${libsuffix}
case $with_libgdiplus in
no|installed)
libgdiplus_loc=
;;

yes|sibling)
libgdiplus_loc=`cd ../libgdiplus && pwd`/src/libgdiplus.la
;;

/*) # absolute path, assume it is an install location
libgdiplus_loc=$with_libgdiplus
libgdiplus_install_loc=$with_libgdiplus
;;

*)
libgdiplus_loc=`pwd`/$with_libgdiplus
;;
esac
AC_SUBST([libgdiplus_loc])
AC_SUBST([libgdiplus_install_loc])

AC_ARG_ENABLE(icall-symbol-map,[ --enable-icall-symbol-map Generate tables which map icall functions to their C symbols], icall_symbol_map=$enableval, icall_symbol_map=no)
if test "x$icall_symbol_map" = "xyes"; then
AC_DEFINE(ENABLE_ICALL_SYMBOL_MAP, 1, [Icall symbol map enabled])
Expand Down
8 changes: 4 additions & 4 deletions data/config.in
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@
<dllentry dll="__Internal" name="MoveMemory" target="mono_win32_compat_MoveMemory"/>
<dllentry dll="__Internal" name="ZeroMemory" target="mono_win32_compat_ZeroMemory"/>
</dllmap>
<dllmap dll="gdiplus" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
<dllmap dll="gdiplus.dll" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
<dllmap dll="gdi32" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
<dllmap dll="gdi32.dll" target="@prefix@/lib/libgdiplus@libsuffix@" os="!windows"/>
<dllmap dll="gdiplus" target="@libgdiplus_install_loc@" os="!windows"/>
<dllmap dll="gdiplus.dll" target="@libgdiplus_install_loc@" os="!windows"/>
<dllmap dll="gdi32" target="@libgdiplus_install_loc@" os="!windows"/>
<dllmap dll="gdi32.dll" target="@libgdiplus_install_loc@" os="!windows"/>
</configuration>
2 changes: 1 addition & 1 deletion runtime/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ etc/mono/config: ../data/config Makefile $(symlinks)
d=`cd ../support && pwd`; \
sed 's,target="$(prefix)/lib/libMonoPosixHelper$(libsuffix)",target="'$$d'/libMonoPosixHelper.la",' ../data/config > $@t
if test -z "$(libgdiplus_loc)"; then :; else \
sed 's,target="[^"]*libgdiplus[^"]*",target="$(libgdiplus_loc)",' $@t > $@tt; \
sed 's,target="$(libgdiplus_install_loc)",target="$(libgdiplus_loc)",' $@t > $@tt; \
mv -f $@tt $@t; fi
mv -f $@t $@

Expand Down

0 comments on commit 39108b0

Please sign in to comment.