aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2025-05-26 13:14:58 +0000
committerLaurent Bercot <ska@appnovation.com>2025-05-26 13:14:58 +0000
commit44c66eb2bab365b20327a5e71a858ff6602546c5 (patch)
tree8d5fef844a53891f31e8e779c3313b0782cf9e56
parent4baac19463dd2920b28c102c0690b7b87cb45006 (diff)
downloadutmps-44c66eb2bab365b20327a5e71a858ff6602546c5.tar.gz
Tentative dylib support
Signed-off-by: Laurent Bercot <ska@appnovation.com>
-rw-r--r--Makefile38
-rwxr-xr-xconfigure26
-rwxr-xr-xtools/configure.template15
3 files changed, 65 insertions, 14 deletions
diff --git a/Makefile b/Makefile
index 90098b5..222fd59 100644
--- a/Makefile
+++ b/Makefile
@@ -26,9 +26,9 @@ BIN_SYMLINKS :=
TEST_BINS :=
define library_definition
-LIB$(1) := lib$(2).$(if $(DO_ALLSTATIC),a,so).xyzzy
+LIB$(1) := lib$(2).$(if $(DO_ALLSTATIC),a,$(SHLIB_EXT)).xyzzy
ifdef DO_SHARED
-SHARED_LIBS += lib$(2).so.xyzzy
+SHARED_LIBS += lib$(2).$(SHLIB_EXT).xyzzy
endif
ifdef DO_STATIC
STATIC_LIBS += lib$(2).a.xyzzy
@@ -124,7 +124,7 @@ ifneq ($(strip $(ALL_BINS)$(SHARED_LIBS)),)
endif
install: install-dynlib install-libexec install-bin install-symlinks install-lib install-include install-pkgconfig
-install-dynlib: $(SHARED_LIBS:lib%.so.xyzzy=$(DESTDIR)$(dynlibdir)/lib%.so)
+install-dynlib: $(SHARED_LIBS:lib%.$(SHLIB_EXT).xyzzy=$(DESTDIR)$(dynlibdir)/lib%.$(SHLIB_EXT))
install-libexec: $(LIBEXEC_TARGETS:%=$(DESTDIR)$(libexecdir)/%)
install-bin: $(BIN_TARGETS:%=$(DESTDIR)$(bindir)/%)
install-symlinks: $(BIN_SYMLINKS:%=$(DESTDIR)$(bindir)/%)
@@ -156,10 +156,10 @@ $(DESTDIR)$(sproot)/library.so/lib%.so.$(version_M): $(DESTDIR)$(dynlibdir)/lib%
endif
-$(DESTDIR)$(dynlibdir)/lib%.so $(DESTDIR)$(dynlibdir)/lib%.so.$(version_M): lib%.so.xyzzy
- $(INSTALL) -D -m 755 $< $@.$(version) && \
- $(INSTALL) -l $(@F).$(version) $@.$(version_M) && \
- exec $(INSTALL) -l $(@F).$(version_M) $@
+$(DESTDIR)$(dynlibdir)/lib%.so $(DESTDIR)$(dynlibdir)/lib%.so.$(version_M) $(DESTDIR)$(dynlibdir)/lib%.so.$(version): lib%.so.xyzzy
+ $(INSTALL) -D -m 755 $< $(@D)/lib$(*F).so.$(version) && \
+ $(INSTALL) -l lib$(*F).so.$(version) $(@D)/lib$(*F).so.$(version_M) && \
+ exec $(INSTALL) -l lib$(*F).so.$(version_M) $(@D)/lib$(*F).so
$(DESTDIR)$(libdir)/lib%.a: lib%.a.xyzzy
exec $(INSTALL) -D -m 644 $< $@
@@ -192,3 +192,27 @@ lib%.so.xyzzy:
.PHONY: it all clean distclean tests check tgz strip install install-dynlib install-bin install-lib install-include install-pkgconfig
.DELETE_ON_ERROR:
+
+ifeq ($(SHLIB_EXT),dylib)
+
+version_X := $(shell exec expr 256 '*' $(version_l) + $(subst .,,$(suffix $(version_M))))
+version_XY := $(version_X)$(suffix $(version_m))
+version_XYZ := $(version_XY)$(suffix $(version))
+
+ifneq ($(exthome),)
+global-links: $(SHARED_LIBS:lib%.dylib.xyzzy=$(DESTDIR)$(sproot)/library.so/lib%.$(version_X).dylib)
+
+$(DESTDIR)$(sproot)/library.so/lib%.$(version_X).dylib: $(DESTDIR)$(sproot)/library.so/lib%.$(version_M).dylib
+ exec $(INSTALL) -l $(<F) $@
+endif
+
+$(DESTDIR)$(dynlibdir)/lib%.dylib $(DESTDIR)$(dynlibdir)/lib%.$(version_X).dylib $(DESTDIR)$(dynlibdir)/lib%.$(version_M).dylib $(DESTDIR)$(dynlibdir)/lib%.$(version).dylib: lib%.dylib.xyzzy
+ $(INSTALL) -D -m 755 $< $(@D)/lib$(*F).$(version).dylib && \
+ $(INSTALL) -l lib$(*F).$(version).dylib $(@D)/lib$(*F).$(version_M).dylib && \
+ $(INSTALL) -l lib$(*F).$(version_M).dylib $(@D)/lib$(*F).$(version_X).dylib && \
+ exec $(INSTALL) -l lib$(*F).$(version_X).dylib $(@D)/lib$(*F).dylib
+
+lib%.dylib.xyzzy: $(ALL_DOBJS)
+ exec $(CC) -o $@ $(CFLAGS_ALL) $(CFLAGS_SHARED) $(LDFLAGS_ALL) $(LDFLAGS_SHARED) -Wl,-dylib_install_name,$(dynlibdir)/lib$(*F).$(version_M).dylib -Wl,-dylib_compatibility_version,$(version_XY) -Wl,-dylib_current_version,$(version_XYZ) $^ $(SOCKET_LIB) $(SPAWN_LIB) $(SYSCLOCK_LIB) $(TAINNOW_LIB) $(TIMER_LIB) $(UTIL_LIB)
+endif
+
diff --git a/configure b/configure
index 1e6da7a..e19483d 100755
--- a/configure
+++ b/configure
@@ -49,7 +49,8 @@ Optional features:
--enable-slashpackage[=ROOT] assume /package installation at ROOT [disabled]
--enable-absolute-paths hardcode absolute BINDIR/foobar paths in binaries [disabled]
--enable-nsss use the nsss library for user information [disabled]
- --enable-libc-includes overwrite utmpx.h in includedir [disabled]
+ --enable-utmp also export utmp.h with Linux-specific declarations
+ --enable-libc-includes overwrite utmp[x].h in includedir [disabled]
--with-utmpd-socket=PATH assume the utmpd socket is at PATH [/run/utmps/.utmpd-socket]
--with-wtmpd-socket=PATH assume the wtmpd socket is at PATH [/run/utmps/.wtmpd-socket]
@@ -152,6 +153,7 @@ pkgconfdir='$prefix/lib/pkgconfig'
shebangdir='$bindir'
sysdeps='$prefix/lib/skalibs/sysdeps'
manualsysdeps=false
+shlibext=so
shared=false
static=true
allpic=true
@@ -173,6 +175,7 @@ vpaths=''
vpathd=''
build=
usensss=false
+doutmp=false
libcincludes=false
utmpdpath=/run/utmps/.utmpd-socket
wtmpdpath=/run/utmps/.wtmpd-socket
@@ -213,6 +216,8 @@ for arg ; do
--disable-slashpackage) sproot= ; slashpackage=false ;;
--enable-absolute-paths|--enable-absolute-paths=yes) abspath=true ;;
--disable-absolute-paths|--enable-absolute-paths=no) abspath=false ;;
+ --enable-utmp|--enable-utmp=yes) doutmp=true ;;
+ --disable-utmp|--enable-utmp=no) doutmp=false ;;
--enable-libc-includes|--enable-libc-includes=yes) libcincludes=true ;;
--disable-libc-includes|--enable-libc-includes=no) libcincludes=false ;;
--enable-nsss|--enable-nsss=yes) usensss=true ;;
@@ -386,11 +391,18 @@ if test ! -d $sysdeps || test ! -f $sysdeps/target ; then
echo "$0: error: $sysdeps is not a valid sysdeps directory"
exit 1
fi
-if [ "x$target" != "x$(cat $sysdeps/target)" ] ; then
+if test "$target" != "$(cat $sysdeps/target)" ; then
echo "$0: error: target $target does not match the contents of $sysdeps/target"
exit 1
fi
+echo "Shared libraries will be named ..."
+libc="${target##*-}"
+if test "${libc##darwin}" != "$libc" ; then
+ shlibext=dylib
+fi
+echo " ... *.$shlibext"
+
if $allpic ; then
tryflag CPPFLAGS_AUTO -fPIC
fi
@@ -480,16 +492,17 @@ LDFLAGS := ${LDFLAGS}${LDFLAGS_POST:+ }$LDFLAGS_POST
LDFLAGS_SHARED := $LDFLAGS_SHARED
LDFLAGS_NOSHARED :=$LDFLAGS_NOSHARED
CROSS_COMPILE := $cross
+SHLIB_EXT := ${shlibext}
vpath lib%.a$vpaths
-vpath lib%.so$vpathd
+vpath lib%.${shlibext}$vpathd
EOF
if $allstatic ; then
echo ".LIBPATTERNS := lib%.a"
echo "DO_ALLSTATIC := 1"
else
- echo ".LIBPATTERNS := lib%.so"
+ echo ".LIBPATTERNS := lib%.${shlibext}"
echo "DO_ALLSTATIC :="
fi
if $static ; then
@@ -524,6 +537,11 @@ else
echo "LIBNSSS :="
echo "MAYBEPTHREAD_LIB :="
fi
+if $doutmp ; then
+ echo "DO_UTMP := 1"
+else
+ echo "DO_UTMP :="
+fi
exec 1>&3 3>&-
echo " ... done."
diff --git a/tools/configure.template b/tools/configure.template
index c0e2945..20c8516 100755
--- a/tools/configure.template
+++ b/tools/configure.template
@@ -147,6 +147,7 @@ pkgconfdir='$prefix/lib/pkgconfig'
shebangdir='$bindir'
sysdeps='$prefix/lib/skalibs/sysdeps'
manualsysdeps=false
+shlibext=so
shared=false
static=true
allpic=true
@@ -373,11 +374,18 @@ if test ! -d $sysdeps || test ! -f $sysdeps/target ; then
echo "$0: error: $sysdeps is not a valid sysdeps directory"
exit 1
fi
-if [ "x$target" != "x$(cat $sysdeps/target)" ] ; then
+if test "$target" != "$(cat $sysdeps/target)" ; then
echo "$0: error: target $target does not match the contents of $sysdeps/target"
exit 1
fi
+echo "Shared libraries will be named ..."
+libc="${target##*-}"
+if test "${libc##darwin}" != "$libc" ; then
+ shlibext=dylib
+fi
+echo " ... *.$shlibext"
+
if $allpic ; then
tryflag CPPFLAGS_AUTO -fPIC
fi
@@ -467,16 +475,17 @@ LDFLAGS := ${LDFLAGS}${LDFLAGS_POST:+ }$LDFLAGS_POST
LDFLAGS_SHARED := $LDFLAGS_SHARED
LDFLAGS_NOSHARED :=$LDFLAGS_NOSHARED
CROSS_COMPILE := $cross
+SHLIB_EXT := ${shlibext}
vpath lib%.a$vpaths
-vpath lib%.so$vpathd
+vpath lib%.${shlibext}$vpathd
EOF
if $allstatic ; then
echo ".LIBPATTERNS := lib%.a"
echo "DO_ALLSTATIC := 1"
else
- echo ".LIBPATTERNS := lib%.so"
+ echo ".LIBPATTERNS := lib%.${shlibext}"
echo "DO_ALLSTATIC :="
fi
if $static ; then