chiark / gitweb /
dont use swig if nlopt-python.cpp is already present
authorxantares <xantares09@hotmail.com>
Sat, 21 Feb 2015 07:09:51 +0000 (08:09 +0100)
committerxantares <xantares09@hotmail.com>
Sat, 21 Feb 2015 07:09:51 +0000 (08:09 +0100)
swig/CMakeLists.txt

index 3dd1f5e09789a3f4d2a979a5e867905b8af8581e..056446370e37c7d018948010796e28de863dd023 100644 (file)
@@ -2,18 +2,31 @@ option (BUILD_PYTHON "build python bindings" ON)
 
 find_package (PythonInterp)
 find_package (PythonLibs)
-find_package (SWIG)
 
-if (BUILD_PYTHON AND PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND SWIG_FOUND AND BUILD_SHARED_LIBS)
-  include (UseSWIG)
+if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-python.cpp)
+  find_package (SWIG)
+endif ()
+
+if (BUILD_PYTHON AND PYTHONINTERP_FOUND AND PYTHONLIBS_FOUND AND (SWIG_FOUND OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-python.cpp)) AND BUILD_SHARED_LIBS)
+
   include_directories (${CMAKE_SOURCE_DIR}/api)
   include_directories (${PYTHON_INCLUDE_DIRS})
 
-  set_source_files_properties (nlopt.i PROPERTIES CPLUSPLUS ON)
-  set (SWIG_MODULE_nlopt_EXTRA_DEPS nlopt-python.i numpy.i ${CMAKE_SOURCE_DIR}/api/nlopt.hpp)
-
-  swig_add_module (nlopt python nlopt.i)
-  swig_link_libraries (nlopt nlopt)
+  if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-python.cpp)
+    set (SWIG_MODULE_nlopt_REAL_NAME _nlopt)
+    add_library (${SWIG_MODULE_nlopt_REAL_NAME} MODULE nlopt-python.cpp)
+    set_target_properties (${SWIG_MODULE_nlopt_REAL_NAME} PROPERTIES PREFIX "")
+    if (NOT CMAKE_SOURCE_DIR MATCHES CMAKE_BINARY_DIR)
+      execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/nlopt.py ${CMAKE_CURRENT_BINARY_DIR}/nlopt.py)
+    endif ()
+  else ()
+    include (UseSWIG)
+    set_source_files_properties (nlopt.i PROPERTIES CPLUSPLUS ON)
+    set (SWIG_MODULE_nlopt_EXTRA_DEPS nlopt-python.i numpy.i ${CMAKE_SOURCE_DIR}/api/nlopt.hpp)
+
+    swig_add_module (nlopt python nlopt.i)
+    swig_link_libraries (nlopt nlopt)
+  endif ()
 
   execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}'))"
                     OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH