Index: Makefile.in ================================================================== --- Makefile.in +++ Makefile.in @@ -14,30 +14,37 @@ VPATH := @srcdir@ srcdir := @srcdir@ prefix := @prefix@ exec_prefix := @exec_prefix@ libdir := @libdir@ -PACKAGE_VERSION := @PACKAGE_VERSION@ -TCL_PACKAGE_PATH := @TCL_PACKAGE_PATH@ -PACKAGE_INSTALL_DIR := $(TCL_PACKAGE_PATH)/tcl-nano$(PACKAGE_VERSION) -INSTALL := @INSTALL@ -INSTALL_PROGRAM := @INSTALL_PROGRAM@ -INSTALL_DATA := @INSTALL_DATA@ +TCL_NANO_AMALGAMATION := @TCL_NANO_AMALGAMATION@ +PACKAGE_VERSION := @PACKAGE_VERSION@ +TCL_PACKAGE_PATH := @TCL_PACKAGE_PATH@ +PACKAGE_INSTALL_DIR := $(TCL_PACKAGE_PATH)/tcl-nano$(PACKAGE_VERSION) +INSTALL := @INSTALL@ +INSTALL_PROGRAM := @INSTALL_PROGRAM@ +INSTALL_DATA := @INSTALL_DATA@ export CC CFLAGS CPPFLAGS all: @EXTENSION_TARGET@ pkgIndex.tcl + +ifneq ($(TCL_NANO_AMALGAMATION),1) +TCL_NANO_OBJECTS = monocypher.o argon2.o aes.o randombytes.o nano.o +else +TCL_NANO_OBJECTS = nano-amalgamation.o +endif ifeq (@TCLEXT_BUILD@,shared) -@EXTENSION_TARGET@: monocypher.o argon2.o aes.o randombytes.o nano.o Makefile - $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(SHOBJLDFLAGS) -o @EXTENSION_TARGET@ nano.o randombytes.o monocypher.o argon2.o aes.o $(LIBS) +@EXTENSION_TARGET@: $(TCL_NANO_OBJECTS) Makefile + rm -f @EXTENSION_TARGET@ + $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) $(SHOBJLDFLAGS) -o @EXTENSION_TARGET@ $(TCL_NANO_OBJECTS) $(LIBS) -@WEAKENSYMS@ @EXTENSION_TARGET@ -@REMOVESYMS@ @EXTENSION_TARGET@ else -@EXTENSION_TARGET@: nano-amalgamation.o Makefile - -@WEAKENSYMS@ nano-amalgamation.o - -@REMOVESYMS@ nano-amalgamation.o - $(AR) rc @EXTENSION_TARGET@ nano-amalgamation.o +@EXTENSION_TARGET@: $(TCL_NANO_OBJECTS) Makefile + rm -f @EXTENSION_TARGET@ + $(AR) rc @EXTENSION_TARGET@ $(TCL_NANO_OBJECTS) -$(RANLIB) @EXTENSION_TARGET@ endif # The amalgamation is used when compiling statically so that the same ABI can be exposed # to upstream projects rather than requiring them to filter out our symbols @@ -45,10 +52,14 @@ rm -f nano-amalgamation.c cat @srcdir@/nano.c @srcdir@/randombytes.c $(monocypher_dir)monocypher.c $(argon2_dir)argon2.c $(aes_dir)aes.c > nano-amalgamation.c nano-amalgamation.o: nano-amalgamation.c $(monocypher_dir)monocypher.h $(argon2_dir)argon2.h $(aes_dir)aes.h @srcdir@/randombytes.h nano.tcl.h Makefile $(CC) $(CPPFLAGS) -DTCL_NANO_AMALGAMATION=1 $(CFLAGS) -o nano-amalgamation.o -c nano-amalgamation.c +ifneq (@TCLEXT_BUILD@,shared) + -@WEAKENSYMS@ nano-amalgamation.o + -@REMOVESYMS@ nano-amalgamation.o +endif nano.o: @srcdir@/nano.c $(monocypher_dir)monocypher.h $(argon2_dir)argon2.h $(aes_dir)aes.h @srcdir@/randombytes.h nano.tcl.h Makefile $(CC) $(CPPFLAGS) $(CFLAGS) -o nano.o -c @srcdir@/nano.c randombytes.o: @srcdir@/randombytes.c @srcdir@/randombytes.h Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -133,8 +133,32 @@ DC_SETUP_STABLE_API([${srcdir}/nano.vers], nano.syms) if test "$tcl_nano_debug" = 'true'; then WEAKENSYMS=':' REMOVESYMS=':' fi + +dnl Default to using the amalgamation for static, not using it for shared +if test "$TCLEXT_BUILD" != 'static'; then + tcl_nano_amalgamation='false' +else + tcl_nano_amalgamation='true' +fi + +AC_ARG_ENABLE([amalgamation], AS_HELP_STRING([--enable-amalgamation], [enable compiling the whole program as a single translation unit (default: disabled for shared, enabled for static)]), [ + if test "$enableval" = 'yes'; then + tcl_nano_amalgamation='true' + elif test "$enableval" = 'no'; then + tcl_nano_amalgamation='false' + else + AC_ERROR([Unknown value for --enable-amalgamation]) + fi +]) +if test "$tcl_nano_amalgamation" = 'true'; then + TCL_NANO_AMALGAMATION='1' +else + TCL_NANO_AMALGAMATION='0' +fi +AC_SUBST(TCL_NANO_AMALGAMATION) + dnl Produce output AC_OUTPUT(Makefile pkgIndex.tcl-${TCLEXT_BUILD} nano.syms)