Files
create/src/App/CMakeLists.txt
sliptonic 79640fd18a Merge pull request #23885 from chennes/pythonInterfaceToApplicationDirectories
App: Add Python interface to ApplicationDirectories
2025-09-17 18:11:41 -05:00

385 lines
9.0 KiB
CMake

add_library(FreeCADApp SHARED)
if(WIN32)
add_definitions(-DFCApp)
add_definitions(-DBOOST_DYN_LINK)
endif(WIN32)
if(BUILD_TRACY_FRAME_PROFILER)
add_definitions(-DBUILD_TRACY_FRAME_PROFILER)
endif()
if(FREECAD_RELEASE_SEH)
add_definitions(-DHAVE_SEH)
endif(FREECAD_RELEASE_SEH)
# This causes some problems with the resource files to be found, especially with the StartPage
IF(RESOURCEDIR)
add_definitions(-DRESOURCEDIR="${RESOURCEDIR}")
ENDIF(RESOURCEDIR)
IF(LIBRARYDIR)
add_definitions(-DLIBRARYDIR="${LIBRARYDIR}")
ENDIF(LIBRARYDIR)
IF(DOCDIR)
add_definitions(-DDOCDIR="${DOCDIR}")
ENDIF(DOCDIR)
# -----------------------------------------------------------------------------
#write relevant cmake variables to a file for later access with python. Exported are all variables
#starting with BUILD. As the variable only exists if the user set it to ON a dict is useless, we
#use a python list for export.
set(_vars "const char CMakeVariables[] =\"cmake = [")
set(_delim "")
get_cmake_property(_variableNames VARIABLES)
foreach (_variableName ${_variableNames})
if (${_variableName})
STRING(REGEX MATCH "^[_]?[^_]*" _prefix "${_variableName}_")
if(${_prefix} STREQUAL "BUILD")
STRING(REPLACE "\\" "\\\\" _name ${_variableName})
set(_vars "${_vars}${_delim}\\n\"\n\"\\\"${_name}\\\"")
set(_delim ",")
endif()
endif ()
endforeach()
set(_vars "${_vars}]\\n\" \n;")
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeScript.hh "${_vars}" )
fc_copy_file_if_different(
"${CMAKE_CURRENT_BINARY_DIR}/CMakeScript.hh"
"${CMAKE_CURRENT_BINARY_DIR}/CMakeScript.h"
)
# -----------------------------------------------------------------------------
target_include_directories(
FreeCADApp
PRIVATE
${CMAKE_BINARY_DIR}
${CMAKE_BINARY_DIR}/src
${CMAKE_SOURCE_DIR}/src
${CMAKE_CURRENT_BINARY_DIR}
)
target_include_directories(
FreeCADApp
SYSTEM
PUBLIC
${QtCore_INCLUDE_DIRS}
${QtXml_INCLUDE_DIRS}
)
set(FreeCADApp_LIBS
FreeCADBase
${Boost_LIBRARIES}
fmt::fmt
)
if(BUILD_TRACY_FRAME_PROFILER)
list(APPEND FreeCADApp_LIBS TracyClient)
endif()
list(APPEND FreeCADApp_LIBS
${QtCore_LIBRARIES}
${QtXml_LIBRARIES}
)
generate_from_py(ApplicationDirectories)
generate_from_py(Document)
generate_from_py(DocumentObject)
generate_from_py(Extension)
generate_from_py(ExtensionContainer)
generate_from_py(DocumentObjectExtension)
generate_from_py(GroupExtension)
generate_from_py(LinkBaseExtension)
generate_from_py(DocumentObjectGroup)
generate_from_py(GeoFeature)
generate_from_py(GeoFeatureGroupExtension)
generate_from_py(SuppressibleExtension)
generate_from_py(Metadata)
generate_from_py(OriginGroupExtension)
generate_from_py(Part)
generate_from_py(StringHasher)
generate_from_py(StringID)
generate_from_py(ComplexGeoData)
generate_from_py(PropertyContainer)
generate_from_py(Material)
generate_from_py(MeasureManager)
generate_embed_from_py(FreeCADInit InitScript.h)
generate_embed_from_py(FreeCADTest TestScript.h)
SET(FreeCADApp_Pyi_SRCS
ApplicationDirectories.pyi
Extension.pyi
ExtensionContainer.pyi
DocumentObjectExtension.pyi
GroupExtension.pyi
LinkBaseExtension.pyi
Metadata.pyi
DocumentObjectGroup.pyi
DocumentObject.pyi
GeoFeature.pyi
GeoFeatureGroupExtension.pyi
OriginGroupExtension.pyi
SuppressibleExtension.pyi
Part.pyi
Document.pyi
PropertyContainer.pyi
ComplexGeoData.pyi
Material.pyi
MeasureManager.pyi
StringHasher.pyi
StringID.pyi
)
SOURCE_GROUP("Pyi" FILES ${FreeCADApp_Pyi_SRCS})
# The document stuff
SET(Document_CPP_SRCS
Annotation.cpp
BackupPolicy.cpp
Document.cpp
DocumentObject.cpp
Extension.cpp
ExtensionPyImp.cpp
DocumentObjectExtension.cpp
DocumentObjectExtensionPyImp.cpp
ExtensionContainer.cpp
ExtensionContainerPyImp.cpp
Graphviz.cpp
GroupExtension.cpp
GroupExtensionPyImp.cpp
DocumentObjectFileIncluded.cpp
DocumentObjectGroup.cpp
DocumentObjectGroupPyImp.cpp
GeoFeaturePyImp.cpp
DocumentObjectPyImp.cpp
DocumentObserver.cpp
DocumentObserverPython.cpp
DocumentPyImp.cpp
Expression.cpp
ExpressionTokenizer.cpp
FeaturePython.cpp
FeatureTest.cpp
GeoFeature.cpp
GeoFeatureGroupExtensionPyImp.cpp
GeoFeatureGroupExtension.cpp
ImagePlane.cpp
OriginGroupExtensionPyImp.cpp
OriginGroupExtension.cpp
SuppressibleExtensionPyImp.cpp
SuppressibleExtension.cpp
PartPyImp.cpp
Part.cpp
Origin.cpp
Path.cpp
InventorObject.cpp
Placement.cpp
ProjectFile.cpp
Datums.cpp
Range.cpp
Transactions.cpp
TransactionalObject.cpp
VRMLObject.cpp
MaterialObject.cpp
MergeDocuments.cpp
TextDocument.cpp
Link.cpp
LinkBaseExtensionPyImp.cpp
VarSet.cpp
License.h
)
SET(Document_HPP_SRCS
Annotation.h
BackupPolicy.h
Document.h
DocumentObject.h
Extension.h
ExtensionContainer.h
GroupExtension.h
DocumentObjectExtension.h
DocumentObjectFileIncluded.h
DocumentObjectGroup.h
DocumentObserver.h
DocumentObserverPython.h
Expression.h
ExpressionParser.h
ExpressionTokenizer.h
ExpressionVisitors.h
FeatureCustom.h
FeaturePython.h
FeaturePythonPyImp.h
FeaturePythonPyImp.inl
FeatureTest.h
GeoFeature.h
GeoFeatureGroupExtension.h
ImagePlane.h
OriginGroupExtension.h
SuppressibleExtension.h
Part.h
Origin.h
Path.h
InventorObject.h
Placement.h
ProjectFile.h
Datums.h
Range.h
Transactions.h
TransactionalObject.h
VRMLObject.h
MaterialObject.h
MergeDocuments.h
TextDocument.h
VarSet.h
Link.h
)
SET(Document_SRCS
${Document_CPP_SRCS}
${Document_HPP_SRCS}
)
SOURCE_GROUP("Document" FILES ${Document_SRCS})
# The property stuff
SET(Properties_CPP_SRCS
DynamicProperty.cpp
ObjectIdentifier.cpp
Property.cpp
PropertyContainer.cpp
PropertyContainerPyImp.cpp
PropertyFile.cpp
PropertyGeo.cpp
PropertyLinks.cpp
PropertyPythonObject.cpp
PropertyStandard.cpp
PropertyUnits.cpp
PropertyExpressionEngine.cpp
)
SET(Properties_HPP_SRCS
DynamicProperty.h
ObjectIdentifier.h
Property.h
PropertyContainer.h
PropertyFile.h
PropertyGeo.h
PropertyLinks.h
PropertyPythonObject.h
PropertyStandard.h
PropertyUnits.h
PropertyExpressionEngine.h
PropertyOverrides.h
)
SET(Properties_SRCS
${Properties_CPP_SRCS}
${Properties_HPP_SRCS}
)
SOURCE_GROUP("Properties" FILES ${Properties_SRCS})
SET(FreeCADApp_CPP_SRCS
${Document_CPP_SRCS}
${Properties_CPP_SRCS}
Application.cpp
ApplicationDirectories.cpp
ApplicationDirectoriesPyImp.cpp
ApplicationPy.cpp
AutoTransaction.cpp
Branding.cpp
CleanupProcess.cpp
ColorModel.cpp
ComplexGeoData.cpp
ComplexGeoDataPyImp.cpp
ElementMap.cpp
Enumeration.cpp
IndexedName.cpp
MappedElement.cpp
MappedName.cpp
Material.cpp
MaterialPyImp.cpp
MeasureManager.cpp
MeasureManagerPyImp.cpp
Metadata.cpp
MetadataPyImp.cpp
ElementNamingUtils.cpp
SafeMode.cpp
Services.cpp
StringHasher.cpp
StringHasherPyImp.cpp
StringIDPyImp.cpp
)
SET(FreeCADApp_HPP_SRCS
${Document_HPP_SRCS}
${Properties_HPP_SRCS}
Application.h
ApplicationDirectories.h
AutoTransaction.h
Branding.h
CleanupProcess.h
ColorModel.h
ComplexGeoData.h
ElementMap.h
Enumeration.h
IndexedName.h
MappedName.h
MappedElement.h
Material.h
MeasureManager.h
Metadata.h
ElementNamingUtils.h
Services.h
StringHasher.h
)
# auto-generate resource file with all available translations
set (FreeCADApp_TR_QRC ${CMAKE_CURRENT_BINARY_DIR}/Resources/App_translation.qrc)
qt_find_and_add_translation(QM_SRCS "Resources/translations/*_*.ts"
${CMAKE_CURRENT_BINARY_DIR}/Resources/translations)
qt_create_resource_file(${FreeCADApp_TR_QRC} ${QM_SRCS})
qt_add_resources(FreeCADApp_QRC_SRCS ${FreeCADApp_TR_QRC})
SET(FreeCADApp_SRCS
${FreeCADApp_QRC_SRCS}
${FreeCADApp_CPP_SRCS}
${FreeCADApp_HPP_SRCS}
${FreeCADApp_Pyi_SRCS}
FreeCADInit.py
FreeCADTest.py
PreCompiled.h
)
if(FREECAD_USE_PCH)
target_precompile_headers(FreeCADApp PRIVATE
$<$<COMPILE_LANGUAGE:CXX>:"${CMAKE_CURRENT_LIST_DIR}/PreCompiled.h">
)
endif(FREECAD_USE_PCH)
target_sources(FreeCADApp PRIVATE ${FreeCADApp_SRCS})
target_link_libraries(FreeCADApp ${FreeCADApp_LIBS})
if (MSVC)
target_compile_definitions(FreeCADApp PRIVATE WIN32_LEAN_AND_MEAN)
target_compile_options(FreeCADApp PRIVATE /wd4251 /wd4273 /wd4275)
endif()
if (FREECAD_WARN_ERROR)
target_compile_warn_error(FreeCADApp)
endif()
add_dependencies(FreeCADApp fc_version)
SET_BIN_DIR(FreeCADApp FreeCADApp)
if(WIN32)
INSTALL(TARGETS FreeCADApp
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
else(WIN32)
INSTALL(TARGETS FreeCADApp
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
)
endif(WIN32)