[Fwd: mod_dtcl-0.12.0_1 failed on amd64 8-exp]

Mikhail T. mi+thun at aldan.algebra.com
Sun Jul 26 16:31:54 UTC 2009


Pav Lucistnik написав(ла):

    ...
    apache_cookie.So(.text+0x0): In function `ap_os_is_path_absolute':
    : multiple definition of `ap_os_is_path_absolute'
    tcl_commands.So(.text+0x0): first defined here
      


Apache attempts to make the function -- ap_os_is_path_absolute --
inlined, wherever possible. From ${LOCALBASE}/include/apache/os.h:

    #if !defined(INLINE) && defined(USE_GNU_INLINE)
    /* Compiler supports inline, so include the inlineable functions as
     * part of the header
     */
    #define INLINE extern ap_inline

    INLINE int ap_os_is_path_absolute(const char *file);

    #include "os-inline.c"

    #else

    /* Compiler does not support inline, so prototype the inlineable
    functions
     * as normal
     */
    extern int ap_os_is_path_absolute(const char *file);
    #endif

Apparently, something misfires on the 8.0 (amd64-only?) and the
os-inline.c is included, but the function remains non-inlined. As a
result, everybody, who includes the <apache/os.h> gets a full
(non-inlined) definition of the function. This is really up for Apache@
people to investigate/fix, I think...

Considering, that all of the possible C-compilers available on FreeBSD
support the "inline" keyword properly, the simplest solution, probably,
is to untangle the ifdef-mess and just always use "inline" --
unconditionally.

As an alternative, I can try to add a "-DINLINE=inline" to the CFLAGS in
the port, but it seems like a cludge -- currently the CFLAGS are derived
from the output of ``apxs -q CFLAGS CFLAGS_SHLIB'', which is how things
should be, shouldn't they?

Yours,

    -mi



More information about the freebsd-apache mailing list