diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b3e78df0c..73c8b47b1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,6 +5,10 @@ SET(CMAKE_CXX_STANDARD 11) INCLUDE(FindPkgConfig) +SET(CMAKE_INSTALL_LIBDIR lib) +SET(CMAKE_INSTALL_BINDIR bin) +SET(CMAKE_INSTALL_INCLUDEDIR include) + IF(UNIX) IF(NOT APPLE) INCLUDE(GNUInstallDirs) @@ -12,27 +16,30 @@ IF(UNIX) ENDIF() SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fwrapv -DNDEBUG") -IF(BUILD_PYTHON) - SET(BUILD_CXX ON) - FIND_PACKAGE(PythonInterp) - FIND_PACKAGE(PythonLibs) - INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) +SET(BUILD_CXX ON) - IF(PYTHON_VERSION_MAJOR GREATER_EQUAL 3) - SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS};-py3;-DPY3") - ENDIF() - - FIND_PACKAGE(SWIG REQUIRED) - INCLUDE(cmake/UseSWIG.cmake) -ENDIF(BUILD_PYTHON) +# IF(BUILD_PYTHON) +# FIND_PACKAGE(PythonInterp) +# FIND_PACKAGE(PythonLibs) +# INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) +# +# IF(PYTHON_VERSION_MAJOR GREATER_EQUAL 3) +# SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS};-py3;-DPY3") +# ENDIF() +# +# FIND_PACKAGE(SWIG REQUIRED) +# INCLUDE(cmake/UseSWIG.cmake) +# +# SET(PYTHON_DEPS "") +# SET(PYTHON_PACK_DATA "") +# ENDIF(BUILD_PYTHON) IF(BUILD_CXX) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DUSE_GLOP -DUSE_BOP") FIND_PACKAGE(Protobuf REQUIRED) - FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} - "ortools/*.proto") + FILE(GLOB_RECURSE proto_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "ortools/*.proto") SET(PROTOBUF_GENERATE_CPP_APPEND_PATH OFF) FIND_PACKAGE(Gflags REQUIRED) @@ -49,7 +56,6 @@ IF(BUILD_CXX) PKG_CHECK_MODULES(GLOG libglog) INCLUDE_DIRECTORIES(.) - INCLUDE_DIRECTORIES(examples) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIRS}) @@ -82,11 +88,39 @@ IF(BUILD_CXX) ADD_SUBDIRECTORY(examples/cpp) ENDIF(BUILD_CXX) -IF(BUILD_PYTHON) - FOREACH(SUBPROJECT constraint_solver algorithms graph linear_solver) - ADD_SUBDIRECTORY(ortools/${SUBPROJECT}/python) - ENDFOREACH(SUBPROJECT constraint_solver algorithms) -ENDIF(BUILD_PYTHON) +# IF(BUILD_PYTHON) +# 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 +# OUTPUT_STRIP_TRAILING_WHITESPACE) +# +# PROTOBUF_GENERATE_PYTHON(PY_PROTO_SRCS ${proto_files}) +# +# GET_FILENAME_COMPONENT(_ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE) +# FILE(RELATIVE_PATH _REL_PYTHON_MODULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH}) +# SET(PYTHON_MODULE_PATH ${_REL_PYTHON_MODULE_PATH}) +# +# FOREACH(SUBPROJECT constraint_solver algorithms graph linear_solver) +# ADD_SUBDIRECTORY(ortools/${SUBPROJECT}/python) +# ENDFOREACH() +# +# +# ADD_CUSTOM_TARGET(py${PROJECT_NAME} ALL DEPENDS ${PY_PROTO_SRCS}) +# +# # SET(SETUP_PY_IN ${CMAKE_CURRENT_SOURCE_DIR}/python/setup.py.in) +# # SET(SETUP_PY ${CMAKE_CURRENT_BINARY_DIR}/setup.py) +# # SET(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build/timestamp) +# +# # CONFIGURE_FILE(${SETUP_PY_IN} ${SETUP_PY}) +# +# # ADD_CUSTOM_COMMAND(OUTPUT ${OUTPUT} +# # COMMAND ${PYTHON} ${SETUP_PY} build +# # COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT}) +# +# # ADD_CUSTOM_TARGET(TARGET ALL DEPENDS ${OUTPUT}) +# +# # INSTALL(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") +# ENDIF(BUILD_PYTHON) INSTALL(DIRECTORY ortools DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 9e8d182c1b..5f8b23e669 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -1,10 +1,17 @@ -ADD_LIBRARY(executable_libs STATIC +ADD_LIBRARY(${PROJECT_NAME}examples SHARED cvrptw_lib.cc parse_dimacs_assignment.cc fap_model_printer.cc fap_parser.cc fap_utilities.cc) -ADD_DEPENDENCIES(executable_libs ${PROJECT_NAME}Proto) + +INSTALL(TARGETS ${PROJECT_NAME}examples + EXPORT ${PROJECT_NAME}_Exports + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + +ADD_DEPENDENCIES(${PROJECT_NAME}examples ${PROJECT_NAME}Proto) FOREACH(EXECUTABLE costas_array @@ -44,6 +51,6 @@ FOREACH(EXECUTABLE tsp weighted_tardiness_sat) ADD_EXECUTABLE(${EXECUTABLE} ${EXECUTABLE}.cc) - TARGET_LINK_LIBRARIES(${EXECUTABLE} executable_libs ${PROJECT_NAME}) + TARGET_LINK_LIBRARIES(${EXECUTABLE} ${PROJECT_NAME}examples ${PROJECT_NAME}) INSTALL(TARGETS ${EXECUTABLE} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) ENDFOREACH() diff --git a/ortools/algorithms/python/CMakeLists.txt b/ortools/algorithms/python/CMakeLists.txt index b6e30b15ac..d5233365dc 100644 --- a/ortools/algorithms/python/CMakeLists.txt +++ b/ortools/algorithms/python/CMakeLists.txt @@ -4,4 +4,6 @@ IF(BUILD_PYTHON) SWIG_ADD_LIBRARY(pywrapknapsack_solver TYPE MODULE LANGUAGE python SOURCES knapsack_solver.i) SWIG_LINK_LIBRARIES(pywrapknapsack_solver ${PROJECT_NAME}) + + INSTALL(TARGETS _pywrapknapsack_solver DESTINATION ${PYTHON_MODULE_PATH}) ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/constraint_solver/CMakeLists.txt b/ortools/constraint_solver/CMakeLists.txt index 4392e1f074..be65bf63f2 100644 --- a/ortools/constraint_solver/CMakeLists.txt +++ b/ortools/constraint_solver/CMakeLists.txt @@ -4,15 +4,6 @@ PROJECT(${PROJECT_NAME}_constraint_solver) FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") -IF(BUILD_PYTHON) - PROTOBUF_GENERATE_PYTHON(PY_ASSIGN_PROTO_SRCS assignment.proto) - PROTOBUF_GENERATE_PYTHON(PY_SEARCH_PROTO_SRCS search_limit.proto) - PROTOBUF_GENERATE_PYTHON(PY_MODEL__PROTO_SRCS model.proto) - PROTOBUF_GENERATE_PYTHON(PY_ROUTEN_PROTO_SRCS routing_enums.proto) - PROTOBUF_GENERATE_PYTHON(PY_SOLVER_PROTO_SRCS solver_parameters.proto) - PROTOBUF_GENERATE_PYTHON(PY_ROUTPA_PROTO_SRCS routing_parameters.proto) -ENDIF(BUILD_PYTHON) - ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/ortools/constraint_solver/python/CMakeLists.txt b/ortools/constraint_solver/python/CMakeLists.txt index 304bfa02a0..731ff9ce21 100644 --- a/ortools/constraint_solver/python/CMakeLists.txt +++ b/ortools/constraint_solver/python/CMakeLists.txt @@ -4,4 +4,6 @@ IF(BUILD_PYTHON) SWIG_ADD_LIBRARY(pywrapcp TYPE MODULE LANGUAGE python SOURCES routing.i) SWIG_LINK_LIBRARIES(pywrapcp ${PROJECT_NAME}) + + INSTALL(TARGETS _pywrapcp DESTINATION ${PYTHON_MODULE_PATH}) ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/graph/python/CMakeLists.txt b/ortools/graph/python/CMakeLists.txt index 0962106911..ca850aa0e6 100644 --- a/ortools/graph/python/CMakeLists.txt +++ b/ortools/graph/python/CMakeLists.txt @@ -4,4 +4,6 @@ IF(BUILD_PYTHON) SWIG_ADD_LIBRARY(pywrapgraph TYPE MODULE LANGUAGE python SOURCES graph.i) SWIG_LINK_LIBRARIES(pywrapgraph ${PROJECT_NAME}) + + INSTALL(TARGETS _pywrapgraph DESTINATION ${PYTHON_MODULE_PATH}) ENDIF(BUILD_PYTHON) \ No newline at end of file diff --git a/ortools/linear_solver/CMakeLists.txt b/ortools/linear_solver/CMakeLists.txt index 9bc24531b8..d176a97c5e 100644 --- a/ortools/linear_solver/CMakeLists.txt +++ b/ortools/linear_solver/CMakeLists.txt @@ -4,11 +4,7 @@ PROJECT(${PROJECT_NAME}_linear_solver) FILE(GLOB ${PROJECT_NAME}_SOURCES "*.cc") -IF(BUILD_PYTHON) - PROTOBUF_GENERATE_PYTHON(PY_PROTO_SRCS linear_solver.proto) -ENDIF(BUILD_PYTHON) - ADD_LIBRARY(${PROJECT_NAME} OBJECT ${${PROJECT_NAME}_SOURCES}) SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) -ADD_DEPENDENCIES(${PROJECT_NAME} ${ROOT_PROJECT}Proto) \ No newline at end of file +ADD_DEPENDENCIES(${PROJECT_NAME} ${ROOT_PROJECT}Proto) diff --git a/ortools/linear_solver/python/CMakeLists.txt b/ortools/linear_solver/python/CMakeLists.txt index 3ceece33a4..9a363c3c11 100644 --- a/ortools/linear_solver/python/CMakeLists.txt +++ b/ortools/linear_solver/python/CMakeLists.txt @@ -4,4 +4,6 @@ IF(BUILD_PYTHON) SWIG_ADD_LIBRARY(pywraplp TYPE MODULE LANGUAGE python SOURCES linear_solver.i) SWIG_LINK_LIBRARIES(pywraplp ${PROJECT_NAME}) + + INSTALL(TARGETS _pywraplp DESTINATION ${PYTHON_MODULE_PATH}) ENDIF() \ No newline at end of file