diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2024-11-05 01:29:53 +0300 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2024-11-05 12:32:04 +0300 |
commit | 9cce7d263ea3f2984a619cdfcb54d264c6a4c51d (patch) | |
tree | 363314a72aa4fc3fda435086c8deb522aef247ec /configure.ac | |
parent | 36c7526d60319289954bb0b49e9f4cb2c6dfe9da (diff) | |
download | sciteco-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.ac | 17 |
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 |