chiark / gitweb /
put source code into src subdirectory
[nlopt.git] / src / swig / CMakeLists.txt
1
2 if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-enum-renames.i)
3   file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/nlopt-enum-renames.i "// AUTOMATICALLY GENERATED -- DO NOT EDIT\n")
4   file (STRINGS ${PROJECT_SOURCE_DIR}/src/api/nlopt.h NLOPT_H_LINES REGEX "    NLOPT_[A-Z0-9_]+")
5   foreach (NLOPT_H_LINE ${NLOPT_H_LINES})
6     string (REGEX REPLACE ".*NLOPT_([A-Z0-9_]+).*" "%rename(NLOPT_\\1) nlopt::\\1;\n" ENUM_LINE ${NLOPT_H_LINE})
7     file (APPEND ${CMAKE_CURRENT_BINARY_DIR}/nlopt-enum-renames.i "${ENUM_LINE}")
8   endforeach ()
9 endif ()
10
11
12 if (NUMPY_FOUND AND PYTHONLIBS_FOUND AND (SWIG_FOUND OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-python.cpp)))
13
14   include_directories (${PYTHON_INCLUDE_DIRS})
15   include_directories (${NUMPY_INCLUDE_DIRS})
16
17   if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-python.cpp)
18     set (SWIG_MODULE_nlopt_REAL_NAME _nlopt)
19     add_library (${SWIG_MODULE_nlopt_REAL_NAME} MODULE nlopt-python.cpp)
20     target_link_libraries(${SWIG_MODULE_nlopt_REAL_NAME} ${nlopt_lib})
21     target_link_libraries(${SWIG_MODULE_nlopt_REAL_NAME} ${PYTHON_LIBRARIES})
22     set_target_properties (${SWIG_MODULE_nlopt_REAL_NAME} PROPERTIES PREFIX "")
23     if (NOT PROJECT_SOURCE_DIR MATCHES PROJECT_BINARY_DIR)
24       execute_process (COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/nlopt.py ${CMAKE_CURRENT_BINARY_DIR}/nlopt.py)
25     endif ()
26   else ()
27     include (UseSWIG)
28     set_source_files_properties (nlopt.i PROPERTIES CPLUSPLUS ON)
29     set (SWIG_MODULE_nlopt_EXTRA_DEPS nlopt-python.i numpy.i)
30
31     include_directories (${NLOPT_PRIVATE_INCLUDE_DIRS})
32     if (CMAKE_VERSION VERSION_LESS 3.8)
33       swig_add_module (nlopt python nlopt.i)
34     else ()
35       swig_add_library (nlopt LANGUAGE python SOURCES nlopt.i)
36     endif ()
37
38     swig_link_libraries (nlopt ${nlopt_lib})
39     swig_link_libraries (nlopt ${PYTHON_LIBRARIES})
40     target_include_directories (${SWIG_MODULE_nlopt_REAL_NAME} PRIVATE ${NLOPT_PRIVATE_INCLUDE_DIRS})
41   endif ()
42
43   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/nlopt.py DESTINATION ${INSTALL_PYTHON_DIR})
44   install (TARGETS ${SWIG_MODULE_nlopt_REAL_NAME} LIBRARY DESTINATION ${INSTALL_PYTHON_DIR})
45 endif ()
46
47
48 # guile bindings with gcc only ok with swig >= 2.0.10
49 if (GUILE_FOUND AND ((SWIG_FOUND AND SWIG_VERSION VERSION_GREATER 2.0.9) OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-guile.cpp)))
50   include_directories (${GUILE_INCLUDE_DIRS})
51
52   if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-guile.cpp)
53     set (guile_cpp_source ${CMAKE_CURRENT_SOURCE_DIR}/nlopt-guile.cpp)
54   else ()
55     file (WRITE ${CMAKE_CURRENT_BINARY_DIR}/GenericConfigureFile.cmake "configure_file (\${INFILE} \${OUTFILE} @ONLY)")
56
57     set (guile_cpp_source ${CMAKE_CURRENT_BINARY_DIR}/nlopt-guile.cpp)
58     add_custom_command (OUTPUT ${guile_cpp_source} nlopt.scm.in
59                         COMMAND ${SWIG_EXECUTABLE} -I${PROJECT_BINARY_DIR}/src/api -outdir ${CMAKE_CURRENT_BINARY_DIR} -c++ -guile -scmstub -o ${guile_cpp_source} ${CMAKE_CURRENT_SOURCE_DIR}/nlopt.i
60                         COMMAND ${CMAKE_COMMAND} -E rename ${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm ${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm.in
61                         COMMAND ${CMAKE_COMMAND} -DINFILE=${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm.in -DOUTFILE=${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm -DNLOPT_SUFFIX=${NLOPT_SUFFIX} -P ${CMAKE_CURRENT_BINARY_DIR}/GenericConfigureFile.cmake)
62   endif ()
63
64   if (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/nlopt.scm.in)
65     configure_file (${CMAKE_CURRENT_SOURCE_DIR}/nlopt.scm.in ${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm @ONLY)
66   endif ()
67
68   set (SWIG_MODULE_nlopt_guile_REAL_NAME nlopt${NLOPT_SUFFIX}_guile)
69   add_library (${SWIG_MODULE_nlopt_guile_REAL_NAME} MODULE ${guile_cpp_source})
70   target_link_libraries(${SWIG_MODULE_nlopt_guile_REAL_NAME} ${nlopt_lib})
71   target_link_libraries(${SWIG_MODULE_nlopt_guile_REAL_NAME} ${GUILE_LIBRARIES})
72
73   file (RELATIVE_PATH _REL_GUILE_SITE_PATH ${GUILE_ROOT_DIR} ${GUILE_SITE_DIR})
74   set (GUILE_SITE_PATH ${_REL_GUILE_SITE_PATH})
75   install (FILES ${CMAKE_CURRENT_BINARY_DIR}/nlopt.scm DESTINATION ${GUILE_SITE_PATH})
76
77   file (RELATIVE_PATH _REL_GUILE_EXTENSION_PATH ${GUILE_ROOT_DIR} ${GUILE_EXTENSION_DIR})
78   set (GUILE_EXTENSION_PATH ${_REL_GUILE_EXTENSION_PATH})
79   install (TARGETS ${SWIG_MODULE_nlopt_guile_REAL_NAME} LIBRARY DESTINATION ${GUILE_EXTENSION_PATH})
80 endif ()