Good question, i'm not certain they're on our forum. But..,we can talk to them on their gitlab https://gitlab.onelab.info/gmsh/gmsh/
edit: typo
Good question, i'm not certain they're on our forum. But..,we can talk to them on their gitlab https://gitlab.onelab.info/gmsh/gmsh/
It's defined in the recipe source section:
Code: Select all
set(OCC_LIBS_REQUIRED
# subset of DataExchange
TKSTEP TKSTEP209 TKSTEPAttr TKSTEPBase TKIGES TKXSBase
# ModelingAlgorithms
TKOffset TKFeat TKFillet TKBool TKMesh TKHLR TKBO TKPrim TKShHealing
TKTopAlgo TKGeomAlgo
# ModelingData
TKBRep TKGeomBase TKG3d TKG2d
# FoundationClasses
TKMath TKernel)
Code: Select all
-- OCC_LIBS:
${PREFIX}/Library/lib/TKSTEP.lib;
${PREFIX}/Library/lib/TKSTEP209.lib;
${PREFIX}/Library/lib/TKSTEPAttr.lib;
${PREFIX}/Library/lib/TKSTEPBase.lib;
${PREFIX}/Library/lib/TKIGES.lib;
${PREFIX}/Library/lib/TKXSBase.lib;
${PREFIX}/Library/lib/TKOffset.lib;
${PREFIX}/Library/lib/TKFeat.lib;
${PREFIX}/Library/lib/TKFillet.lib;
${PREFIX}/Library/lib/TKBool.lib;
${PREFIX}/Library/lib/TKMesh.lib;
${PREFIX}/Library/lib/TKHLR.lib;
${PREFIX}/Library/lib/TKBO.lib;
${PREFIX}/Library/lib/TKPrim.lib;
${PREFIX}/Library/lib/TKShHealing.lib;
${PREFIX}/Library/lib/TKTopAlgo.lib;
${PREFIX}/Library/lib/TKGeomAlgo.lib;
${PREFIX}/Library/lib/TKBRep.lib;
${PREFIX}/Library/lib/TKGeomBase.lib;
${PREFIX}/Library/lib/TKG3d.lib;
${PREFIX}/Library/lib/TKG2d.lib;
${PREFIX}/Library/lib/TKMath.lib;
${PREFIX}/Library/lib/TKernel.lib
Code: Select all
// If OCC_CONVERT_SIGNALS is not defined,
// provide empty inline implementation
#if ! defined(OCC_CONVERT_SIGNALS)
inline Standard_ErrorHandler::Callback::Callback ()
: myHandler(0), myPrev(0), myNext(0)
{
}
inline Standard_ErrorHandler::Callback::~Callback ()
{
(void)myHandler;
(void)myPrev;
}
inline void Standard_ErrorHandler::Callback::RegisterCallback ()
{
}
inline void Standard_ErrorHandler::Callback::UnregisterCallback ()
{
}
#endif
OCC_CONVERT_SIGNALS only has to be set if not using the MSVC compiler. When building OCCT with MSVC it shouldn't be used because it has the compiler option /EHa to enable Structured Exception Handling (SEH).//! Support of handling of C signals as C++-style exceptions, and implementation
//! of C++ exception handling on platforms that do not implement these natively.
//!
//! The implementation is based on C long jumps.
//!
//! If macro OCC_CONVERT_SIGNALS is defined, this enables macro OCC_CATCH_SIGNALS
//! that can be used in the code (often inside try {} blocks) to convert C-style
//! signals to standard C++ exceptions. This works only when OSD::SetSignal()
//! is called to set appropriate signal handler. In the case of signal (like
//! access violation, division by zero, etc.) it will jump to the nearest
//! OCC_CATCH_SIGNALS in the call stack, which will then throw a C++ exception.
//! This method is useful for Unix and Linux systems where C++ exceptions
//! cannot be thrown from C signal handler.
//!
//! On Windows with MSVC compiler, exceptions can be thrown directly from
//! signal handler, this OCC_CONVERT_SIGNALS is not needed. Note however that
//! this requires that compiler option /EHa is used.
I don't know. The content of the files Standard_ErrorHandler.hxx/Standard_ErrorHandler.cxx is almost identical for 7.4 and 7.5.- why occt7.4 works but 7.5 not?
Is this set somewhere in one of the CMake files of gmsh?- can we remove the OCC_CONVERT_SIGNALS definition, as it seems to make the builds succeed.
yes it is set only for windows. Patching this line makes the build succeed:
Code: Select all
if(WIN32)
list(APPEND EXTERNAL_LIBRARIES "winspool")
add_definitions(-DOCC_CONVERT_SIGNALS)
elseif(MSVC)
add_definitions(-DWNT)
endif()
Code: Select all
if(MSVC)
add_definitions(-DWNT)
elseif(WIN32)
list(APPEND EXTERNAL_LIBRARIES "winspool")
add_definitions(-DOCC_CONVERT_SIGNALS)
endif()