version 1.1, 2012/02/21 22:57:49
|
version 1.1.1.3, 2021/03/17 13:38:46
|
Line 1
|
Line 1
|
# relocatable.m4 serial 14 | # relocatable.m4 serial 23 |
dnl Copyright (C) 2003, 2005-2007, 2009 Free Software Foundation, Inc. | dnl Copyright (C) 2003, 2005-2007, 2009-2019 Free Software Foundation, Inc. |
dnl This file is free software; the Free Software Foundation |
dnl This file is free software; the Free Software Foundation |
dnl gives unlimited permission to copy and/or distribute it, |
dnl gives unlimited permission to copy and/or distribute it, |
dnl with or without modifications, as long as this notice is preserved. |
dnl with or without modifications, as long as this notice is preserved. |
Line 14 AC_DEFUN([gl_RELOCATABLE],
|
Line 14 AC_DEFUN([gl_RELOCATABLE],
|
[ |
[ |
AC_REQUIRE([gl_RELOCATABLE_BODY]) |
AC_REQUIRE([gl_RELOCATABLE_BODY]) |
gl_RELOCATABLE_LIBRARY |
gl_RELOCATABLE_LIBRARY |
if test $RELOCATABLE = yes; then |
|
AC_LIBOBJ([progreloc]) |
|
fi |
|
: ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'} |
: ${RELOCATABLE_CONFIG_H_DIR='$(top_builddir)'} |
RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base" |
RELOCATABLE_SRC_DIR="\$(top_srcdir)/$gl_source_base" |
RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base" |
RELOCATABLE_BUILD_DIR="\$(top_builddir)/$gl_source_base" |
Line 25 dnl The guts of gl_RELOCATABLE. Needs to be expanded o
|
Line 22 dnl The guts of gl_RELOCATABLE. Needs to be expanded o
|
AC_DEFUN([gl_RELOCATABLE_BODY], |
AC_DEFUN([gl_RELOCATABLE_BODY], |
[ |
[ |
AC_REQUIRE([AC_PROG_INSTALL]) |
AC_REQUIRE([AC_PROG_INSTALL]) |
|
|
dnl This AC_BEFORE invocation leads to unjustified autoconf warnings |
dnl This AC_BEFORE invocation leads to unjustified autoconf warnings |
dnl when gl_RELOCATABLE_BODY is invoked more than once. |
dnl when gl_RELOCATABLE_BODY is invoked more than once. |
|
dnl |
dnl We need this AC_BEFORE because AC_PROG_INSTALL is documented to |
dnl We need this AC_BEFORE because AC_PROG_INSTALL is documented to |
dnl overwrite earlier settings of INSTALL and INSTALL_PROGRAM (even |
dnl overwrite earlier settings of INSTALL and INSTALL_PROGRAM (even |
dnl though in autoconf-2.52..2.60 it doesn't do so), but we want this |
dnl though in autoconf-2.52..2.60 it doesn't do so), but we want this |
dnl macro's setting of INSTALL_PROGRAM to persist. |
dnl macro's setting of INSTALL_PROGRAM to persist. |
AC_BEFORE([AC_PROG_INSTALL],[gl_RELOCATABLE_BODY]) | dnl Arghh: AC_BEFORE does not work in this setting :-( |
| dnl AC_BEFORE([AC_PROG_INSTALL],[gl_RELOCATABLE_BODY]) |
| dnl |
| dnl LT_INIT sets LIBTOOL, but we want this macro's setting of LIBTOOL to |
| dnl persist. |
| dnl Arghh: AC_BEFORE does not work in this setting :-( |
| dnl AC_BEFORE([LT_INIT],[gl_RELOCATABLE_BODY]) |
| |
AC_REQUIRE([AC_LIB_LIBPATH]) |
AC_REQUIRE([AC_LIB_LIBPATH]) |
AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) |
AC_REQUIRE([gl_RELOCATABLE_LIBRARY_BODY]) |
|
AC_REQUIRE([AC_CANONICAL_HOST]) |
is_noop=no |
is_noop=no |
use_elf_origin_trick=no |
use_elf_origin_trick=no |
|
use_macos_tools=no |
|
use_wrapper=no |
if test $RELOCATABLE = yes; then |
if test $RELOCATABLE = yes; then |
# --enable-relocatable implies --disable-rpath |
# --enable-relocatable implies --disable-rpath |
enable_rpath=no |
enable_rpath=no |
Line 43 AC_DEFUN([gl_RELOCATABLE_BODY],
|
Line 52 AC_DEFUN([gl_RELOCATABLE_BODY],
|
AC_CHECK_FUNCS([_NSGetExecutablePath]) |
AC_CHECK_FUNCS([_NSGetExecutablePath]) |
case "$host_os" in |
case "$host_os" in |
mingw*) is_noop=yes ;; |
mingw*) is_noop=yes ;; |
linux*) use_elf_origin_trick=yes ;; | # For the platforms that support $ORIGIN, see |
| # <https://lekensteyn.nl/rpath.html>. |
| # glibc systems, Linux with musl libc: yes. Android: no. |
| linux*-android*) ;; |
| linux* | kfreebsd*) use_elf_origin_trick=yes ;; |
| # Hurd: <http://lists.gnu.org/archive/html/bug-hurd/2019-02/msg00049.html> |
| # only after the glibc commit from 2018-01-08 |
| # <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=311ba8dc4416467947eff2ab327854f124226309> |
| gnu*) |
| # Test for a glibc version >= 2.27. |
| AC_CHECK_FUNCS([copy_file_range]) |
| if test $ac_cv_func_copy_file_range = yes; then |
| use_elf_origin_trick=yes |
| fi |
| ;; |
| changequote(,)dnl |
| # FreeBSD >= 7.3, DragonFly >= 3.0: yes. |
| freebsd | freebsd[1-7] | freebsd[1-6].* | freebsd7.[0-2]) ;; |
| dragonfly | dragonfly[1-2] | dragonfly[1-2].*) ;; |
| freebsd* | dragonfly*) use_elf_origin_trick=yes ;; |
| # NetBSD >= 8.0: yes. |
| netbsd | netbsd[1-7] | netbsd[1-7].*) ;; |
| netbsdelf | netbsdelf[1-7] | netbsdelf[1-7].*) ;; |
| netbsd*) use_elf_origin_trick=yes ;; |
| # OpenBSD >= 5.4: yes. |
| openbsd | openbsd[1-5] | openbsd[1-4].* | openbsd5.[0-3]) ;; |
| openbsd*) use_elf_origin_trick=yes ;; |
| # Solaris >= 10: yes. |
| solaris | solaris2.[1-9] | solaris2.[1-9].*) ;; |
| solaris*) use_elf_origin_trick=yes ;; |
| # Haiku: yes. |
| haiku*) use_elf_origin_trick=yes ;; |
| # On Mac OS X 10.4 or newer, use Mac OS X tools. See |
| # <https://wincent.com/wiki/@executable_path,_@load_path_and_@rpath>. |
| darwin | darwin[1-7].*) ;; |
| darwin*) use_macos_tools=yes ;; |
| changequote([,])dnl |
esac |
esac |
if test $is_noop = yes; then |
if test $is_noop = yes; then |
RELOCATABLE_LDFLAGS=: |
RELOCATABLE_LDFLAGS=: |
AC_SUBST([RELOCATABLE_LDFLAGS]) |
AC_SUBST([RELOCATABLE_LDFLAGS]) |
else |
else |
if test $use_elf_origin_trick = yes; then | if test $use_elf_origin_trick = yes || test $use_macos_tools = yes; then |
dnl Use the dynamic linker's support for relocatable programs. |
dnl Use the dynamic linker's support for relocatable programs. |
case "$ac_aux_dir" in |
case "$ac_aux_dir" in |
/*) reloc_ldflags="$ac_aux_dir/reloc-ldflags" ;; |
/*) reloc_ldflags="$ac_aux_dir/reloc-ldflags" ;; |
Line 57 AC_DEFUN([gl_RELOCATABLE_BODY],
|
Line 102 AC_DEFUN([gl_RELOCATABLE_BODY],
|
esac |
esac |
RELOCATABLE_LDFLAGS="\"$reloc_ldflags\" \"\$(host)\" \"\$(RELOCATABLE_LIBRARY_PATH)\"" |
RELOCATABLE_LDFLAGS="\"$reloc_ldflags\" \"\$(host)\" \"\$(RELOCATABLE_LIBRARY_PATH)\"" |
AC_SUBST([RELOCATABLE_LDFLAGS]) |
AC_SUBST([RELOCATABLE_LDFLAGS]) |
|
if test $use_macos_tools = yes; then |
|
dnl Use a libtool wrapper that uses Mac OS X tools. |
|
case "$ac_aux_dir" in |
|
/*) LIBTOOL="${CONFIG_SHELL-$SHELL} $ac_aux_dir/libtool-reloc $LIBTOOL" ;; |
|
*) LIBTOOL="${CONFIG_SHELL-$SHELL} \$(top_builddir)/$ac_aux_dir/libtool-reloc $LIBTOOL" ;; |
|
esac |
|
fi |
else |
else |
|
use_wrapper=yes |
dnl Unfortunately we cannot define INSTALL_PROGRAM to a command |
dnl Unfortunately we cannot define INSTALL_PROGRAM to a command |
dnl consisting of more than one word - libtool doesn't support this. |
dnl consisting of more than one word - libtool doesn't support this. |
dnl So we abuse the INSTALL_PROGRAM_ENV hook, originally meant for the |
dnl So we abuse the INSTALL_PROGRAM_ENV hook, originally meant for the |
Line 72 AC_DEFUN([gl_RELOCATABLE_BODY],
|
Line 125 AC_DEFUN([gl_RELOCATABLE_BODY],
|
fi |
fi |
fi |
fi |
AM_CONDITIONAL([RELOCATABLE_VIA_LD], |
AM_CONDITIONAL([RELOCATABLE_VIA_LD], |
[test $is_noop = yes || test $use_elf_origin_trick = yes]) | [test $is_noop = yes || test $use_elf_origin_trick = yes || test $use_macos_tools = yes]) |
| AM_CONDITIONAL([RELOCATABLE_VIA_WRAPPER], [test $use_wrapper = yes]) |
|
|
dnl RELOCATABLE_LIBRARY_PATH can be set in configure.ac. Default is empty. |
dnl RELOCATABLE_LIBRARY_PATH can be set in configure.ac. Default is empty. |
AC_SUBST([RELOCATABLE_LIBRARY_PATH]) |
AC_SUBST([RELOCATABLE_LIBRARY_PATH]) |
|
|
AC_SUBST([RELOCATABLE_CONFIG_H_DIR]) |
AC_SUBST([RELOCATABLE_CONFIG_H_DIR]) |
AC_SUBST([RELOCATABLE_SRC_DIR]) |
AC_SUBST([RELOCATABLE_SRC_DIR]) |
AC_SUBST([RELOCATABLE_BUILD_DIR]) |
AC_SUBST([RELOCATABLE_BUILD_DIR]) |
|
|
|
dnl Ensure RELOCATABLE_STRIP is defined in Makefiles (at least those |
|
dnl generated by automake), with value ':'. |
|
RELOCATABLE_STRIP=':' |
|
AC_SUBST([RELOCATABLE_STRIP]) |
]) |
]) |
|
|
dnl Determine the platform dependent parameters needed to use relocatability: |
dnl Determine the platform dependent parameters needed to use relocatability: |