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