installed in, say, @file{$(bindir)}, you add:
@example
-foo_CPPFLAGS = -DINSTALLDIR=\"$(bindir)\"
+foo_CPPFLAGS = -DINSTALLDIR=$(bindir_c_make)
if RELOCATABLE_VIA_LD
foo_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(bindir)`
endif
@end example
+Similarly, if a program @command{foo} gets installed in @file{$(pkglibdir)},
+you add:
+
+@example
+foo_CPPFLAGS = -DINSTALLDIR=$(pkglibdir_c_make)
+if RELOCATABLE_VIA_LD
+foo_LDFLAGS = `$(RELOCATABLE_LDFLAGS) $(pkglibdir)`
+endif
+@end example
+
+The Makefile variables @code{bindir_c_make} or @code{pkglibdir_c_make}
+get defined by the Autoconf macros
+@code{gl_BUILD_TO_HOST_BINDIR} or @code{gl_BUILD_TO_HOST_PKGLIBDIR},
+respectively.
+These Autoconf macros are defined in the file @code{m4/build-to-host.m4}.
+You need to
+@itemize @bullet
+@item
+Import this file @code{m4/build-to-host.m4} into your package, for example
+by using of a command like @samp{gnulib-tool --copy m4/build-to-host.m4}.
+@item
+Invoke the corresponding macro(s) from your package's @file{configure.ac}.
+@end itemize
+
+@item
When building gnulib to use with a relocatable library, you need to
define the preprocessor symbol @code{IN_LIBRARY}.
You may also want to build with @code{ENABLE_COSTLY_RELOCATABLE}, in which case
AM_CPPFLAGS += -DIN_LIBRARY -DENABLE_COSTLY_RELOCATABLE
if SHLIBS_IN_BINDIR
-AM_CPPFLAGS += -DINSTALLDIR=\"$(bindir)\"
+AM_CPPFLAGS += -DINSTALLDIR=$(bindir_c_make)
else
-AM_CPPFLAGS += -DINSTALLDIR=\"$(libdir)\"
+AM_CPPFLAGS += -DINSTALLDIR=$(libdir_c_make)
endif
@end example
# build-to-host.m4
-# serial 3
+# serial 4
dnl Copyright (C) 2023-2024 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
*) gl_tr_cr='\r' ;;
esac
])
+
+
+dnl The following macros are convenience invocations of gl_BUILD_TO_HOST
+dnl for some of the variables that are defined by Autoconf.
+dnl To do so for _all_ the possible variables, use the module 'configmake'.
+
+dnl Defines bindir_c and bindir_c_make.
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_BINDIR],
+[
+ dnl Find the final value of bindir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_exec_prefix="${exec_prefix}"
+ gl_saved_bindir="${bindir}"
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval bindir="$bindir"
+ gl_BUILD_TO_HOST([bindir])
+ bindir="${gl_saved_bindir}"
+ exec_prefix="${gl_saved_exec_prefix}"
+ prefix="${gl_saved_prefix}"
+])
+
+dnl Defines libdir_c and libdir_c_make.
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LIBDIR],
+[
+ dnl Find the final value of libdir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_exec_prefix="${exec_prefix}"
+ gl_saved_libdir="${libdir}"
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval libdir="$libdir"
+ gl_BUILD_TO_HOST([libdir])
+ libdir="${gl_saved_libdir}"
+ exec_prefix="${gl_saved_exec_prefix}"
+ prefix="${gl_saved_prefix}"
+])
+
+dnl Defines libexecdir_c and libexecdir_c_make.
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LIBEXECDIR],
+[
+ dnl Find the final value of libexecdir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_exec_prefix="${exec_prefix}"
+ gl_saved_libexecdir="${libexecdir}"
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval libexecdir="$libexecdir"
+ gl_BUILD_TO_HOST([libexecdir])
+ libexecdir="${gl_saved_libexecdir}"
+ exec_prefix="${gl_saved_exec_prefix}"
+ prefix="${gl_saved_prefix}"
+])
+
+dnl Defines localedir_c and localedir_c_make.
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_LOCALEDIR],
+[
+ dnl Find the final value of localedir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_datarootdir="${datarootdir}"
+ gl_saved_localedir="${localedir}"
+ dnl Unfortunately, prefix gets only finally determined at the end of
+ dnl configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ eval datarootdir="$datarootdir"
+ eval localedir="$localedir"
+ gl_BUILD_TO_HOST([localedir])
+ localedir="${gl_saved_localedir}"
+ datarootdir="${gl_saved_datarootdir}"
+ prefix="${gl_saved_prefix}"
+])
+
+dnl Defines pkgdatadir_c and pkgdatadir_c_make,
+dnl where pkgdatadir = $(datadir)/$(PACKAGE)
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_PKGDATADIR],
+[
+ dnl Find the final value of pkgdatadir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_datarootdir="${datarootdir}"
+ gl_saved_datadir="${datadir}"
+ gl_saved_pkgdatadir="${pkgdatadir}"
+ dnl Unfortunately, prefix gets only finally determined at the end of
+ dnl configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ eval datarootdir="$datarootdir"
+ eval datadir="$datadir"
+ eval pkgdatadir="$pkgdatadir"
+ gl_BUILD_TO_HOST([pkgdatadir])
+ pkgdatadir="${gl_saved_pkgdatadir}"
+ datadir="${gl_saved_datadir}"
+ datarootdir="${gl_saved_datarootdir}"
+ prefix="${gl_saved_prefix}"
+])
+
+dnl Defines pkglibdir_c and pkglibdir_c_make,
+dnl where pkglibdir = $(libdir)/$(PACKAGE)
+AC_DEFUN_ONCE([gl_BUILD_TO_HOST_PKGLIBDIR],
+[
+ dnl Find the final value of pkglibdir.
+ gl_saved_prefix="${prefix}"
+ gl_saved_exec_prefix="${exec_prefix}"
+ gl_saved_libdir="${libdir}"
+ gl_saved_pkglibdir="${pkglibdir}"
+ dnl Unfortunately, prefix and exec_prefix get only finally determined
+ dnl at the end of configure.
+ if test "X$prefix" = "XNONE"; then
+ prefix="$ac_default_prefix"
+ fi
+ if test "X$exec_prefix" = "XNONE"; then
+ exec_prefix='${prefix}'
+ fi
+ eval exec_prefix="$exec_prefix"
+ eval libdir="$libdir"
+ eval pkglibdir="$pkglibdir"
+ gl_BUILD_TO_HOST([pkglibdir])
+ pkglibdir="${gl_saved_pkglibdir}"
+ libdir="${gl_saved_libdir}"
+ exec_prefix="${gl_saved_exec_prefix}"
+ prefix="${gl_saved_prefix}"
+])