#35162: petsc version 3.3 not compatible with slepc version 3.2 -------------------------------------------+-------------------------------- Reporter: Amy.Troschinetz@… | Owner: mmoll@… Type: defect | Status: reopened Priority: Normal | Milestone: Component: ports | Version: 2.1.1 Resolution: | Keywords: Port: slepc, petsc | -------------------------------------------+-------------------------------- Changes (by Amy.Troschinetz@…): * status: closed => reopened * resolution: fixed => Comment: Sorry, I was mistaken. I'm still getting errors. Here is a minimal test example: test.cpp: {{{ #include <slepceps.h> int main() { } }}} Error log, using clang++: {{{ $ /usr/bin/clang++ -D__LITTLE_ENDIAN__ -DMACOSX -DPOSIX -I/opt/local/lib/petsc/include -I/opt/local/include/openmpi -I/opt/local/include test.cpp In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:26: In file included from /opt/local/lib/petsc/include/slepcsys.h:78: /opt/local/lib/petsc/include/slepcvec.h:29:1: error: unknown type name 'PETSC_EXTERN_CXX_BEGIN' PETSC_EXTERN_CXX_BEGIN ^ /opt/local/lib/petsc/include/slepcvec.h:33:1: error: expected unqualified- id extern PetscErrorCode VecRegister_Comp(const char[]); ^ /opt/local/lib/petsc/include/slepcvec.h:52:1: error: unknown type name 'PETSC_EXTERN_CXX_END' PETSC_EXTERN_CXX_END ^ In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:26: In file included from /opt/local/lib/petsc/include/slepcsys.h:82: /opt/local/lib/petsc/include/private/slepcimpl.h:28:1: error: expected unqualified-id struct _n_SlepcConvMonitor { ^ In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:26: /opt/local/lib/petsc/include/slepcsys.h:98:1: error: unknown type name 'PETSC_EXTERN_CXX_BEGIN' PETSC_EXTERN_CXX_BEGIN ^ /opt/local/lib/petsc/include/slepcsys.h:102:1: error: expected unqualified-id extern PetscErrorCode SlepcInitialize(int*,char***,const char[],const char[]); ^ /opt/local/lib/petsc/include/slepcsys.h:165:1: error: unknown type name 'PETSC_EXTERN_CXX_END' PETSC_EXTERN_CXX_END ^ In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:27: In file included from /opt/local/lib/petsc/include/slepcst.h:26: In file included from /opt/local/lib/petsc/include/petscksp.h:6: In file included from /opt/local/lib/petsc/include/petscpc.h:6: /opt/local/lib/petsc/include/petscdm.h:8:1: error: expected unqualified-id PETSC_EXTERN PetscErrorCode DMInitializePackage(const char[]); ^ /opt/local/lib/petsc/include/petscsys.h:66:22: note: expanded from macro 'PETSC_EXTERN' #define PETSC_EXTERN extern "C" PETSC_VISIBILITY_PUBLIC ^ In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:27: /opt/local/lib/petsc/include/slepcst.h:27:1: error: unknown type name 'PETSC_EXTERN_CXX_BEGIN' PETSC_EXTERN_CXX_BEGIN ^ /opt/local/lib/petsc/include/slepcst.h:29:1: error: expected unqualified- id extern PetscErrorCode STInitializePackage(const char[]); ^ /opt/local/lib/petsc/include/slepcst.h:175:1: error: unknown type name 'PETSC_EXTERN_CXX_END' PETSC_EXTERN_CXX_END ^ In file included from test.cpp:1: In file included from /opt/local/lib/petsc/include/slepceps.h:28: /opt/local/lib/petsc/include/slepcip.h:25:23: error: expected ';' after top level declarator PETSC_EXTERN_CXX_BEGIN ^ ; /opt/local/lib/petsc/include/slepcip.h:149:1: error: unknown type name 'PETSC_EXTERN_CXX_END' PETSC_EXTERN_CXX_END ^ In file included from test.cpp:1: /opt/local/lib/petsc/include/slepceps.h:29:23: error: expected ';' after top level declarator PETSC_EXTERN_CXX_BEGIN ^ ; /opt/local/lib/petsc/include/slepceps.h:408:1: error: unknown type name 'PETSC_EXTERN_CXX_END' PETSC_EXTERN_CXX_END ^ test.cpp:2:1: error: expected unqualified-id int main() { } ^ 16 errors generated. }}} I'm using clang++ here because it seems to generate better error messages, however just for sake of completeness here's what g++ generates: {{{ $ /usr/bin/g++ -D__LITTLE_ENDIAN__ -DMACOSX -DPOSIX -I/opt/local/lib/petsc/include -I/opt/local/include/openmpi -I/opt/local/include test.cpp In file included from /opt/local/lib/petsc/include/slepcsys.h:78, from /opt/local/lib/petsc/include/slepceps.h:26, from test.cpp:1: /opt/local/lib/petsc/include/slepcvec.h:33: error: expected constructor, destructor, or type conversion before ‘extern’ In file included from /opt/local/lib/petsc/include/slepcsys.h:82, from /opt/local/lib/petsc/include/slepceps.h:26, from test.cpp:1: /opt/local/lib/petsc/include/private/slepcimpl.h:28: error: expected constructor, destructor, or type conversion before ‘struct’ In file included from /opt/local/lib/petsc/include/slepceps.h:26, from test.cpp:1: /opt/local/lib/petsc/include/slepcsys.h:102: error: expected constructor, destructor, or type conversion before ‘extern’ In file included from /opt/local/lib/petsc/include/petscpc.h:6, from /opt/local/lib/petsc/include/petscksp.h:6, from /opt/local/lib/petsc/include/slepcst.h:26, from /opt/local/lib/petsc/include/slepceps.h:27, from test.cpp:1: /opt/local/lib/petsc/include/petscdm.h:8: error: expected constructor, destructor, or type conversion before ‘extern’ In file included from /opt/local/lib/petsc/include/slepceps.h:27, from test.cpp:1: /opt/local/lib/petsc/include/slepcst.h:29: error: expected constructor, destructor, or type conversion before ‘extern’ /opt/local/lib/petsc/include/slepcst.h:175: error: ‘PETSC_EXTERN_CXX_END’ does not name a type In file included from /opt/local/lib/petsc/include/slepceps.h:28, from test.cpp:1: /opt/local/lib/petsc/include/slepcip.h:149: error: ‘PETSC_EXTERN_CXX_END’ does not name a type test.cpp:2: error: expected constructor, destructor, or type conversion before ‘int’ }}} The problem seems to stem from the fact that PETSC_EXTERN_CXX_END is not defined. In version 3.3 of PETSc: {{{ $ cd /opt/local/lib/petsc/include $ grep -HIin "define PETSC_EXTERN_CXX_BEGIN" * # no results }}} I have a backup on Time Machine of PETSc version 3.2: {{{ $ cd /path/to/time/machine/backups/opt/local/lib/petsc/include $ grep -HIin "define PETSC_EXTERN_CXX_BEGIN" * petscsys.h:45:#define PETSC_EXTERN_CXX_BEGIN extern "C" { petscsys.h:48:#define PETSC_EXTERN_CXX_BEGIN }}} Note that I am perfectly able to install slepc 3.2-p5 and PETSc 3.3 side by side using MacPorts... they're just not compatible with each other so when you start trying to use them things break down. -- Ticket URL: <https://trac.macports.org/ticket/35162#comment:5> MacPorts <http://www.macports.org/> Ports system for Mac OS