Commit c46f67e8 authored by Davis King's avatar Davis King

Made python extensions use static linking when compiled with visual studio

to avoid dll hell.
parent e16b0f8d
...@@ -35,10 +35,19 @@ get_filename_component(PYTHON_PATH ${PYTHON_PATH} PATH) ...@@ -35,10 +35,19 @@ get_filename_component(PYTHON_PATH ${PYTHON_PATH} PATH)
set(CMAKE_PREFIX_PATH ${PYTHON_PATH}) set(CMAKE_PREFIX_PATH ${PYTHON_PATH})
# To avoid dll hell, always link everything statically when compiling in
# visual studio. This way, the resulting library won't depend on a bunch
# of other dll files and can be safely copied to someone elese's computer
# and expected to run.
if (MSVC)
string(REGEX REPLACE "add_python_module$" "" dlib_path ${CMAKE_CURRENT_LIST_FILE})
include(${dlib_path}/tell_visual_studio_to_use_static_runtime.cmake)
add_definitions(-DBOOST_PYTHON_STATIC_LIB)
SET(Boost_USE_STATIC_LIBS ON)
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_USE_STATIC_RUNTIME ON)
endif()
#SET(Boost_USE_STATIC_LIBS OFF)
#SET(Boost_USE_MULTITHREADED ON)
#SET(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_NO_BOOST_CMAKE ON) set(Boost_NO_BOOST_CMAKE ON)
if (NOT WIN32) if (NOT WIN32)
...@@ -124,8 +133,6 @@ endif() ...@@ -124,8 +133,6 @@ endif()
string(REGEX REPLACE "add_python_module$" "" dlib_path ${CMAKE_CURRENT_LIST_FILE}) string(REGEX REPLACE "add_python_module$" "" dlib_path ${CMAKE_CURRENT_LIST_FILE})
include(${dlib_path}/cmake) include(${dlib_path}/cmake)
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
INCLUDE(InstallRequiredSystemLibraries)
# We put the extra _ on the end of the name just so it's possible to # We put the extra _ on the end of the name just so it's possible to
# have a module name of dlib and not get a conflict with the target named # have a module name of dlib and not get a conflict with the target named
...@@ -161,21 +168,9 @@ macro(add_python_module module_name module_sources ) ...@@ -161,21 +168,9 @@ macro(add_python_module module_name module_sources )
# Determine the path to our CMakeLists.txt file. # Determine the path to our CMakeLists.txt file.
string(REGEX REPLACE "CMakeLists.txt$" "" base_path ${CMAKE_CURRENT_LIST_FILE}) string(REGEX REPLACE "CMakeLists.txt$" "" base_path ${CMAKE_CURRENT_LIST_FILE})
INSTALL(TARGETS ${module_name}_ INSTALL(TARGETS ${module_name}_
DESTINATION "${base_path}/${path}" RUNTIME DESTINATION "${base_path}/${path}"
LIBRARY DESTINATION "${base_path}/${path}"
) )
# On windows we will usually need to have the boost-python .dll files in the same folder or
# you will get an error about how they can't be found. So copy the boost .dll files along with
# your module to the install folder to avoid this. Also copy any visual studio runtime dlls as well.
if (WIN32)
list(GET Boost_LIBRARIES 1 boostlibs1)
list(GET Boost_LIBRARIES 3 boostlibs2)
string(REGEX REPLACE ".lib$" ".dll" boostdlls1 ${boostlibs1})
string(REGEX REPLACE ".lib$" ".dll" boostdlls2 ${boostlibs2})
INSTALL(FILES ${boostdlls1} ${boostdlls2} ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
DESTINATION "${base_path}/${path}"
)
endif()
endmacro() endmacro()
endmacro() endmacro()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment