diff options
| -rw-r--r-- | Makefile | 30 | ||||
| -rwxr-xr-x | configure | 13 | ||||
| -rw-r--r-- | package/deps.mak | 1 | ||||
| -rw-r--r-- | src/include/skalibs/gol.h | 5 | ||||
| -rw-r--r-- | src/libstddjb/gol.c | 9 | ||||
| -rw-r--r-- | src/libstddjb/gol_argv.c | 11 | ||||
| -rw-r--r-- | src/libstddjb/gol_main.c | 13 |
7 files changed, 61 insertions, 21 deletions
@@ -54,7 +54,6 @@ ifdef DO_PKGCONFIG PC_TARGETS += libskarnet.pc endif - all: config.mak $(ALL_LIBS) $(ALL_INCLUDES) $(ALL_SYSDEPS) $(ALL_DATA) $(PC_TARGETS) clean: @@ -83,7 +82,7 @@ endif install: install-sysconf install-sysdeps install-dynlib install-lib install-include install-pkgconfig install-sysconf: $(ALL_DATA:src/etc/%=$(DESTDIR)$(sysconfdir)/%) install-sysdeps: $(ALL_SYSDEPS:$(sysdeps)/%=$(DESTDIR)$(sysdepdir)/%) -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-lib: $(STATIC_LIBS:lib%.a.xyzzy=$(DESTDIR)$(libdir)/lib%.a) install-include: $(ALL_INCLUDES:src/include/$(package)/%.h=$(DESTDIR)$(includedir)/$(package)/%.h) install-pkgconfig: $(PC_TARGETS:%=$(DESTDIR)$(pkgconfdir)/%) @@ -95,9 +94,9 @@ $(DESTDIR)$(exthome): $(DESTDIR)$(home) update: $(DESTDIR)$(exthome) -global-links: $(DESTDIR)$(exthome) $(SHARED_LIBS:lib%.so.xyzzy=$(DESTDIR)$(sproot)/library.so/lib%.so.$(version_M)) +global-links: $(DESTDIR)$(exthome) $(SHARED_LIBS:lib%.$(SHLIB_EXT).xyzzy=$(DESTDIR)$(sproot)/library.so/lib%.$(SHLIB_EXT).$(version_M)) -$(DESTDIR)$(sproot)/library.so/lib%.so.$(version_M): $(DESTDIR)$(dynlibdir)/lib%.so.$(version_M) +$(DESTDIR)$(sproot)/library.so/lib%.$(SHLIB_EXT).$(version_M): $(DESTDIR)$(dynlibdir)/lib%.$(SHLIB_EXT).$(version_M) exec $(INSTALL) -D -l ..$(subst $(sproot),,$(exthome))/library.so/$(<F) $@ .PHONY: update global-links @@ -110,7 +109,7 @@ $(DESTDIR)$(sysconfdir)/%: src/etc/% $(DESTDIR)$(sysdepdir)/%: $(sysdeps)/% exec $(INSTALL) -D -m 644 $< $@ -$(DESTDIR)$(dynlibdir)/lib%.so $(DESTDIR)$(dynlibdir)/lib%.so.$(version_M): lib%.so.xyzzy +$(DESTDIR)$(dynlibdir)/lib%.$(SHLIB_EXT) $(DESTDIR)$(dynlibdir)/lib%.$(SHLIB_EXT).$(version_M): lib%.$(SHLIB_EXT).xyzzy $(INSTALL) -D -m 755 $< $@.$(version) && \ $(INSTALL) -l $(@F).$(version) $@.$(version_M) && \ exec $(INSTALL) -l $(@F).$(version_M) $@ @@ -179,3 +178,24 @@ src/include/$(package)/ip46.h: src/include/$(package)/fmtscan.h src/include/$(pa fi ; \ exec cat src/headers/ip46-footer ; \ } > $@ + +ifeq ($(SHLIB_EXT),dylib) +# MacOS weirdness and 3-semver forcing + +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)) + +install-dynlib: $(SHARED_LIBS:lib%.dylib.xyzzy=$(DESTDIR)$(dynlibdir)/lib%.dylib.$(version_X)) +global-links: $(SHARED_LIBS:lib%.dylib.xyzzy=$(DESTDIR)$(sproot)/library.so/lib%.dylib.$(version_X)) + +$(DESTDIR)$(sproot)/library.so/lib%.dylib.$(version_X): $(DESTDIR)$(sproot)/library.so/lib%.dylib.$(version_M) + exec $(INSTALL) -D -l $(@F).$(version_M) $@ + +$(DESTDIR)$(dynlibdir)/lib%.dylib.$(version_X): $(DESTDIR)$(dynlibdir)/lib%.dylib.$(version_M) + exec $(INSTALL) -l $(@F).$(version_M) $@ + +libskarnet.dylib.xyzzy: $(ALL_DOBJS) + exec $(CC) -o $@ $(CFLAGS_ALL) $(CFLAGS_SHARED) $(LDFLAGS_ALL) $(LDFLAGS_SHARED) -Wl,-dylib_install_name,$(dynlibdir)/libskarnet.$(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 + @@ -399,6 +399,7 @@ sysconfdir='$prefix/etc' pkgconfdir='$prefix/lib/pkgconfig' sysdepdir='$prefix/lib/$package/sysdeps' sysdeplist= +shlibext=so shared=true static=true allpic=true @@ -604,6 +605,13 @@ if test -z "$target" ; then fi echo " ... $target" +echo "Shared libraries will be named ..." +libc="${target##*-}" +if test "${libc##darwin}" != "$libc" ; then + shlibext=dylib +fi +echo " ... *.$shlibext" + # Produce automatic compilation flags if $allpic ; then tryflag CPPFLAGS_AUTO -fPIC @@ -758,12 +766,13 @@ LDFLAGS := $LDFLAGS $LDFLAGS_POST LDFLAGS_NOSHARED := $LDFLAGS_NOSHARED LDFLAGS_SHARED := $LDFLAGS_SHARED CROSS_COMPILE := ${cross} +SHLIB_EXT := ${shlibext} EOF if test -n "$vpaths" ; then echo "vpath lib%a$vpaths" fi if test -n "$vpathd" ; then - echo "vpath lib%.so$vpathd" + echo "vpath lib%.${shlibext}$vpathd" fi if $static ; then @@ -772,7 +781,7 @@ else echo "STATIC_LIBS :=" fi if $shared ; then - echo "SHARED_LIBS := libskarnet.so.xyzzy" + echo "SHARED_LIBS := libskarnet.${shlibext}.xyzzy" else echo "SHARED_LIBS :=" fi diff --git a/package/deps.mak b/package/deps.mak index 041f3d7..7b7af35 100644 --- a/package/deps.mak +++ b/package/deps.mak @@ -369,6 +369,7 @@ src/libstddjb/getlnmax.o src/libstddjb/getlnmax.lo: src/libstddjb/getlnmax.c src src/libstddjb/getlnmaxsep.o src/libstddjb/getlnmaxsep.lo: src/libstddjb/getlnmaxsep.c src/include/skalibs/buffer.h src/include/skalibs/siovec.h src/include/skalibs/skamisc.h src/libstddjb/gol.o src/libstddjb/gol.lo: src/libstddjb/gol.c src/include/skalibs/gol.h src/libstddjb/gol_argv.o src/libstddjb/gol_argv.lo: src/libstddjb/gol_argv.c src/include/skalibs/gol.h src/include/skalibs/strerr.h +src/libstddjb/gol_main.o src/libstddjb/gol_main.lo: src/libstddjb/gol_main.c src/include/skalibs/gol.h src/include/skalibs/strerr.h src/libstddjb/hiercopy.o src/libstddjb/hiercopy.lo: src/libstddjb/hiercopy.c src/include/skalibs/djbunix.h src/include/skalibs/skamisc.h src/libstddjb/hiercopy_internal.o src/libstddjb/hiercopy_internal.lo: src/libstddjb/hiercopy_internal.c src/include/skalibs/direntry.h src/include/skalibs/djbunix.h src/include/skalibs/fcntl.h src/include/skalibs/stralloc.h src/libstddjb/hiercopy_loose.o src/libstddjb/hiercopy_loose.lo: src/libstddjb/hiercopy_loose.c src/include/skalibs/djbunix.h src/include/skalibs/skamisc.h diff --git a/src/include/skalibs/gol.h b/src/include/skalibs/gol.h index 746ed97..ab687b2 100644 --- a/src/include/skalibs/gol.h +++ b/src/include/skalibs/gol.h @@ -26,7 +26,8 @@ struct gol_arg_s uint8_t so : 7 ; } ; -extern int gol (char const *const *, unsigned int, gol_bool const *, unsigned int, gol_arg const *a, unsigned int, uint64_t *, char const **, int *) ; -extern unsigned int gol_argv (int, char const *const *, gol_bool const *, unsigned int, gol_arg const *a, unsigned int, uint64_t *, char const **) ; +extern int gol (char const *const *, gol_bool const *, unsigned int, gol_arg const *a, unsigned int, uint64_t *, char const **, int *) ; +extern unsigned int gol_argv (char const *const *, gol_bool const *, unsigned int, gol_arg const *a, unsigned int, uint64_t *, char const **) ; +extern unsigned int gol_main (int, char const *const *, gol_bool const *, unsigned int, gol_arg const *a, unsigned int, uint64_t *, char const **) ; #endif diff --git a/src/libstddjb/gol.c b/src/libstddjb/gol.c index c608ed4..990cd73 100644 --- a/src/libstddjb/gol.c +++ b/src/libstddjb/gol.c @@ -4,9 +4,10 @@ #include <skalibs/gol.h> -int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar, int *problem) +int gol (char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar, int *problem) { - for (unsigned int i = 0 ; i < argc ; i++) + unsigned int i = 0 ; + for (; argv[i] ; i++) { if (argv[i][0] != '-' || !argv[i][1]) return i ; if (argv[i][1] == '-') @@ -40,7 +41,7 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned if (j < an) { if (p[1]) ar[a[j].i] = p + 1 ; - else if (i+1 < argc && strcmp(argv[i+1], "--")) ar[a[j].i] = argv[++i] ; + else if (argv[i+1] && strcmp(argv[i+1], "--")) ar[a[j].i] = argv[++i] ; break ; } for (j = 0 ; j < bn ; j++) if (*p == b[j].so) break ; @@ -49,5 +50,5 @@ int gol (char const *const *argv, unsigned int argc, gol_bool const *b, unsigned } } } - return argc ; + return i ; } diff --git a/src/libstddjb/gol_argv.c b/src/libstddjb/gol_argv.c index 4b37811..21dc790 100644 --- a/src/libstddjb/gol_argv.c +++ b/src/libstddjb/gol_argv.c @@ -1,17 +1,12 @@ /* ISC license. */ -#include <string.h> - #include <skalibs/gol.h> #include <skalibs/strerr.h> -unsigned int gol_argv (int argc, char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) +unsigned int gol_argv (char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) { int problem = 0 ; - int r ; - if (!argc) strerr_diefu1x(100, "gol: invalid argv") ; - if (argc == 1) return 1 ; - r = gol(argv + 1, argc - 1, b, bn, a, an, br, ar, &problem) ; + int r = gol(argv, b, bn, a, an, br, ar, &problem) ; if (r < 0) { @@ -27,5 +22,5 @@ unsigned int gol_argv (int argc, char const *const *argv, gol_bool const *b, uns else strerr_dief3x(100, "unrecognized ", "option with argument: ", argv[-r]) ; } - else return r + 1 ; + else return r ; } diff --git a/src/libstddjb/gol_main.c b/src/libstddjb/gol_main.c new file mode 100644 index 0000000..1915fca --- /dev/null +++ b/src/libstddjb/gol_main.c @@ -0,0 +1,13 @@ +/* ISC license. */ + +#include <string.h> + +#include <skalibs/gol.h> +#include <skalibs/strerr.h> + +unsigned int gol_main (int argc, char const *const *argv, gol_bool const *b, unsigned int bn, gol_arg const *a, unsigned int an, uint64_t *br, char const **ar) +{ + if (argc < 1 || argv[argc]) strerr_diefu1x(100, "gol: invalid argc/argv") ; + if (argc == 1) return 1 ; + return 1 + gol_argv(argv + 1, b, bn, a, an, br, ar) ; +} |
