aboutsummaryrefslogtreecommitdiffhomepage
path: root/configure.ac
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2024-11-05 01:29:53 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2024-11-05 12:32:04 +0300
commit9cce7d263ea3f2984a619cdfcb54d264c6a4c51d (patch)
tree363314a72aa4fc3fda435086c8deb522aef247ec /configure.ac
parent36c7526d60319289954bb0b49e9f4cb2c6dfe9da (diff)
downloadsciteco-9cce7d263ea3f2984a619cdfcb54d264c6a4c51d.tar.gz
fully support relocatable binaries, improving AppImages
* You can now specify `--with-scitecodatadir` as a relative path, that will be interpreted relative to the binary's location. * Win32 binaries already were relocatable, but this was a Windows-specific hack. Win32 binaries are now built with `--with-scitecodatadir=.` since everything is in a single directory. * Ubuntu packages are now also built `--with-scitecodatadir=../share/sciteco`. This is not crucial for ordinary installations, but is meant for AppImage creation. * Since AppImages are now built from relocatable packages, we no longer need the unionfs-workaround from pkg2appimage. This should fix the strange root contents when autocompleting in AppImage builds. * This might also fix the appimage.github.io CI issues. I assume that because I could reproduce the issue on FreeBSD's Linuxulator in dependence of pkg2appimage's "union"-setting. See https://github.com/AppImage/appimage.github.io/pull/3402 * Determining the binary location actually turned out be hard and very platform-dependant. There are now implementations for Windows (which could also read argv[0]), Linux and generic UNIX (which works on FreeBSD, but I am not sure about the others). I believe this could also be useful on Mac OS to create app bundles, but this needs to be tested - currently the Mac OS binaries are installed into fixed locations and don't use relocation.
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac17
1 files changed, 13 insertions, 4 deletions
diff --git a/configure.ac b/configure.ac
index 870b7b0..a82eb1d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -173,9 +173,12 @@ AC_CHECK_FUNCS([memset setlocale strchr strrchr fstat sscanf], , [
# glib defines G_OS_UNIX instead...
case $host in
*-*-linux* | *-*-*bsd* | *-*-darwin* | *-*-cygwin* | *-*-haiku*)
- AC_CHECK_FUNCS([realpath fchown dup dup2 getpid open read kill mmap], , [
+ AC_CHECK_FUNCS([realpath readlink fchown dup dup2 getpid open read kill mmap], , [
AC_MSG_ERROR([Missing libc function])
])
+ AC_SEARCH_LIBS(dladdr, [dl], , [
+ AC_MSG_ERROR([No library providing dladdr()!])
+ ])
;;
esac
@@ -183,10 +186,17 @@ esac
# Config options
#
+# NOTE: This can be relative to the binary location for relocateable builds.
AC_ARG_WITH(scitecodatadir,
AS_HELP_STRING([--with-scitecodatadir=PATH],
[Installation directory of data [default=DATADIR/sciteco]]),
- [scitecodatadir=$withval], [scitecodatadir=$datadir/$PACKAGE])
+ [scitecodatadir_rel=$withval], [scitecodatadir_rel=$datadir/$PACKAGE])
+AC_SUBST(scitecodatadir_rel)
+# The Automake installation directory needs to be absolute, though:
+case "$scitecodatadir_rel" in
+/*) scitecodatadir="$scitecodatadir_rel";;
+*) scitecodatadir="$bindir/$scitecodatadir_rel";;
+esac
AC_SUBST(scitecodatadir)
# SciTECO library macro directory
scitecolibdir=$scitecodatadir/lib
@@ -194,8 +204,7 @@ AC_SUBST(scitecolibdir)
# These paths can be changed at install-time and
# should not be written into config.h:
-AM_CPPFLAGS="$AM_CPPFLAGS -D'SCITECODATADIR=\"\$(scitecodatadir)\"' \
- -D'SCITECOLIBDIR=\"\$(scitecolibdir)\"'"
+AM_CPPFLAGS="$AM_CPPFLAGS -D'SCITECODATADIR=\"\$(scitecodatadir_rel)\"'"
# FIXME: It does not really make sense to have this configurable.
# It would make more sense to allow linking against an externally-provided