nixprime / cpsm

A CtrlP matcher, specialized for paths.
Apache License 2.0
202 stars 19 forks source link

Can not build on Windows #45

Open mattn opened 6 years ago

mattn commented 6 years ago
-- Found PythonInterp: C:/msys64/mingw64/bin/python2.7.exe (found version "2.7.14") 
CMake Error at C:/msys64/mingw64/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find PythonConfig (missing: PYTHON_COMPILE_FLAGS
  PYTHON_LINK_FLAGS)
Call Stack (most recent call first):
  C:/msys64/mingw64/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  cmake/FindPythonConfig.cmake:27 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:31 (find_package)

python3-config is not executable file on Windows. Just shell-script for msys2/mingw64. So I created batch file like below.

python3.6-config.cmd

@echo off
c:\msys64\usr\bin\bash.exe c:\msys64\mingw64\bin\python3.6m-config %*

And modified some files.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f19c831..bc02187 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -46,7 +46,7 @@ set_target_properties(cpsm_core PROPERTIES COMPILE_FLAGS "-fPIC")
 add_library(cpsm_py SHARED src/ctrlp_util.cc src/python_extension.cc)
 target_link_libraries(cpsm_py cpsm_core)
 set_target_properties(cpsm_py PROPERTIES COMPILE_FLAGS ${PYTHON_COMPILE_FLAGS})
-set_target_properties(cpsm_py PROPERTIES LINK_FLAGS ${PYTHON_LINK_FLAGS})
+set_target_properties(cpsm_py PROPERTIES LINK_FLAGS "-Wl,--whole-archive ${PYTHON_LINK_FLAGS} -Wl,--no-whole-archive -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic")
 set_target_properties(cpsm_py PROPERTIES PREFIX "")
 if(APPLE)
   set_target_properties(cpsm_py PROPERTIES SUFFIX ".so")
@@ -55,7 +55,7 @@ install(TARGETS cpsm_py DESTINATION ${PROJECT_SOURCE_DIR}/autoload)
 install(TARGETS cpsm_py DESTINATION ${PROJECT_SOURCE_DIR}/bin)

 add_executable(cpsm_cli src/cpsm_cli_main.cc)
-target_link_libraries(cpsm_cli cpsm_core ${Boost_PROGRAM_OPTIONS_LIBRARIES})
+target_link_libraries(cpsm_cli ${Boost_PROGRAM_OPTIONS_LIBRARIES} cpsm_core)
 install(TARGETS cpsm_cli DESTINATION ${PROJECT_SOURCE_DIR}/bin)

 enable_testing()
diff --git a/cmake/FindPythonConfig.cmake b/cmake/FindPythonConfig.cmake
index 6a69b75..176b9b8 100644
--- a/cmake/FindPythonConfig.cmake
+++ b/cmake/FindPythonConfig.cmake
@@ -16,7 +16,11 @@ include(FindPackageHandleStandardArgs)

 find_package(PythonInterp)
 if(PYTHONINTERP_FOUND)
-  set(_Python_config "${PYTHON_EXECUTABLE}-config")
+  if(WIN32)
+    set(_Python_config "${PYTHON_EXECUTABLE}-config.cmd")
+  else(WIN32)
+    set(_Python_config "${PYTHON_EXECUTABLE}-config")
+  endif(WIN32)
   execute_process(COMMAND ${_Python_config} "--includes" OUTPUT_VARIABLE PYTHON_COMPILE_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
   execute_process(COMMAND ${_Python_config} "--ldflags" OUTPUT_VARIABLE PYTHON_LINK_FLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
   string(CONCAT _Python_config_message ${PYTHON_COMPILE_FLAGS} "; " ${PYTHON_LINK_FLAGS})

-Wl,--whole-archive ${PYTHON_LINK_FLAGS} is required to avoid to fix order of -l specified. This is ugly workaround. Please help me to fix this issue.