From: Jakub Jirutka <jakub@jirutka.cz>
Date: Tue, 13 May 2025 23:45:11 +0200
Subject: Build shared libraries

libnjs doesn't guarantee ABI compatibility between versions, so we
have to use full version in SONAME (see https://github.com/nginx/njs/issues/691).

We currently cannot link njs executable against shared libnjs, because
it depends on some internal(?) symbols.

diff --git a/auto/make b/auto/make
index cc3b022b5b2..33ca12f6a24 100644
--- a/auto/make
+++ b/auto/make
@@ -119,6 +119,33 @@ $NJS_BUILD_DIR/libqjs.a:   \\
 
 	\$(NJS_STATIC_LINK) $NJS_BUILD_DIR/libqjs.a \\
 		\$(QJS_LIB_OBJS)
+
+
+NJS_SONAME = libnjs.so.\$(NJS_VER)
+QJS_SONAME = libqjs.so.\$(NJS_VER)
+
+libnjs.so: $NJS_BUILD_DIR/libnjs.so
+libqjs.so: $NJS_BUILD_DIR/libqjs.so
+
+$NJS_BUILD_DIR/libnjs.so: $NJS_BUILD_DIR/\$(NJS_SONAME)
+	ln -s \$(^F) \$@
+
+$NJS_BUILD_DIR/libqjs.so: $NJS_BUILD_DIR/\$(QJS_SONAME)
+	ln -s \$(^F) \$@
+
+$NJS_BUILD_DIR/\$(NJS_SONAME):   \\
+	$NJS_BUILD_DIR/njs_auto_config.h \\
+	\$(NJS_LIB_OBJS)
+
+	\$(CC) \$(LDFLAGS) -fPIC -shared -Wl,-soname,\$(NJS_SONAME) -o \$@ \\
+		\$(NJS_LIB_OBJS) $NJS_LIBS $NJS_LIB_AUX_LIBS
+
+$NJS_BUILD_DIR/\$(QJS_SONAME):   \\
+	$NJS_BUILD_DIR/njs_auto_config.h \\
+	\$(QJS_LIB_OBJS)
+
+	\$(CC) \$(LDFLAGS) -fPIC -shared -Wl,-soname,\$(QJS_SONAME) -o \$@ \\
+		\$(QJS_LIB_OBJS) $NJS_LIBS $NJS_LIB_AUX_LIBS
 END
 
 # object files.
