Make examples build and run on Cygwin

This commit is contained in:
Boris Schäling 2016-05-26 22:42:07 +02:00
parent bd986fe57e
commit 8965644536
3 changed files with 15 additions and 9 deletions

1
.gitignore vendored
View File

@ -5,6 +5,7 @@ cmake_install.cmake
.DS_Store .DS_Store
/example/example.so /example/example.so
/example/example.pyd /example/example.pyd
/example/example.dll
*.sln *.sln
*.sdf *.sdf
*.opensdf *.opensdf

View File

@ -59,7 +59,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU"
# Check for Link Time Optimization support # Check for Link Time Optimization support
# (GCC/Clang) # (GCC/Clang)
CHECK_CXX_COMPILER_FLAG("-flto" HAS_LTO_FLAG) CHECK_CXX_COMPILER_FLAG("-flto" HAS_LTO_FLAG)
if (HAS_LTO_FLAG) if (HAS_LTO_FLAG AND NOT CYGWIN)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto")
endif() endif()
@ -149,6 +149,9 @@ add_library(example SHARED
${PYBIND11_EXAMPLES} ${PYBIND11_EXAMPLES}
) )
# Link against the Python shared library
target_link_libraries(example ${PYTHON_LIBRARY})
# Don't add a 'lib' prefix to the shared library # Don't add a 'lib' prefix to the shared library
set_target_properties(example PROPERTIES PREFIX "") set_target_properties(example PROPERTIES PREFIX "")
@ -182,9 +185,6 @@ if (WIN32)
# .PYD file extension on Windows # .PYD file extension on Windows
set_target_properties(example PROPERTIES SUFFIX ".pyd") set_target_properties(example PROPERTIES SUFFIX ".pyd")
# Link against the Python shared library
target_link_libraries(example ${PYTHON_LIBRARY})
elseif (UNIX) elseif (UNIX)
# It's quite common to have multiple copies of the same Python version # It's quite common to have multiple copies of the same Python version
# installed on one's system. E.g.: one copy from the OS and another copy # installed on one's system. E.g.: one copy from the OS and another copy
@ -200,8 +200,13 @@ elseif (UNIX)
# missing symbols, but that's perfectly fine -- they will be resolved at # missing symbols, but that's perfectly fine -- they will be resolved at
# import time. # import time.
# .SO file extension on Linux/Mac OS # .DLL file extension on Cygwin, .SO file extension on Linux/Mac OS
set_target_properties(example PROPERTIES SUFFIX ".so") if (CYGWIN)
set(SUFFIX ".dll")
else()
set(SUFFIX ".so")
endif()
set_target_properties(example PROPERTIES SUFFIX ${SUFFIX})
# Optimize for a small binary size # Optimize for a small binary size
if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
@ -213,11 +218,11 @@ elseif (UNIX)
set_target_properties(example PROPERTIES MACOSX_RPATH ".") set_target_properties(example PROPERTIES MACOSX_RPATH ".")
set_target_properties(example PROPERTIES LINK_FLAGS "-undefined dynamic_lookup ") set_target_properties(example PROPERTIES LINK_FLAGS "-undefined dynamic_lookup ")
if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
add_custom_command(TARGET example POST_BUILD COMMAND strip -u -r ${PROJECT_SOURCE_DIR}/example/example.so) add_custom_command(TARGET example POST_BUILD COMMAND strip -u -r ${PROJECT_SOURCE_DIR}/example/example${SUFFIX})
endif() endif()
else() else()
if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG) if (NOT ${U_CMAKE_BUILD_TYPE} MATCHES DEBUG)
add_custom_command(TARGET example POST_BUILD COMMAND strip ${PROJECT_SOURCE_DIR}/example/example.so) add_custom_command(TARGET example POST_BUILD COMMAND strip ${PROJECT_SOURCE_DIR}/example/example${SUFFIX})
endif() endif()
endif() endif()
endif() endif()

View File

@ -262,7 +262,7 @@ struct internals {
std::unordered_map<const void *, void*> registered_instances; // void * -> PyObject* std::unordered_map<const void *, void*> registered_instances; // void * -> PyObject*
std::unordered_set<std::pair<const PyObject *, const char *>, overload_hash> inactive_overload_cache; std::unordered_set<std::pair<const PyObject *, const char *>, overload_hash> inactive_overload_cache;
#if defined(WITH_THREAD) #if defined(WITH_THREAD)
int tstate = 0; long tstate = 0;
PyInterpreterState *istate = nullptr; PyInterpreterState *istate = nullptr;
#endif #endif
}; };