This is intended to be used for intra-module communication. Modules can specify service that are then implemented by other modules. This way we can use features from for example part in Core without relying on the Part module explicitly. Base does provide Service definition - which is basically an abstract class with pure virtual methods. This service then can be implemented in other modules and accessed in runtime via ServiceProvider class that stores all implementations. ServiceProvider does store multiple implementations so in theory it is possible to use it to provide granular implementations. For example, part can provide CenterOfMass service that provides center of mass for part features, mesh can implement another one for meshes and then we can iterate over all implementations and find one that can provide center of
409 lines
9.7 KiB
CMake
409 lines
9.7 KiB
CMake
if(WIN32)
|
|
add_definitions(-DFCBase)
|
|
add_definitions(-DPYCXX_DLL)
|
|
add_definitions(-DBOOST_DYN_LINK)
|
|
add_definitions(-DZIPIOS_UTF8)
|
|
endif(WIN32)
|
|
|
|
include_directories(
|
|
${CMAKE_BINARY_DIR}/src
|
|
${CMAKE_SOURCE_DIR}/src
|
|
${CMAKE_CURRENT_BINARY_DIR}
|
|
${CMAKE_CURRENT_SOURCE_DIR}
|
|
${Boost_INCLUDE_DIRS}
|
|
${PYTHON_INCLUDE_DIRS}
|
|
${XercesC_INCLUDE_DIRS}
|
|
${ZLIB_INCLUDE_DIR}
|
|
${PYCXX_INCLUDE_DIR}
|
|
)
|
|
|
|
if(MSVC)
|
|
set(FreeCADBase_LIBS
|
|
${Boost_LIBRARIES}
|
|
${XercesC_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
debug MSVCRTD.LIB
|
|
debug MSVCPRTD.LIB
|
|
optimized MSVCRT.LIB
|
|
optimized MSVCPRT.LIB
|
|
Rpcrt4.lib
|
|
version.lib
|
|
)
|
|
|
|
#Universal C runtime introduced in VS 2015 (cl version 19)
|
|
if (NOT (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "19"))
|
|
list(APPEND FreeCADBase_LIBS
|
|
debug vcruntimed.lib
|
|
debug ucrtd.lib
|
|
debug concrtd.lib
|
|
optimized vcruntime.lib
|
|
optimized ucrt.lib
|
|
optimized concrt.lib
|
|
)
|
|
endif()
|
|
elseif(MINGW)
|
|
set(FreeCADBase_LIBS
|
|
${XercesC_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
Rpcrt4.lib
|
|
)
|
|
else(MSVC)
|
|
set(FreeCADBase_LIBS
|
|
${XercesC_LIBRARIES}
|
|
${Boost_LIBRARIES}
|
|
${ZLIB_LIBRARIES}
|
|
)
|
|
endif(MSVC)
|
|
|
|
include_directories(
|
|
${QtCore_INCLUDE_DIRS}
|
|
)
|
|
list(APPEND FreeCADBase_LIBS ${QtCore_LIBRARIES})
|
|
|
|
list(APPEND FreeCADBase_LIBS fmt::fmt)
|
|
|
|
if (BUILD_DYNAMIC_LINK_PYTHON)
|
|
list(APPEND FreeCADBase_LIBS ${PYTHON_LIBRARIES})
|
|
endif (BUILD_DYNAMIC_LINK_PYTHON)
|
|
|
|
# needed for OpenSUSE
|
|
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
|
list(APPEND FreeCADBase_LIBS -lutil -ldl)
|
|
endif()
|
|
|
|
generate_from_xml(TypePy)
|
|
generate_from_xml(BaseClassPy)
|
|
generate_from_xml(BoundBoxPy)
|
|
generate_from_xml(CoordinateSystemPy)
|
|
generate_from_xml(PersistencePy)
|
|
generate_from_xml(VectorPy)
|
|
generate_from_xml(MatrixPy)
|
|
generate_from_xml(RotationPy)
|
|
generate_from_xml(PlacementPy)
|
|
generate_from_xml(AxisPy)
|
|
generate_from_xml(UnitPy)
|
|
generate_from_xml(QuantityPy)
|
|
generate_from_xml(PrecisionPy)
|
|
generate_from_any(Parameter.xsd Parameter.inl xmlSchemeString)
|
|
|
|
if(SWIG_FOUND)
|
|
# Create the file swigpyrun.hh and then compare with the file swigpyrun.h.
|
|
# If the files are different or if swigpyrun.h doesn't exist then copy swigpyrun.hh.
|
|
# This is to avoid to having to build the target each time cmake configure is executed.
|
|
execute_process(COMMAND ${SWIG_EXECUTABLE} -python -external-runtime ${CMAKE_CURRENT_BINARY_DIR}/swigpyrun.hh)
|
|
|
|
fc_copy_file_if_different(
|
|
"${CMAKE_CURRENT_BINARY_DIR}/swigpyrun.hh"
|
|
"${CMAKE_CURRENT_BINARY_DIR}/swigpyrun.h"
|
|
)
|
|
add_definitions(-DHAVE_SWIG=1)
|
|
endif(SWIG_FOUND)
|
|
|
|
if (EXISTS ${CMAKE_SOURCE_DIR}/src/zipios++ AND NOT FREECAD_USE_EXTERNAL_ZIPIOS)
|
|
SET(zipios_SRCS
|
|
../zipios++/backbuffer.h
|
|
../zipios++/collcoll.cpp
|
|
../zipios++/collcoll.h
|
|
../zipios++/deflateoutputstreambuf.cpp
|
|
../zipios++/deflateoutputstreambuf.h
|
|
../zipios++/fcoll.cpp
|
|
../zipios++/fcoll.h
|
|
../zipios++/fcollexceptions.cpp
|
|
../zipios++/fcollexceptions.h
|
|
../zipios++/fileentry.cpp
|
|
../zipios++/fileentry.h
|
|
../zipios++/filepath.cpp
|
|
../zipios++/filepath.h
|
|
../zipios++/filterinputstreambuf.cpp
|
|
../zipios++/filterinputstreambuf.h
|
|
../zipios++/filteroutputstreambuf.cpp
|
|
../zipios++/filteroutputstreambuf.h
|
|
../zipios++/gzipoutputstream.cpp
|
|
../zipios++/gzipoutputstream.h
|
|
../zipios++/gzipoutputstreambuf.cpp
|
|
../zipios++/gzipoutputstreambuf.h
|
|
../zipios++/inflateinputstreambuf.cpp
|
|
../zipios++/inflateinputstreambuf.h
|
|
../zipios++/meta-iostreams.h
|
|
../zipios++/outputstringstream.h
|
|
../zipios++/simplesmartptr.h
|
|
../zipios++/virtualseeker.h
|
|
../zipios++/zipfile.cpp
|
|
../zipios++/zipfile.h
|
|
../zipios++/ziphead.cpp
|
|
../zipios++/ziphead.h
|
|
../zipios++/zipheadio.cpp
|
|
../zipios++/zipheadio.h
|
|
../zipios++/zipinputstream.cpp
|
|
../zipios++/zipinputstream.h
|
|
../zipios++/zipinputstreambuf.cpp
|
|
../zipios++/zipinputstreambuf.h
|
|
../zipios++/zipios_common.h
|
|
../zipios++/zipios-config.h
|
|
../zipios++/zipios_defs.h
|
|
../zipios++/zipoutputstreambuf.cpp
|
|
../zipios++/zipoutputstreambuf.h
|
|
../zipios++/zipoutputstream.cpp
|
|
../zipios++/zipoutputstream.h
|
|
)
|
|
SOURCE_GROUP("zipios" FILES ${zipios_SRCS})
|
|
endif ()
|
|
|
|
SOURCE_GROUP("pycxx" FILES ${PYCXX_SOURCES})
|
|
|
|
# auto-generate resource file with all available translations
|
|
set (FreeCADBase_TR_QRC ${CMAKE_CURRENT_BINARY_DIR}/Resources/Base_translation.qrc)
|
|
qt_find_and_add_translation(QM_SRCS "Resources/translations/*_*.ts"
|
|
${CMAKE_CURRENT_BINARY_DIR}/Resources/translations)
|
|
qt_create_resource_file(${FreeCADBase_TR_QRC} ${QM_SRCS})
|
|
qt_add_resources(FreeCADBase_QRC_SRCS ${FreeCADBase_TR_QRC})
|
|
|
|
SET(FreeCADBase_XML_SRCS
|
|
AxisPy.xml
|
|
BaseClassPy.xml
|
|
BoundBoxPy.xml
|
|
CoordinateSystemPy.xml
|
|
MatrixPy.xml
|
|
PersistencePy.xml
|
|
PlacementPy.xml
|
|
RotationPy.xml
|
|
VectorPy.xml
|
|
QuantityPy.xml
|
|
TypePy.xml
|
|
UnitPy.xml
|
|
PrecisionPy.xml
|
|
)
|
|
SOURCE_GROUP("XML" FILES ${FreeCADBase_XML_SRCS})
|
|
|
|
SET(FreeCADBase_UNITAPI_SRCS
|
|
UnitsApi.cpp
|
|
UnitsApiPy.cpp
|
|
UnitsApi.h
|
|
UnitsSchema.h
|
|
UnitsSchema.cpp
|
|
UnitsSchemaInternal.h
|
|
UnitsSchemaInternal.cpp
|
|
UnitsSchemaMKS.h
|
|
UnitsSchemaMKS.cpp
|
|
UnitsSchemaImperial1.h
|
|
UnitsSchemaImperial1.cpp
|
|
UnitsSchemaCentimeters.h
|
|
UnitsSchemaCentimeters.cpp
|
|
UnitsSchemaMmMin.h
|
|
UnitsSchemaMmMin.cpp
|
|
UnitsSchemaFemMilliMeterNewton.h
|
|
UnitsSchemaFemMilliMeterNewton.cpp
|
|
UnitsSchemaMeterDecimal.h
|
|
UnitsSchemaMeterDecimal.cpp
|
|
Quantity.h
|
|
Quantity.cpp
|
|
QuantityPyImp.cpp
|
|
QuantityParser.l
|
|
QuantityParser.y
|
|
Unit.h
|
|
Unit.cpp
|
|
UnitPyImp.cpp
|
|
)
|
|
SOURCE_GROUP("Units" FILES ${FreeCADBase_UNITAPI_SRCS})
|
|
|
|
SET(SWIG_SRCS
|
|
swigpyrun.cpp
|
|
)
|
|
|
|
SET(FreeCADBase_CPP_SRCS
|
|
Axis.cpp
|
|
AxisPyImp.cpp
|
|
Base64.cpp
|
|
BaseClass.cpp
|
|
BaseClassPyImp.cpp
|
|
BindingManager.cpp
|
|
BoundBoxPyImp.cpp
|
|
Builder3D.cpp
|
|
Console.cpp
|
|
ConsoleObserver.cpp
|
|
CoordinateSystem.cpp
|
|
CoordinateSystemPyImp.cpp
|
|
Debugger.cpp
|
|
DualQuaternion.cpp
|
|
Exception.cpp
|
|
ExceptionFactory.cpp
|
|
Factory.cpp
|
|
FileInfo.cpp
|
|
FileTemplate.cpp
|
|
FutureWatcherProgress.cpp
|
|
GeometryPyCXX.cpp
|
|
Handle.cpp
|
|
InputSource.cpp
|
|
Interpreter.cpp
|
|
Matrix.cpp
|
|
MatrixPyImp.cpp
|
|
Observer.cpp
|
|
Parameter.xsd
|
|
Parameter.cpp
|
|
ParameterPy.cpp
|
|
Persistence.cpp
|
|
PersistencePyImp.cpp
|
|
Placement.cpp
|
|
PlacementPyImp.cpp
|
|
PrecisionPyImp.cpp
|
|
ProgressIndicatorPy.cpp
|
|
PyExport.cpp
|
|
PyObjectBase.cpp
|
|
PythonTypeExt.cpp
|
|
QtTools.cpp
|
|
Reader.cpp
|
|
Rotation.cpp
|
|
RotationPyImp.cpp
|
|
Sequencer.cpp
|
|
ServiceProvider.cpp
|
|
SmartPtrPy.cpp
|
|
Stream.cpp
|
|
Swap.cpp
|
|
${SWIG_SRCS}
|
|
Tools.cpp
|
|
Tools2D.cpp
|
|
Tools3D.cpp
|
|
Translate.cpp
|
|
Type.cpp
|
|
TypePyImp.cpp
|
|
Uuid.cpp
|
|
Vector3D.cpp
|
|
VectorPyImp.cpp
|
|
ViewProj.cpp
|
|
Writer.cpp
|
|
XMLTools.cpp
|
|
ZipHeader.cpp
|
|
)
|
|
|
|
SET(SWIG_HEADERS
|
|
swigpyrun.inl
|
|
)
|
|
|
|
SET(FreeCADBase_HPP_SRCS
|
|
Axis.h
|
|
Base64.h
|
|
Base64Filter.h
|
|
BaseClass.h
|
|
BindingManager.h
|
|
Bitmask.h
|
|
BoundBox.h
|
|
Builder3D.h
|
|
Console.h
|
|
ConsoleObserver.h
|
|
Converter.h
|
|
CoordinateSystem.h
|
|
Debugger.h
|
|
DualNumber.h
|
|
DualQuaternion.h
|
|
Exception.h
|
|
ExceptionFactory.h
|
|
Factory.h
|
|
FileInfo.h
|
|
FileTemplate.h
|
|
FutureWatcherProgress.h
|
|
GeometryPyCXX.h
|
|
Handle.h
|
|
InputSource.h
|
|
Interpreter.h
|
|
Matrix.h
|
|
Observer.h
|
|
Parameter.h
|
|
Persistence.h
|
|
Placement.h
|
|
Precision.h
|
|
ProgressIndicatorPy.h
|
|
PyExport.h
|
|
PyObjectBase.h
|
|
PyWrapParseTupleAndKeywords.h
|
|
PythonTypeExt.h
|
|
QtTools.h
|
|
Reader.h
|
|
Rotation.h
|
|
ServiceProvider.h
|
|
Sequencer.h
|
|
SmartPtrPy.h
|
|
Stream.h
|
|
Swap.h
|
|
${SWIG_HEADERS}
|
|
TimeInfo.h
|
|
Tools.h
|
|
Tools2D.h
|
|
Tools3D.h
|
|
Translate.h
|
|
Type.h
|
|
Uuid.h
|
|
Vector3D.h
|
|
ViewProj.h
|
|
Writer.h
|
|
XMLTools.h
|
|
ZipHeader.h
|
|
)
|
|
|
|
SET(FreeCADBase_SRCS
|
|
${PYCXX_SOURCES}
|
|
${FreeCADBase_QRC_SRCS}
|
|
${FreeCADBase_CPP_SRCS}
|
|
${FreeCADBase_HPP_SRCS}
|
|
${FreeCADBase_XML_SRCS}
|
|
${FreeCADBase_UNITAPI_SRCS}
|
|
PyTools.c
|
|
PyTools.h
|
|
PreCompiled.cpp
|
|
PreCompiled.h
|
|
)
|
|
|
|
IF (MSVC)
|
|
SET(FreeCADBase_SRCS
|
|
${FreeCADBase_SRCS}
|
|
StackWalker.cpp
|
|
StackWalker.h
|
|
)
|
|
ENDIF(MSVC)
|
|
|
|
# Use external zipios++ if specified.
|
|
if(FREECAD_USE_EXTERNAL_ZIPIOS)
|
|
find_library(ZIPIOS_LIBRARY zipios)
|
|
find_path(ZIPIOS_INCLUDES zipios++/zipios-config.h)
|
|
if(ZIPIOS_LIBRARY)
|
|
message(STATUS "Found zipios++: ${ZIPIOS}")
|
|
endif()
|
|
if(ZIPIOS_INCLUDES)
|
|
message(STATUS "Found zipios++ headers.")
|
|
endif()
|
|
if(ZIPIOS_LIBRARY AND ZIPIOS_INCLUDES)
|
|
list(APPEND FreeCADBase_LIBS ${ZIPIOS_LIBRARY})
|
|
include_directories(${ZIPIOS_INCLUDES})
|
|
else()
|
|
message(FATAL_ERROR "Using external zipios++ was specified but was not found.")
|
|
endif()
|
|
else(FREECAD_USE_EXTERNAL_ZIPIOS)
|
|
list(APPEND FreeCADBase_SRCS ${zipios_SRCS})
|
|
endif(FREECAD_USE_EXTERNAL_ZIPIOS)
|
|
|
|
|
|
if(FREECAD_USE_PCH)
|
|
add_definitions(-D_PreComp_)
|
|
ADD_MSVC_PRECOMPILED_HEADER(FreeCADBase PreCompiled.h PreCompiled.cpp FreeCADBase_CPP_SRCS)
|
|
endif(FREECAD_USE_PCH)
|
|
|
|
add_library(FreeCADBase SHARED ${FreeCADBase_SRCS})
|
|
|
|
target_link_libraries(FreeCADBase ${FreeCADBase_LIBS})
|
|
if (FREECAD_WARN_ERROR)
|
|
target_compile_warn_error(FreeCADBase)
|
|
endif()
|
|
|
|
SET_BIN_DIR(FreeCADBase FreeCADBase)
|
|
|
|
if(WIN32)
|
|
INSTALL(TARGETS FreeCADBase
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
)
|
|
else(WIN32)
|
|
INSTALL(TARGETS FreeCADBase
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
)
|
|
endif(WIN32)
|