cmake: add option to disable linking of python extension modules to python-libraries

This commit is contained in:
lo
2019-05-23 12:42:15 +02:00
committed by wmayer
parent c7cf339ac6
commit 1922c84ca0
5 changed files with 48 additions and 14 deletions

View File

@@ -106,11 +106,17 @@ if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})
# get linker errors as soon as possible and not at runtime e.g. for modules
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error")
elseif(UNIX)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
endif()
if(BUILD_DYNAMIC_LINK_PYTHON)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error")
elseif(UNIX)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
endif()
else(BUILD_DYNAMIC_LINK_PYTHON)
if(CMAKE_COMPILER_IS_CLANGXX)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,dynamic_lookup")
endif()
endif(BUILD_DYNAMIC_LINK_PYTHON)
endif(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX)
if(CMAKE_COMPILER_IS_CLANGXX)
@@ -209,6 +215,7 @@ OPTION(FREECAD_USE_EXTERNAL_KDL "Use system installed orocos-kdl instead of the
OPTION(FREECAD_USE_FREETYPE "Builds the features using FreeType libs" ON)
OPTION(FREECAD_BUILD_DEBIAN "Prepare for a build of a Debian package" OFF)
OPTION(BUILD_WITH_CONDA "Set ON if you build freecad with conda" OFF)
OPTION(BUILD_DYNAMIC_LINK_PYTHON "If OFF extension-modules do not link against python-libraries" ON)
OPTION(OCCT_CMAKE_FALLBACK "disable usage of occt-config files" OFF)
if (WIN32 OR APPLE)
OPTION(FREECAD_USE_QT_FILEDIALOG "Use Qt's file dialog instead of the native one." OFF)

View File

@@ -17,10 +17,14 @@ include_directories(
${PYCXX_INCLUDE_DIR}
)
if (BUILD_DYNAMIC_LINK_PYTHON)
set(LINK_PYTHON_LIBRARIES ${PYTHON_LIBRARIES})
endif (BUILD_DYNAMIC_LINK_PYTHON)
if(MSVC)
set(FreeCADBase_LIBS
${Boost_LIBRARIES}
${PYTHON_LIBRARIES}
${LINK_PYTHON_LIBRARIES}
debug ${XercesC_DEBUG_LIBRARIES}
optimized ${XercesC_LIBRARIES}
${ZLIB_LIBRARIES}
@@ -45,7 +49,7 @@ if(MSVC)
endif()
elseif(MINGW)
set(FreeCADBase_LIBS
${PYTHON_LIBRARIES}
${LINK_PYTHON_LIBRARIES}
${XercesC_LIBRARIES}
${Boost_LIBRARIES}
${ZLIB_LIBRARIES}
@@ -53,7 +57,7 @@ elseif(MINGW)
)
else(MSVC)
set(FreeCADBase_LIBS
${PYTHON_LIBRARIES}
${LINK_PYTHON_LIBRARIES}
${XercesC_LIBRARIES}
${Boost_LIBRARIES}
${ZLIB_LIBRARIES}

View File

@@ -42,6 +42,12 @@ if(BUILD_GUI)
add_executable(FreeCADMain WIN32 ${FreeCAD_SRCS})
target_link_libraries(FreeCADMain ${FreeCAD_LIBS})
if(NOT BUILD_DYNAMIC_LINK_PYTHON)
# executeables have to be linked against python libraries,
# because extension modules are not.
target_link_libraries(FreeCADMain ${PYTHON_LIBRARIES})
endif(NOT BUILD_DYNAMIC_LINK_PYTHON)
SET_BIN_DIR(FreeCADMain FreeCAD)
if(WIN32)
@@ -87,6 +93,12 @@ target_link_libraries(FreeCADMainCmd
${FreeCADMainCmd_LIBS}
)
if(NOT BUILD_DYNAMIC_LINK_PYTHON)
# executeables have to be linked against python libraries,
# because extension modules are not.
target_link_libraries(FreeCADMainCmd ${PYTHON_LIBRARIES})
endif(NOT BUILD_DYNAMIC_LINK_PYTHON)
SET_BIN_DIR(FreeCADMainCmd FreeCADCmd)
if(WIN32)

View File

@@ -128,7 +128,12 @@ if (BUILD_FLAT_MESH)
add_library(flatmesh SHARED ${FLATMESH_SRCS})
SET_PYTHON_PREFIX_SUFFIX(flatmesh)
target_link_libraries(flatmesh ${PYTHON_LIBRARIES} ${MeshPart_LIBS} ${Boost_LIBRARIES})
if (BUILD_DYNAMIC_LINK_PYTHON)
target_link_libraries(flatmesh ${PYTHON_LIBRARIES})
endif(BUILD_DYNAMIC_LINK_PYTHON)
target_link_libraries(flatmesh ${MeshPart_LIBS} ${Boost_LIBRARIES})
SET_BIN_DIR(flatmesh flatmesh /Mod/MeshPart)
install(TARGETS flatmesh DESTINATION ${CMAKE_INSTALL_LIBDIR})

View File

@@ -1,8 +1,8 @@
# Turn compiler warnings on for gcc
if (CMAKE_BUILD_TOOL MATCHES "make")
if (CMAKE_BUILD_TOOL MATCHES "make" AND BUILD_DYNAMIC_LINK_PYTHON)
MESSAGE(STATUS "setting gcc options: -Wall -Werror -Wno-deprecated -pedantic-errors")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
endif (CMAKE_BUILD_TOOL MATCHES "make")
endif (CMAKE_BUILD_TOOL MATCHES "make" AND BUILD_DYNAMIC_LINK_PYTHON)
if(MSVC)
add_definitions(-D_CRT_SECURE_NO_WARNINGS /wd4244)
@@ -123,25 +123,31 @@ if(MSVC)
set(area_LIBS
${Boost_LIBRARIES}
${PYTHON_LIBRARIES}
${area_native_LIBS}
)
if(BUILD_DYNAMIC_LINK_PYTHON)
list(APPEND area_LIBS ${PYTHON_LIBRARIES})
endif(BUILD_DYNAMIC_LINK_PYTHON)
elseif(MINGW)
set(area_native_LIBS
Rpcrt4.lib
)
set(area_LIBS
${Boost_LIBRARIES}
${PYTHON_LIBRARIES}
${area_native_LIBS}
)
if(BUILD_DYNAMIC_LINK_PYTHON)
list(APPEND area_LIBS ${PYTHON_LIBRARIES})
endif(BUILD_DYNAMIC_LINK_PYTHON)
else(MSVC)
set(area_native_LIBS
)
set(area_LIBS
${Boost_LIBRARIES}
${PYTHON_LIBRARIES}
)
if(BUILD_DYNAMIC_LINK_PYTHON)
list(APPEND area_LIBS ${PYTHON_LIBRARIES})
endif(BUILD_DYNAMIC_LINK_PYTHON)
endif(MSVC)
target_link_libraries(area-native ${area_native_LIBS})