I think you missed my point. The source code uses _Complex but the configure test uses complex (nothing to do with complex.h). Shouldn’t the configure test use _Complex?
http://ftp.mcs.anl.gov/pub/petsc/nightlylogs/archive/2013/11/17/build_master_arch-linux-c89_thrash.log CC arch-linux-c89/obj/src/sys/objects/pinit.o In file included from /sandbox/petsc/petsc.clone-2/include/petscsys.h:326:0, from /sandbox/petsc/petsc.clone-2/include/petsc-private/petscimpl.h:8, from src/sys/objects/pinit.c:6: /sandbox/petsc/petsc.clone-2/include/petscmath.h:119:16: warning: ISO C90 does not support complex types [-Wpedantic] typedef double _Complex PetscComplex; but ================================================================================ TEST checkC99Complex from config.types(/sandbox/petsc/petsc.clone-2/config/BuildSystem/config/types.py:106) TESTING: checkC99Complex from config.types(/sandbox/petsc/petsc.clone-2/config/BuildSystem/config/types.py:106) Check for complex numbers in in C99 std Executing: mpicc -c -o /tmp/petsc-j_TCTN/config.types/conftest.o -I/tmp/petsc-j_TCTN/config.libraries -I/tmp/petsc-j_TCTN/config.setCompilers -I/tmp/petsc-j_TCTN/config.compilers -I/tmp/petsc-j_TCTN/config.headers -I/tmp/petsc-j_TCTN/PETSc.utilities.cacheDetails -I/tmp/petsc-j_TCTN/config.functions -I/tmp/petsc-j_TCTN/config.types -std=c89 -pedantic -Wno-long-long -fPIC -g3 -fno-inline -O0 /tmp/petsc-j_TCTN/config.types/conftest.c Successful compile: Source: #include "confdefs.h" #include "conffix.h" #include <complex.h> int main() { double complex x; x = I; ; return 0; } Pushing language C Popping language C Executing: mpicc -o /tmp/petsc-j_TCTN/config.types/conftest -std=c89 -pedantic -Wno-long-long -fPIC -g3 -fno-inline -O0 /tmp/petsc-j_TCTN/config.types/conftest.o -Wl,-rpath,/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib/gcc/x86_64-unknown-linux-gnu/4.8.0 -L/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib/gcc/x86_64-unknown-linux-gnu/4.8.0 -Wl,-rpath,/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib/gcc -L/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib/gcc -Wl,-rpath,/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib64 -L/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib64 -Wl,-rpath,/lib/x86_64-linux-gnu -L/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu -Wl,-rpath,/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib -L/nfs/software/linux-ubuntu_precise_amd64/apps/packages/gcc-4.8.0/lib -ldl -lmpich -lopa -lmpl -lrt -lcr -lpthread -lgcc_s -ldl Defined "HAVE_C99_COMPLEX" to “1" On Nov 18, 2013, at 1:33 AM, Jed Brown <[email protected]> wrote: > Barry Smith <[email protected]> writes: > >> configure looks for complex but source code uses _Complex. > > include/petscmath.h:/* Use C99 _Complex for the type. Do not include > complex.h by default to define "complex" because of symbol conflicts in > Hypre. */ > include/petscmath.h-/* Compilation units that can safely use complex should > define PETSC_DESIRE_COMPLEX before including any headers */ > >> Come guys this is just absurd. How can we make sure our configure >> tests actually have something to do with the real usage? > > Do you have a case where this does not work? "_Complex" is the C99 > keyword, where as complex.h is the C99 complex header, which defines > "complex" and related stuff. complex.h conflicts with Hypre so we can't > include it by default, thus the comment in the source. > >> >> TEST checkC99Complex from >> config.types(/sandbox/petsc/petsc.clone-2/config/BuildSystem/config/types.py:106) >> TESTING: checkC99Complex from >> config.types(/sandbox/petsc/petsc.clone-2/config/BuildSystem/config/types.py:106) >> Check for complex numbers in in C99 std >> Executing: mpicc -c -o /tmp/petsc-t5CRsd/config.types/conftest.o >> -I/tmp/petsc-t5CRsd/config.libraries -I/tmp/petsc-t5CRsd/config.compilers >> -I/tmp/petsc-t5CRsd/config.setCompilers -I/tmp/petsc-t5CRsd/config.headers >> -I/tmp/petsc-t5CRsd/PETSc.utilities.cacheDetails >> -I/tmp/petsc-t5CRsd/config.functions -I/tmp/petsc-t5CRsd/config.types >> -std=c89 -pedantic -Wno-long-long -fPIC -g3 -O0 >> /tmp/petsc-t5CRsd/config.types/conftest.c >> Successful compile: >> Source: >> #include "confdefs.h" >> #include "conffix.h" >> #include <complex.h> >> >> int main() { >> double complex x; >> x = I; >> ; >> return 0; >> } >> >> #elif defined(PETSC_USE_REAL_DOUBLE) >> typedef double _Complex PetscComplex;
