Opened 12 years ago

Closed 12 years ago

#35162 closed defect (fixed)

petsc version 3.3 not compatible with slepc version 3.2

Reported by: Amy.Troschinetz@… Owned by: mamoll (Mark Moll)
Priority: Normal Milestone:
Component: ports Version: 2.1.1
Keywords: Cc:
Port: slepc, petsc

Description (last modified by ryandesign (Ryan Carsten Schmidt))

As of r94054 petsc has been upgraded to 3.3, however slepc 3.3 has not been released yet and the current version, 3.2, is not compatible with the new version of petsc. petsc is a dependency of slepc.

Confirmed by Satish Balay on the petsc-maint@… mailing list:

for petsc-3.3 - you need slepc-dev [as the corresponding slepc-3.3 is not yet released]

I'm not sure if you can tell macports to use slepc-dev instead of slepc-3.2 [which is compatible with petsc-3.2 - but not petsc-3.3]

The compile error, stemming from a file which includes <slepceps.h>:

In file included from /opt/local/lib/petsc/include/slepcsys.h:78,
                from /opt/local/lib/petsc/include/slepceps.h:26,
                from ...:
/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 ...:
/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 ...:
/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 ...:
/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 ...:
/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 ...:
/opt/local/lib/petsc/include/slepcip.h:149: error: 'PETSC_EXTERN_CXX_END' does not name a type

Machine: Darwin hostname 11.4.2 Darwin Kernel Version 11.4.2: Wed May 30 20:13:51 PDT 2012; root:xnu-1699.31.2~1/RELEASE_X86_64 x86_64

MPI implementation: openmpi 1.5.5, installed using MacPorts

Compiler: i686-apple-darwin11-g++-apple-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3) (MacPorts apple-gcc42 5666.3_7)

Change History (6)

comment:1 Changed 12 years ago by ryandesign (Ryan Carsten Schmidt)

Description: modified (diff)
Keywords: slepc petsc removed
Milestone: MacPorts Future
Owner: changed from macports-tickets@… to mmoll@…
Port: slepc petsc added

comment:2 Changed 12 years ago by mamoll (Mark Moll)

The latest release of slepc, 3.2-p5, seems to compile fine with petsc 3.3. I committed an update. Can you check if this works for you too?

comment:3 Changed 12 years ago by Amy.Troschinetz@…

After pulling the update I'm not getting the error anymore. Seems to compile fine now!

comment:4 Changed 12 years ago by mamoll (Mark Moll)

Resolution: fixed
Status: newclosed

comment:5 Changed 12 years ago by Amy.Troschinetz@…

Resolution: fixed
Status: closedreopened

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.

comment:6 Changed 12 years ago by mamoll (Mark Moll)

Resolution: fixed
Status: reopenedclosed

fixed in r96224 now that slepc 3.3 has been released.

Note: See TracTickets for help on using tickets.