Hi,
To see where we are on C++ GNULIB_NAMESPACE support, I ran
$ ./gnulib-tool --create-testdir --with-c++-tests --with-tests
--dir=/tmp/testdir
(takes one hour, be patient) and built it on a glibc system with
$ ./configure CPPFLAGS="-DGNULIB_NAMESPACE=gggg -Wall" CC=g++
$ make -k
Here are the findings:
* GNULIB_STRICT_CHECKING and GNULIB_NAMESPACE don't work together
(errors for many functions). So, I removed the -DGNULIB_STRICT_CHECKING=1
flag for this test.
A possible fix would be to add a configure option --disable-strict-checking
in the configure scripts of the testdirs.
* memrchr
./string.h:542:1: error: new declaration 'void* memrchr(const void*, int,
size_t)'
/usr/include/string.h:117:28: error: ambiguates old declaration 'const void*
memrchr(const void*, int, size_t)'
* savewd.h
- use of INITIAL_STATE, ERROR_STATE, etc. without savewd:: qualifier
(savewd.h:81, savewd.h:126).
A possible fix would be to move the 'enum' definition out of 'struct savewd';
this would be a no-op for C but not for C++.
* Many errors due to the fact that the .c files are meant to be compiled by a
C compiler, not a C++ compiler, such that
- 1065x "initializer-string for array of chars is too long"
- 217x "invalid conversion from 'void*' to" some other pointer type
- 59x "invalid conversion from 'const void*' to" some other pointer type
- 53x other "invalid conversion from ... to ..."
- 16x "declaration of ... has a different exception specifier"
(due to 'throw ()')
- use of identifier 'class' (dfa.c)
- use of identifier 'new' (hash.c, glob.c)
- use of gnulib functions without GNULIB_NAMESPACE:: qualifier (signbit,
isfinite, globfree)
- "new declaration ..." "ambiguates old declaration ..." (strcasestr,
strerror_r, strstr)
All these errors are in the category "Not a bug", IMO, because gdb and other
packages can arrange to build the imported gnulib-lib/ directory using a
C compiler rather than a C++ compiler.
Bruno