diff --git a/pkgs/development/libraries/http-parser/default.nix b/pkgs/development/libraries/http-parser/default.nix index 58da87d92edfa..8963e5c05592a 100644 --- a/pkgs/development/libraries/http-parser/default.nix +++ b/pkgs/development/libraries/http-parser/default.nix @@ -1,4 +1,7 @@ -{ lib, stdenv, fetchFromGitHub, fetchpatch }: +{ lib, stdenv, fetchFromGitHub, fetchpatch +, enableShared ? !stdenv.hostPlatform.isStatic +, enableStatic ? stdenv.hostPlatform.isStatic +}: stdenv.mkDerivation rec { pname = "http-parser"; @@ -14,6 +17,7 @@ stdenv.mkDerivation rec { env.NIX_CFLAGS_COMPILE = "-Wno-error"; patches = [ + ./enable-static-shared.patch ] ++ lib.optionals stdenv.isAarch32 [ # https://github.com/nodejs/http-parser/pull/510 (fetchpatch { @@ -25,16 +29,23 @@ stdenv.mkDerivation rec { makeFlags = [ "DESTDIR=" "PREFIX=$(out)" - "SOEXT=${lib.strings.removePrefix "." stdenv.hostPlatform.extensions.sharedLibrary}" "BINEXT=${stdenv.hostPlatform.extensions.executable}" "Platform=${lib.toLower stdenv.hostPlatform.uname.system}" - ] ++ lib.optionals stdenv.hostPlatform.isWindows [ + "AEXT=${lib.strings.removePrefix "." stdenv.hostPlatform.extensions.staticLibrary}" + "ENABLE_SHARED=${if enableShared then "1" else "0"}" + "ENABLE_STATIC=${if enableStatic then "1" else "0"}" + ] ++ lib.optionals enableShared [ + "SOEXT=${lib.strings.removePrefix "." stdenv.hostPlatform.extensions.sharedLibrary}" + ] ++ lib.optionals enableStatic [ + "AEXT=${lib.strings.removePrefix "." stdenv.hostPlatform.extensions.staticLibrary}" + ] ++ lib.optionals (enableShared && stdenv.hostPlatform.isWindows) [ "SONAME=$(SOLIBNAME).$(SOMAJOR).$(SOMINOR).$(SOEXT)" "LIBNAME=$(SOLIBNAME).$(SOMAJOR).$(SOMINOR).$(SOREV).$(SOEXT)" "LDFLAGS=-Wl,--out-implib=$(LIBNAME).a" ]; - buildFlags = [ "library" ]; + buildFlags = lib.optional enableShared "library" + ++ lib.optional enableStatic "package"; doCheck = true; checkTarget = "test"; diff --git a/pkgs/development/libraries/http-parser/enable-static-shared.patch b/pkgs/development/libraries/http-parser/enable-static-shared.patch new file mode 100644 index 0000000000000..42f11d4c817f4 --- /dev/null +++ b/pkgs/development/libraries/http-parser/enable-static-shared.patch @@ -0,0 +1,93 @@ +commit abcb3cca9452779e91380b7636f32745166af3de +Author: John Ericson +Date: Wed Nov 29 23:55:38 2023 -0500 + + Make build system: enable/disable shared/static support + + This allows building this package in static-lib-only distros. + +diff --git a/Makefile b/Makefile +index 5d21221..cbc7914 100644 +--- a/Makefile ++++ b/Makefile +@@ -18,6 +18,9 @@ + # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + # IN THE SOFTWARE. + ++ENABLE_SHARED ?= 1 ++ENABLE_STATIC ?= ++ + PLATFORM ?= $(shell sh -c 'uname -s | tr "[A-Z]" "[a-z]"') + HELPER ?= + BINEXT ?= +@@ -25,6 +28,8 @@ SOLIBNAME = libhttp_parser + SOMAJOR = 2 + SOMINOR = 9 + SOREV = 4 ++AEXT = a ++STATICLIBNAME = $(SOLIBNAME).$(AEXT) + ifeq (darwin,$(PLATFORM)) + SOEXT ?= dylib + SONAME ?= $(SOLIBNAME).$(SOMAJOR).$(SOMINOR).$(SOEXT) +@@ -109,11 +114,17 @@ test-valgrind: test_g + libhttp_parser.o: http_parser.c http_parser.h Makefile + $(CC) $(CPPFLAGS_FAST) $(CFLAGS_LIB) -c http_parser.c -o libhttp_parser.o + +-library: libhttp_parser.o +- $(CC) $(LDFLAGS_LIB) -o $(LIBNAME) $< ++.PHONY: library ++library: $(LIBNAME) ++ ++$(LIBNAME): libhttp_parser.o ++ $(CC) $(LDFLAGS_LIB) -o $@ $< + +-package: http_parser.o +- $(AR) rcs libhttp_parser.a http_parser.o ++.PHONY: package ++package: $(STATICLIBNAME) ++ ++$(STATICLIBNAME): http_parser.o ++ $(AR) rcs $@ $< + + url_parser: http_parser.o contrib/url_parser.c + $(CC) $(CPPFLAGS_FAST) $(CFLAGS_FAST) $^ -o $@ +@@ -130,12 +141,30 @@ parsertrace_g: http_parser_g.o contrib/parsertrace.c + tags: http_parser.c http_parser.h test.c + ctags $^ + +-install: library ++.PHONY: install-headers ++install-headers: + $(INSTALL) -D http_parser.h $(DESTDIR)$(INCLUDEDIR)/http_parser.h ++ ++.PHONY: install-library ++install-library: library + $(INSTALL) -D $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME) + ln -sf $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SONAME) + ln -sf $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(SOLIBNAME).$(SOEXT) + ++.PHONY: install-package ++install-package: package ++ $(INSTALL) -D $(STATICLIBNAME) $(DESTDIR)$(LIBDIR)/$(STATICLIBNAME) ++ ++.PHONY: install ++install: install-headers ++ifeq ($(ENABLE_SHARED),1) ++install: install-library ++endif ++ifeq ($(ENABLE_STATIC),1) ++install: install-package ++endif ++ ++.PHONY: install-strip + install-strip: library + $(INSTALL) -D http_parser.h $(DESTDIR)$(INCLUDEDIR)/http_parser.h + $(INSTALL) -D -s $(LIBNAME) $(DESTDIR)$(LIBDIR)/$(LIBNAME) +@@ -147,6 +176,7 @@ uninstall: + rm $(DESTDIR)$(LIBDIR)/$(SOLIBNAME).$(SOEXT) + rm $(DESTDIR)$(LIBDIR)/$(SONAME) + rm $(DESTDIR)$(LIBDIR)/$(LIBNAME) ++ rm $(DESTDIR)$(LIBDIR)/$(STATICLIBNAME) + + clean: + rm -f *.o *.a tags test test_fast test_g \