Cannot build mod_cluster-1.2.0 against httpd-2.4.6
marcodanti Aug 6, 2013 11:52 AMHi everybody,
I just joined the community because of a build problem I am unable to solve. I haven't found any refernce to similar problems in the community forums, so I guess/hope it may just be some misunderstanding on my part.
I have successfully built httpd-2.4.6 from sources on my system (SLES 11-SP1 x86_64), using the following configuration:
./configure --prefix=/opt/apache-2.4.6 \
--with-mpm=worker \
--with-included-apr \
--enable-mpms-shared=all \
--enable-mods-shared=most \
--with-expat=builtin \
--enable-ssl \
--enable-proxy \
--disable-proxy-balancer \
--disable-slotmem-shm \
--disable-heartmonitor \
--disable-heartbeat \
--disable-lbmethod-heartbeat \
--disable-lbmethod-heartmonitor
Now I wanted to build mod_cluster-1.2.0.Final from sources as well.
The same operation worked perfectly well on a different machine where I have httpd-2.2.24 (where the .configure is just the same except the last 5 lines) and mod_cluster-1.2.0.Final.
The problem I run into when trying to build mod_cluster-1.2.0.Final against httpd-2.4.6 is the following:
> cd mod_cluster-1.2.0.Final-src-ssl/
> cd srclib/mod_cluster/native/mod_manager
> ./buildconf
> ./configure --with-apxs=/opt/apache-2.4.6/bin/apxs
checking for Apache httpd installation... APXS is /opt/apache-2.4.6/bin/apxs
apxs_support is true
configure: creating ./config.status
config.status: creating Makefile
> make
/opt/apache-2.4.6/build/libtool --silent --mode=compile gcc -std=gnu99 -g -O2 -pthread -DLINUX -D_REENTRANT -D_GNU_SOURCE -I/opt/apache-2.4.6/include -I. -I/home/marco/src/httpd-2.4.6/srclib/apr/include -I/home/marco/src/httpd-2.4.6/srclib/apr-util/include -I/home/marco/src/httpd-2.4.6/srclib/apr-util/xml/expat/lib -I/usr/local/include -I../include -prefer-pic -c mod_manager.c && touch mod_manager.slo
In file included from mod_manager.c:48:
../include/node.h:155: error: expected declaration specifiers or '...' before 'slotmem_storage_method'
../include/node.h:164: error: expected declaration specifiers or '...' before 'slotmem_storage_method'
In file included from mod_manager.c:49:
../include/host.h:116: error: expected declaration specifiers or '...' before 'slotmem_storage_method'
../include/host.h:125: error: expected declaration specifiers or '...' before 'slotmem_storage_method'
... more errors removed ...
make: *** [mod_manager.slo] Error 1
>
First problem i see: two sources define same preprocessor guard (this causes the error reported above)
> grep SLOTMEM_H ../include/*
../include/slotmem.h:#ifndef SLOTMEM_H
../include/slotmem.h:#define SLOTMEM_H
../include/slotmem.h:#endif /*SLOTMEM_H*/
> grep SLOTMEM_H /opt/apache-2.4.6/include/*
/opt/apache-2.4.6/include/ap_slotmem.h:#ifndef SLOTMEM_H
/opt/apache-2.4.6/include/ap_slotmem.h:#define SLOTMEM_H
Second problem: redefinition of symbols
/opt/apache-2.4.6/include/ap_slotmem.h defines
typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void *data, apr_pool_t *pool);
but in mod_cluster-1.2.0.Final-src-ssl/srclib/mod_cluster/native/include/slotmem.h the same symbol is redefined differently
typedef apr_status_t ap_slotmem_callback_fn_t(void* mem, void **data, int ident, apr_pool_t *pool);
and possibly other similar problems.
So this makes it impossible for me to build mod_cluster-1.2 against httpd-2.4. My understanding is that there are conflicts between mod_cluster and APR, but I am not sure how to go about it.
Has anyone been able to build mod_cluster-1.2.0 against httpd-2.4.6 ?
Thanks,
Marco