Description

Compiling nghttp2 is failing for me in Alpine 3.21, which uses gcc 14 (14.2.0). It looks like the issue is that the header file nghttp2.h need to be explicitly included in the nghttp2_mod.c files. This is the error when running make inside of src/modules/nghttp2 (after compiling kamailio as normal):

/home/builder/kamailio_src/src/modules/nghttp2 # make
make: --libs: No such file or directory
make: --libs: No such file or directory
make: --libs: No such file or directory
make: --libs: No such file or directory
CC (gcc) [M nghttp2.so]         nghttp2_mod.o
nghttp2_mod.c: In function 'ksr_nghttp2_send_reply':
nghttp2_mod.c:317:22: error: implicit declaration of function 'nghttp2_submit_response'; did you mean 'nghttp2_submit_response2'? [-Wimplicit-function-declaration]
  317 |                 rv = nghttp2_submit_response(_ksr_nghttp2_ctx.session,
      |                      ^~~~~~~~~~~~~~~~~~~~~~~
      |                      nghttp2_submit_response2
make: *** [../../Makefile.rules:100: nghttp2_mod.o] Error 1

Troubleshooting

Compilation works on Debian 12, so checked difference in make and gcc versions. Note that the make: --libs: No such file or directory appear to be from a different issue with make 4.4 not recursively expanding variables. From gcc's documentation it looks like implicit function declarations are no longer possible

https://gcc.gnu.org/gcc-14/porting_to.html

Reproduction

Compile Kamailio 6.0.0 (with default config), then compile the nghttp2 module

Possible Solutions

Explicitly import nghttp2.h in nghttp2_mod.c and nghttp2_server.c. This is outside of my normal wheelhouse, but I was able to do this and successfully compile the module:

Diff for nghttp2_mod.c:
@@ -25,6 +25,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <arpa/inet.h>
+#include <nghttp2/nghttp2.h>

 #include "../../core/sr_module.h"
 #include "../../core/dprint.h"
Diff for nghttp2_server.c:
@@ -23,6 +23,7 @@
  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */

+#include <nghttp2/nghttp2.h>
 #include "nghttp2_server.h"

 #define OUTPUT_WOULDBLOCK_THRESHOLD (1 << 16)

Additional Information

Kamailio 6.0.0 with gcc 14.2.0

/home/builder/kamailio_src/src/modules/nghttp2 # lsb_release -a
No LSB modules are available.
Distributor ID: Alpine
Description:    Alpine Linux v3.21
Release:        3.21.2
Codename:       n/a

/home/builder/kamailio_src/src/modules/nghttp2 # uname -a
Linux 89562285153f 5.15.167.4-microsoft-standard-WSL2 #1 SMP Tue Nov 5 00:21:55 UTC 2024 x86_64 Linux


Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.Message ID: <kamailio/kamailio/issues/4135@github.com>