diff --git a/CMakeLists.txt b/CMakeLists.txt index ff060cdb36..d0fd6b5aee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,8 +52,8 @@ endif() include(CMakeDependentOption) option(BUILD_DEPS "Force re-build of all dependencies" ON) option(BUILD_CXX "Build C++ library" ON) -CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python Library" OFF - "BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF) +CMAKE_DEPENDENT_OPTION(BUILD_PYTHON "Build Python Library" OFF + "BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF) CMAKE_DEPENDENT_OPTION(BUILD_JAVA "Build Java Library" OFF "BUILD_CXX; NOT ORTOOLS_IS_SUBPROJECT" OFF) CMAKE_DEPENDENT_OPTION(BUILD_DOTNET "Build .NET Library" OFF diff --git a/cmake/cpp.cmake b/cmake/cpp.cmake index 7ca7b9e9cf..89da502516 100644 --- a/cmake/cpp.cmake +++ b/cmake/cpp.cmake @@ -5,42 +5,42 @@ message(STATUS "ortools version: ${PROJECT_VERSION}") # config options if(MSVC) - # Allow big object - add_definitions(/bigobj) - add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_DEPRECATE) - # Build with multiple processes - add_definitions(/MP) - # Prefer /MD over /MT and add NDEBUG in Release - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_definitions(/MDd) - else() - add_definitions(/MD /DNDEBUG) - endif() - # MSVC warning suppressions - add_definitions( - /wd4005 # 'macro-redefinition' - /wd4018 # 'expression' : signed/unsigned mismatch - /wd4065 # switch statement contains 'default' but no 'case' labels - /wd4068 # 'unknown pragma' - /wd4101 # 'identifier' : unreferenced local variable - /wd4146 # unary minus operator applied to unsigned type, result still unsigned - /wd4200 # nonstandard extension used : zero-sized array in struct/union - /wd4244 # 'conversion' conversion from 'type1' to 'type2', possible loss of data - /wd4251 # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' - /wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data - /wd4305 # 'identifier' : truncation from 'type1' to 'type2' - /wd4307 # 'operator' : integral constant overflow - /wd4309 # 'conversion' : truncation of constant value - /wd4334 # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) - /wd4355 # 'this' : used in base member initializer list - /wd4477 # 'fwprintf' : format string '%s' requires an argument of type 'wchar_t *' - /wd4506 # no definition for inline function 'function' - /wd4715 # function' : not all control paths return a value - /wd4800 # 'type' : forcing value to bool 'true' or 'false' (performance warning) - /wd4996 # The compiler encountered a deprecated declaration. - ) + # Allow big object + add_definitions(/bigobj) + add_definitions(/DNOMINMAX /DWIN32_LEAN_AND_MEAN=1 /D_CRT_SECURE_NO_WARNINGS /D_CRT_SECURE_NO_DEPRECATE) + # Build with multiple processes + add_definitions(/MP) + # Prefer /MD over /MT and add NDEBUG in Release + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(/MDd) + else() + add_definitions(/MD /DNDEBUG) + endif() + # MSVC warning suppressions + add_definitions( + /wd4005 # 'macro-redefinition' + /wd4018 # 'expression' : signed/unsigned mismatch + /wd4065 # switch statement contains 'default' but no 'case' labels + /wd4068 # 'unknown pragma' + /wd4101 # 'identifier' : unreferenced local variable + /wd4146 # unary minus operator applied to unsigned type, result still unsigned + /wd4200 # nonstandard extension used : zero-sized array in struct/union + /wd4244 # 'conversion' conversion from 'type1' to 'type2', possible loss of data + /wd4251 # 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' + /wd4267 # 'var' : conversion from 'size_t' to 'type', possible loss of data + /wd4305 # 'identifier' : truncation from 'type1' to 'type2' + /wd4307 # 'operator' : integral constant overflow + /wd4309 # 'conversion' : truncation of constant value + /wd4334 # 'operator' : result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) + /wd4355 # 'this' : used in base member initializer list + /wd4477 # 'fwprintf' : format string '%s' requires an argument of type 'wchar_t *' + /wd4506 # no definition for inline function 'function' + /wd4715 # function' : not all control paths return a value + /wd4800 # 'type' : forcing value to bool 'true' or 'false' (performance warning) + /wd4996 # The compiler encountered a deprecated declaration. + ) else() - add_definitions(-fwrapv) + add_definitions(-fwrapv) endif() add_definitions(-DUSE_GLOP -DUSE_BOP -DUSE_CBC -DUSE_CLP) @@ -52,10 +52,10 @@ find_package(Threads REQUIRED) add_library(${PROJECT_NAME} "") target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11) if(NOT APPLE) - set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) + set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION}) else() - # Clang don't support version x.y.z with z > 255 - set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) + # Clang don't support version x.y.z with z > 255 + set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}) endif() set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR}) set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 11) @@ -66,26 +66,26 @@ set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_POSITION_INDEPENDENT_ set_target_properties(${PROJECT_NAME} PROPERTIES INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${PROJECT_VERSION_MAJOR}) set_target_properties(${PROJECT_NAME} PROPERTIES COMPATIBLE_INTERFACE_STRING ${PROJECT_NAME}_MAJOR_VERSION) if(APPLE) - set_target_properties(${PROJECT_NAME} PROPERTIES - INSTALL_RPATH - "@loader_path") + set_target_properties(${PROJECT_NAME} PROPERTIES + INSTALL_RPATH + "@loader_path") endif() target_include_directories(${PROJECT_NAME} INTERFACE - $ - $ - $ - ) + $ + $ + $ + ) target_link_libraries(${PROJECT_NAME} PUBLIC - gflags::gflags glog::glog - ZLIB::ZLIB protobuf::libprotobuf - Cbc::CbcSolver Cbc::OsiCbc Cbc::ClpSolver Cbc::OsiClp - Threads::Threads) + gflags::gflags glog::glog + ZLIB::ZLIB protobuf::libprotobuf + Cbc::CbcSolver Cbc::OsiCbc Cbc::ClpSolver Cbc::OsiClp + Threads::Threads) if(WIN32) - target_link_libraries(${PROJECT_NAME} PUBLIC psapi.lib ws2_32.lib) -target_compile_definitions(${PROJECT_NAME} PUBLIC __WIN32__) + target_link_libraries(${PROJECT_NAME} PUBLIC psapi.lib ws2_32.lib) + target_compile_definitions(${PROJECT_NAME} PUBLIC __WIN32__) endif() target_compile_definitions(${PROJECT_NAME} - PUBLIC USE_BOP USE_GLOP USE_CBC USE_CLP) + PUBLIC USE_BOP USE_GLOP USE_CBC USE_CLP) target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_11) add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME}) @@ -97,31 +97,31 @@ file(GLOB_RECURSE proto_files RELATIVE ${PROJECT_SOURCE_DIR} "ortools/*.proto") # Get Protobuf include dir get_target_property(protobuf_dirs protobuf::libprotobuf INTERFACE_INCLUDE_DIRECTORIES) foreach(dir ${protobuf_dirs}) - if ("${dir}" MATCHES "BUILD_INTERFACE") - list(APPEND PROTO_DIRS "--proto_path=${dir}") + if ("${dir}" MATCHES "BUILD_INTERFACE") + list(APPEND PROTO_DIRS "--proto_path=${dir}") endif() endforeach() foreach (PROTO_FILE ${proto_files}) - #message(STATUS "protoc proto(cc): ${PROTO_FILE}") - get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY) - get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE) - set(PROTO_HDR ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}.pb.h) - set(PROTO_SRC ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}.pb.cc) - #message(STATUS "protoc hdr: ${PROTO_HDR}") - #message(STATUS "protoc src: ${PROTO_SRC}") - add_custom_command( - OUTPUT ${PROTO_SRC} ${PROTO_HDR} - COMMAND protobuf::protoc - "--proto_path=${PROJECT_SOURCE_DIR}" - "${PROTO_DIRS}" - "--cpp_out=${PROJECT_BINARY_DIR}" - ${PROTO_FILE} - DEPENDS ${PROTO_FILE} protobuf::protoc - COMMENT "Running C++ protocol buffer compiler on ${PROTO_FILE}" - VERBATIM) - list(APPEND PROTO_HDRS ${PROTO_HDR}) - list(APPEND PROTO_SRCS ${PROTO_SRC}) + #message(STATUS "protoc proto(cc): ${PROTO_FILE}") + get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY) + get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE) + set(PROTO_HDR ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}.pb.h) + set(PROTO_SRC ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}.pb.cc) + #message(STATUS "protoc hdr: ${PROTO_HDR}") + #message(STATUS "protoc src: ${PROTO_SRC}") + add_custom_command( + OUTPUT ${PROTO_SRC} ${PROTO_HDR} + COMMAND protobuf::protoc + "--proto_path=${PROJECT_SOURCE_DIR}" + "${PROTO_DIRS}" + "--cpp_out=${PROJECT_BINARY_DIR}" + ${PROTO_FILE} + DEPENDS ${PROTO_FILE} protobuf::protoc + COMMENT "Running C++ protocol buffer compiler on ${PROTO_FILE}" + VERBATIM) + list(APPEND PROTO_HDRS ${PROTO_HDR}) + list(APPEND PROTO_SRCS ${PROTO_SRC}) endforeach() #add_library(${PROJECT_NAME}_proto STATIC ${PROTO_SRCS} ${PROTO_HDRS}) add_library(${PROJECT_NAME}_proto OBJECT ${PROTO_SRCS} ${PROTO_HDRS}) @@ -130,10 +130,10 @@ set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_STANDARD 11) set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_STANDARD_REQUIRED ON) set_target_properties(${PROJECT_NAME}_proto PROPERTIES CXX_EXTENSIONS OFF) target_include_directories(${PROJECT_NAME}_proto PRIVATE - ${PROJECT_SOURCE_DIR} - ${PROJECT_BINARY_DIR} - $ - ) + ${PROJECT_SOURCE_DIR} + ${PROJECT_BINARY_DIR} + $ + ) #target_link_libraries(${PROJECT_NAME}_proto PRIVATE protobuf::libprotobuf) add_dependencies(${PROJECT_NAME}_proto protobuf::libprotobuf) add_library(${PROJECT_NAME}::proto ALIAS ${PROJECT_NAME}_proto) @@ -143,12 +143,12 @@ target_sources(${PROJECT_NAME} PRIVATE $) add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}::proto) foreach(SUBPROJECT - algorithms base bop constraint_solver data glop graph linear_solver lp_data - port sat util) - add_subdirectory(ortools/${SUBPROJECT}) - #target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}::${SUBPROJECT}) - target_sources(${PROJECT_NAME} PRIVATE $) - add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}::${SUBPROJECT}) + algorithms base bop constraint_solver data glop graph linear_solver lp_data + port sat util) + add_subdirectory(ortools/${SUBPROJECT}) + #target_link_libraries(${PROJECT_NAME} PRIVATE ${PROJECT_NAME}::${SUBPROJECT}) + target_sources(${PROJECT_NAME} PRIVATE $) + add_dependencies(${PROJECT_NAME} ${PROJECT_NAME}::${SUBPROJECT}) endforeach() # Install rules @@ -157,44 +157,44 @@ include(GNUInstallDirs) include(GenerateExportHeader) GENERATE_EXPORT_HEADER(${PROJECT_NAME}) install(FILES ${PROJECT_BINARY_DIR}/${PROJECT_NAME}_export.h - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(TARGETS ${PROJECT_NAME} - EXPORT ${PROJECT_NAME}Targets - INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ) + EXPORT ${PROJECT_NAME}Targets + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ) install(EXPORT ${PROJECT_NAME}Targets NAMESPACE ${PROJECT_NAME}:: - DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) install(DIRECTORY ortools - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT Devel - FILES_MATCHING - PATTERN "*.h") + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT Devel + FILES_MATCHING + PATTERN "*.h") install(DIRECTORY ${PROJECT_BINARY_DIR}/ortools - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} - COMPONENT Devel - FILES_MATCHING - PATTERN "*.pb.h" - PATTERN CMakeFiles EXCLUDE) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + COMPONENT Devel + FILES_MATCHING + PATTERN "*.pb.h" + PATTERN CMakeFiles EXCLUDE) include(CMakePackageConfigHelpers) string (TOUPPER "${PROJECT_NAME}" PACKAGE_PREFIX) configure_package_config_file(cmake/${PROJECT_NAME}Config.cmake.in - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" - NO_CHECK_REQUIRED_COMPONENTS_MACRO) + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + INSTALL_DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + NO_CHECK_REQUIRED_COMPONENTS_MACRO) write_basic_package_version_file( - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - COMPATIBILITY SameMajorVersion - ) + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + COMPATIBILITY SameMajorVersion + ) install( - FILES - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" - "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" - DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" - COMPONENT Devel) + FILES + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" + DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}" + COMPONENT Devel) diff --git a/cmake/external/CMakeLists.txt b/cmake/external/CMakeLists.txt index c5545d3de9..96da6d43d7 100644 --- a/cmake/external/CMakeLists.txt +++ b/cmake/external/CMakeLists.txt @@ -18,178 +18,178 @@ set(BUILD_TESTING OFF) ## SWIG (WIN32) ## #################### if(WIN32 AND (BUILD_PYTHON OR BUILD_JAVA OR BUILD_CSHARP)) - message(STATUS "Adding CMake Subproject: Swig...") - # Download and unpack swig at configure time - configure_file( - ${CMAKE_CURRENT_LIST_DIR}/swig.CMakeLists.txt - ${CMAKE_BINARY_DIR}/swig-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download ) - if(result) - message(FATAL_ERROR "CMake step for swig failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download ) - if(result) - message(FATAL_ERROR "Build step for swig failed: ${result}") - endif() + message(STATUS "Adding CMake Subproject: Swig...") + # Download and unpack swig at configure time + configure_file( + ${CMAKE_CURRENT_LIST_DIR}/swig.CMakeLists.txt + ${CMAKE_BINARY_DIR}/swig-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download ) + if(result) + message(FATAL_ERROR "CMake step for swig failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/swig-download ) + if(result) + message(FATAL_ERROR "Build step for swig failed: ${result}") + endif() - set(SWIG_EXECUTABLE ${CMAKE_BINARY_DIR}/swig/swig.exe - CACHE INTERNAL "swig.exe location" FORCE) - message(STATUS "Adding CMake Subproject: Swig...DONE") + set(SWIG_EXECUTABLE ${CMAKE_BINARY_DIR}/swig/swig.exe + CACHE INTERNAL "swig.exe location" FORCE) + message(STATUS "Adding CMake Subproject: Swig...DONE") endif() ############## ## GFLAGS ## ############## if(NOT TARGET gflags::gflags) - message(STATUS "Target gflags::gflags not found.") - message(STATUS "Adding CMake Subproject: Gflags...") - # Download and unpack gflags at configure time - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/gflags.CMakeLists.txt - ${CMAKE_BINARY_DIR}/gflags-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download) - if(result) - message(FATAL_ERROR "CMake step for gflags failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download) - if(result) - message(FATAL_ERROR "Build step for gflags failed: ${result}") - endif() + message(STATUS "Target gflags::gflags not found.") + message(STATUS "Adding CMake Subproject: Gflags...") + # Download and unpack gflags at configure time + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/gflags.CMakeLists.txt + ${CMAKE_BINARY_DIR}/gflags-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download) + if(result) + message(FATAL_ERROR "CMake step for gflags failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/gflags-download) + if(result) + message(FATAL_ERROR "Build step for gflags failed: ${result}") + endif() - set(GFLAGS_NAMESPACE "gflags") - set(GFLAGS_INSTALL_STATIC_LIBS ON) - set(GFLAGS_INSTALL_HEADERS ON) - #set(GFLAGS_IS_SUBPROJECT TRUE) - add_subdirectory( - ${CMAKE_BINARY_DIR}/gflags-src - ${CMAKE_BINARY_DIR}/gflags-build) - message(STATUS "Adding CMake Subproject: Gflag...DONE") + set(GFLAGS_NAMESPACE "gflags") + set(GFLAGS_INSTALL_STATIC_LIBS ON) + set(GFLAGS_INSTALL_HEADERS ON) + #set(GFLAGS_IS_SUBPROJECT TRUE) + add_subdirectory( + ${CMAKE_BINARY_DIR}/gflags-src + ${CMAKE_BINARY_DIR}/gflags-build) + message(STATUS "Adding CMake Subproject: Gflag...DONE") endif() ############ ## GLOG ## ############ if(NOT TARGET glog::glog) - message(STATUS "Target glog::glog not found.") - message(STATUS "Adding CMake Subproject: Glog...") - # Download and unpack glog at configure time - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/glog.CMakeLists.txt - ${CMAKE_BINARY_DIR}/glog-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download) - if(result) - message(FATAL_ERROR "CMake step for glog failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download) - if(result) - message(FATAL_ERROR "Build step for glog failed: ${result}") - endif() + message(STATUS "Target glog::glog not found.") + message(STATUS "Adding CMake Subproject: Glog...") + # Download and unpack glog at configure time + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/glog.CMakeLists.txt + ${CMAKE_BINARY_DIR}/glog-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download) + if(result) + message(FATAL_ERROR "CMake step for glog failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/glog-download) + if(result) + message(FATAL_ERROR "Build step for glog failed: ${result}") + endif() - set(gflags_NAMESPACE "gflags" CACHE INTERNAL "Namespace for gflags") - add_subdirectory( - ${CMAKE_BINARY_DIR}/glog-src - ${CMAKE_BINARY_DIR}/glog-build) - message(STATUS "Adding CMake Subproject: Glog...DONE") + set(gflags_NAMESPACE "gflags" CACHE INTERNAL "Namespace for gflags") + add_subdirectory( + ${CMAKE_BINARY_DIR}/glog-src + ${CMAKE_BINARY_DIR}/glog-build) + message(STATUS "Adding CMake Subproject: Glog...DONE") endif() ############ ## ZLIB ## ############ if(NOT TARGET ZLIB::ZLIB) - message(STATUS "Target ZLIB::ZLIB not found.") - message(STATUS "Adding CMake Subproject: ZLIB...") - # Download and unpack zlib at configure time - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/zlib.CMakeLists.txt - ${CMAKE_BINARY_DIR}/zlib-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download) - if(result) - message(FATAL_ERROR "CMake step for zlib failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download) - if(result) - message(FATAL_ERROR "Build step for zlib failed: ${result}") - endif() + message(STATUS "Target ZLIB::ZLIB not found.") + message(STATUS "Adding CMake Subproject: ZLIB...") + # Download and unpack zlib at configure time + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/zlib.CMakeLists.txt + ${CMAKE_BINARY_DIR}/zlib-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download) + if(result) + message(FATAL_ERROR "CMake step for zlib failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/zlib-download) + if(result) + message(FATAL_ERROR "Build step for zlib failed: ${result}") + endif() - add_subdirectory( - ${CMAKE_BINARY_DIR}/zlib-src - ${CMAKE_BINARY_DIR}/zlib-build) - message(STATUS "Adding CMake Subproject: ZLIB...DONE") + add_subdirectory( + ${CMAKE_BINARY_DIR}/zlib-src + ${CMAKE_BINARY_DIR}/zlib-build) + message(STATUS "Adding CMake Subproject: ZLIB...DONE") endif() ################ ## PROTOBUF ## ################ if(NOT TARGET protobuf::libprotobuf OR NOT TARGET protobuf::protoc) - message(STATUS "Target protobuf::libprotobuf or protobuf::protoc not found.") - message(STATUS "Adding CMake Subproject: Protobuf...") - # Download and unpack protobuf at configure time - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/protobuf.CMakeLists.txt - ${CMAKE_BINARY_DIR}/protobuf-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download ) - if(result) - message(FATAL_ERROR "CMake step for protobuf failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download ) - if(result) - message(FATAL_ERROR "Build step for protobuf failed: ${result}") - endif() + message(STATUS "Target protobuf::libprotobuf or protobuf::protoc not found.") + message(STATUS "Adding CMake Subproject: Protobuf...") + # Download and unpack protobuf at configure time + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/protobuf.CMakeLists.txt + ${CMAKE_BINARY_DIR}/protobuf-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download ) + if(result) + message(FATAL_ERROR "CMake step for protobuf failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/protobuf-download ) + if(result) + message(FATAL_ERROR "Build step for protobuf failed: ${result}") + endif() - set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "Disable Protobuf tests") - add_subdirectory( - ${CMAKE_BINARY_DIR}/protobuf-src/cmake - ${CMAKE_BINARY_DIR}/protobuf-build) - message(STATUS "Adding CMake Subproject: Protobuf...DONE") + set(protobuf_BUILD_TESTS OFF CACHE INTERNAL "Disable Protobuf tests") + add_subdirectory( + ${CMAKE_BINARY_DIR}/protobuf-src/cmake + ${CMAKE_BINARY_DIR}/protobuf-build) + message(STATUS "Adding CMake Subproject: Protobuf...DONE") endif() ########### ## CBC ## ########### if(NOT TARGET Cbc::CbcSolver OR NOT TARGET Cbc::ClpSolver) - message(STATUS "Target Cbc::CbcSolver or Cbc::ClpSolver not found.") - message(STATUS "Adding CMake Subproject: Cbc...") - # Download and unpack cbc at configure time - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/cbc.CMakeLists.txt - ${CMAKE_BINARY_DIR}/cbc-download/CMakeLists.txt) - execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download) - if(result) - message(FATAL_ERROR "CMake step for cbc failed: ${result}") - endif() - execute_process(COMMAND ${CMAKE_COMMAND} --build . - RESULT_VARIABLE result - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download) - if(result) - message(FATAL_ERROR "Build step for cbc failed: ${result}") - endif() + message(STATUS "Target Cbc::CbcSolver or Cbc::ClpSolver not found.") + message(STATUS "Adding CMake Subproject: Cbc...") + # Download and unpack cbc at configure time + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/cbc.CMakeLists.txt + ${CMAKE_BINARY_DIR}/cbc-download/CMakeLists.txt) + execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download) + if(result) + message(FATAL_ERROR "CMake step for cbc failed: ${result}") + endif() + execute_process(COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/cbc-download) + if(result) + message(FATAL_ERROR "Build step for cbc failed: ${result}") + endif() - add_subdirectory( - ${CMAKE_BINARY_DIR}/cbc-src - ${CMAKE_BINARY_DIR}/cbc-build) - message(STATUS "Adding CMake Subproject: Cbc...DONE") + add_subdirectory( + ${CMAKE_BINARY_DIR}/cbc-src + ${CMAKE_BINARY_DIR}/cbc-build) + message(STATUS "Adding CMake Subproject: Cbc...DONE") endif() # Reapply previous state diff --git a/cmake/external/cbc.CMakeLists.txt b/cmake/external/cbc.CMakeLists.txt index a400b8e63d..e07d2784d6 100644 --- a/cmake/external/cbc.CMakeLists.txt +++ b/cmake/external/cbc.CMakeLists.txt @@ -8,15 +8,15 @@ project(cbc-download NONE) include(ExternalProject) ExternalProject_Add(cbc_project - GIT_REPOSITORY https://github.com/Mizux/Cbc - GIT_TAG "master" - SOURCE_DIR "${CMAKE_BINARY_DIR}/cbc-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/cbc-build" - UPDATE_COMMAND "" - #PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/cbc.patch" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON + GIT_REPOSITORY https://github.com/Mizux/Cbc + GIT_TAG "master" + SOURCE_DIR "${CMAKE_BINARY_DIR}/cbc-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/cbc-build" + UPDATE_COMMAND "" + #PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/cbc.patch" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON ) diff --git a/cmake/external/gflags.CMakeLists.txt b/cmake/external/gflags.CMakeLists.txt index d23e193af2..8d5b09b8c8 100644 --- a/cmake/external/gflags.CMakeLists.txt +++ b/cmake/external/gflags.CMakeLists.txt @@ -8,15 +8,15 @@ project(gflags-download NONE) include(ExternalProject) ExternalProject_Add(gflags_project - GIT_REPOSITORY https://github.com/gflags/gflags - GIT_TAG "v2.2.1" - SOURCE_DIR "${CMAKE_BINARY_DIR}/gflags-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/gflags-build" - UPDATE_COMMAND "" - PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/gflags.patch" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON + GIT_REPOSITORY https://github.com/gflags/gflags + GIT_TAG "v2.2.1" + SOURCE_DIR "${CMAKE_BINARY_DIR}/gflags-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/gflags-build" + UPDATE_COMMAND "" + PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/gflags.patch" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON ) diff --git a/cmake/external/glog.CMakeLists.txt b/cmake/external/glog.CMakeLists.txt index eeb57aad70..af5a7f7362 100644 --- a/cmake/external/glog.CMakeLists.txt +++ b/cmake/external/glog.CMakeLists.txt @@ -8,16 +8,16 @@ project(glog-download NONE) include(ExternalProject) ExternalProject_Add(glog_project - GIT_REPOSITORY https://github.com/google/glog - GIT_TAG "55cc27b6eca3d7906fc1a920ca95df7717deb4e7" - #GIT_TAG "v0.3.5" - SOURCE_DIR "${CMAKE_BINARY_DIR}/glog-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/glog-build" - UPDATE_COMMAND "" - PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/glog.patch" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON + GIT_REPOSITORY https://github.com/google/glog + GIT_TAG "55cc27b6eca3d7906fc1a920ca95df7717deb4e7" + #GIT_TAG "v0.3.5" + SOURCE_DIR "${CMAKE_BINARY_DIR}/glog-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/glog-build" + UPDATE_COMMAND "" + PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/glog.patch" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON ) diff --git a/cmake/external/protobuf.CMakeLists.txt b/cmake/external/protobuf.CMakeLists.txt index a6ce270ad3..5188be56f8 100644 --- a/cmake/external/protobuf.CMakeLists.txt +++ b/cmake/external/protobuf.CMakeLists.txt @@ -8,15 +8,15 @@ project(protobuf-download NONE) include(ExternalProject) ExternalProject_Add(protobuf_project - GIT_REPOSITORY https://github.com/google/protobuf - GIT_TAG "v3.6.1" - SOURCE_DIR "${CMAKE_BINARY_DIR}/protobuf-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/protobuf-build" - UPDATE_COMMAND "" - PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/protobuf-3.6.1.patch" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON + GIT_REPOSITORY https://github.com/google/protobuf + GIT_TAG "v3.6.1" + SOURCE_DIR "${CMAKE_BINARY_DIR}/protobuf-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/protobuf-build" + UPDATE_COMMAND "" + PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/protobuf-3.6.1.patch" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON ) diff --git a/cmake/external/swig.CMakeLists.txt b/cmake/external/swig.CMakeLists.txt index 19c8000bd8..fc7efbc53f 100644 --- a/cmake/external/swig.CMakeLists.txt +++ b/cmake/external/swig.CMakeLists.txt @@ -4,16 +4,15 @@ project(swig-download NONE) include(ExternalProject) ExternalProject_Add(SWIG_project - URL - "https://superb-dca2.dl.sourceforge.net/project/swig/swigwin/swigwin-3.0.12/swigwin-3.0.12.zip" - BUILD_IN_SOURCE 1 - SOURCE_DIR "${CMAKE_BINARY_DIR}/swig" - UPDATE_COMMAND "" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON - LOG_CONFIGURE ON - LOG_BUILD ON + URL "https://superb-dca2.dl.sourceforge.net/project/swig/swigwin/swigwin-3.0.12/swigwin-3.0.12.zip" + BUILD_IN_SOURCE 1 + SOURCE_DIR "${CMAKE_BINARY_DIR}/swig" + UPDATE_COMMAND "" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON + LOG_CONFIGURE ON + LOG_BUILD ON ) diff --git a/cmake/external/zlib.CMakeLists.txt b/cmake/external/zlib.CMakeLists.txt index 0b1b403a9c..e96b5e1504 100644 --- a/cmake/external/zlib.CMakeLists.txt +++ b/cmake/external/zlib.CMakeLists.txt @@ -8,15 +8,15 @@ project(zlib-download NONE) include(ExternalProject) ExternalProject_Add(zlib_project - GIT_REPOSITORY "https://github.com/madler/zlib.git" - GIT_TAG "v1.2.11" - SOURCE_DIR "${CMAKE_BINARY_DIR}/zlib-src" - BINARY_DIR "${CMAKE_BINARY_DIR}/zlib-build" - UPDATE_COMMAND "" - PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/zlib.patch" - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - INSTALL_COMMAND "" - TEST_COMMAND "" - LOG_DOWNLOAD ON + GIT_REPOSITORY "https://github.com/madler/zlib.git" + GIT_TAG "v1.2.11" + SOURCE_DIR "${CMAKE_BINARY_DIR}/zlib-src" + BINARY_DIR "${CMAKE_BINARY_DIR}/zlib-build" + UPDATE_COMMAND "" + PATCH_COMMAND git apply "${PROJECT_SOURCE_DIR}/patches/zlib.patch" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" + LOG_DOWNLOAD ON ) diff --git a/cmake/python.cmake b/cmake/python.cmake index d301b8aa03..b31ff07521 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -1,9 +1,9 @@ if(NOT BUILD_PYTHON) - return() + return() endif() if(NOT TARGET ortools::ortools) - message(FATAL_ERROR "Python: missing ortools TARGET") + message(FATAL_ERROR "Python: missing ortools TARGET") endif() # Will need swig @@ -13,28 +13,28 @@ include(UseSWIG) # Generate Protobuf py sources set(PROTO_PYS) file(GLOB_RECURSE proto_py_files RELATIVE ${PROJECT_SOURCE_DIR} - "ortools/constraint_solver/*.proto" - "ortools/linear_solver/*.proto" - "ortools/sat/*.proto" - "ortools/util/*.proto" - ) + "ortools/constraint_solver/*.proto" + "ortools/linear_solver/*.proto" + "ortools/sat/*.proto" + "ortools/util/*.proto" + ) list(REMOVE_ITEM proto_py_files "ortools/constraint_solver/demon_profiler.proto") foreach(PROTO_FILE ${proto_py_files}) - #message(STATUS "protoc proto(py): ${PROTO_FILE}") - get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY) - get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE) - set(PROTO_PY ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}_pb2.py) - #message(STATUS "protoc py: ${PROTO_PY}") - add_custom_command( - OUTPUT ${PROTO_PY} - COMMAND protobuf::protoc - "--proto_path=${PROJECT_SOURCE_DIR}" - "--python_out=${PROJECT_BINARY_DIR}" - ${PROTO_FILE} - DEPENDS ${PROTO_FILE} protobuf::protoc - COMMENT "Running C++ protocol buffer compiler on ${PROTO_FILE}" - VERBATIM) - list(APPEND PROTO_PYS ${PROTO_PY}) + #message(STATUS "protoc proto(py): ${PROTO_FILE}") + get_filename_component(PROTO_DIR ${PROTO_FILE} DIRECTORY) + get_filename_component(PROTO_NAME ${PROTO_FILE} NAME_WE) + set(PROTO_PY ${PROJECT_BINARY_DIR}/${PROTO_DIR}/${PROTO_NAME}_pb2.py) + #message(STATUS "protoc py: ${PROTO_PY}") + add_custom_command( + OUTPUT ${PROTO_PY} + COMMAND protobuf::protoc + "--proto_path=${PROJECT_SOURCE_DIR}" + "--python_out=${PROJECT_BINARY_DIR}" + ${PROTO_FILE} + DEPENDS ${PROTO_FILE} protobuf::protoc + COMMENT "Running C++ protocol buffer compiler on ${PROTO_FILE}" + VERBATIM) + list(APPEND PROTO_PYS ${PROTO_PY}) endforeach() add_custom_target(Py${PROJECT_NAME}_proto DEPENDS ${PROTO_PYS} ortools::ortools) @@ -48,7 +48,7 @@ enable_language(CXX) find_package(PythonLibs REQUIRED) if(${PYTHON_VERSION_STRING} VERSION_GREATER 3) - set(CMAKE_SWIG_FLAGS "-py3;-DPY3") + set(CMAKE_SWIG_FLAGS "-py3;-DPY3") endif() # CMake will remove all '-D' prefix (i.e. -DUSE_FOO become USE_FOO) @@ -57,7 +57,7 @@ set(FLAGS -DUSE_BOP -DUSE_GLOP -DUSE_CBC -DUSE_CLP -DMUST_USE_RESULT) list(APPEND CMAKE_SWIG_FLAGS ${FLAGS} "-I${PROJECT_SOURCE_DIR}") foreach(SUBPROJECT constraint_solver linear_solver sat graph algorithms data) - add_subdirectory(ortools/${SUBPROJECT}/python) + add_subdirectory(ortools/${SUBPROJECT}/python) endforeach() configure_file(${PROJECT_SOURCE_DIR}/ortools/__init__.py ${PROJECT_BINARY_DIR}/ortools/ COPYONLY) @@ -71,99 +71,99 @@ configure_file(${PROJECT_SOURCE_DIR}/ortools/__init__.py ${PROJECT_BINARY_DIR}/o configure_file(${PROJECT_SOURCE_DIR}/ortools/__init__.py ${PROJECT_BINARY_DIR}/ortools/data/ COPYONLY) configure_file(${PROJECT_SOURCE_DIR}/ortools/linear_solver/linear_solver_natural_api.py - ${PROJECT_BINARY_DIR}/ortools/linear_solver/ COPYONLY) + ${PROJECT_BINARY_DIR}/ortools/linear_solver/ COPYONLY) configure_file(${PROJECT_SOURCE_DIR}/ortools/sat/python/cp_model.py - ${PROJECT_BINARY_DIR}/ortools/sat/python COPYONLY) + ${PROJECT_BINARY_DIR}/ortools/sat/python COPYONLY) configure_file(${PROJECT_SOURCE_DIR}/ortools/sat/python/visualization.py - ${PROJECT_BINARY_DIR}/ortools/sat/python COPYONLY) + ${PROJECT_BINARY_DIR}/ortools/sat/python COPYONLY) # To use a cmake generator expression (aka $<>), it must be processed at build time # i.e. inside a add_custom_command() # This command will depend on TARGET(s) in cmake generator expression add_custom_command(OUTPUT setup.py dist ${PROJECT_NAME}.egg-info - COMMAND ${CMAKE_COMMAND} -E echo "from setuptools import dist, find_packages, setup" > setup.py - COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "class BinaryDistribution(dist.Distribution):" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " def is_pure(self):" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " return False" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " def has_ext_modules(self):" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " return True" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "from setuptools.command.install import install" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "class InstallPlatlib(install):" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " def finalize_options(self):" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " install.finalize_options(self)" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " self.install_lib=self.install_platlib" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo "setup(" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " name='ortools'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " license='Apache 2.0'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " version='${PROJECT_VERSION}'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " author='Google Inc'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " author_email='lperron@google.com'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " description='Google OR-Tools python libraries and modules'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " long_description='read(README.txt)'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " keywords=('operations research' +" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ', constraint programming' +" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ', linear programming' +" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ', flow algoritms' +" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ', python')," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " url='https://developers.google.com/optimization/'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " download_url='https://github.com/google/or-tools/releases'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " distclass=BinaryDistribution," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " cmdclass={'install': InstallPlatlib}," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " packages=find_packages()," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " package_data={" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools':[$<$>:'.libs/*', '../$'>]," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.constraint_solver':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.linear_solver':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.sat':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.graph':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.algorithms':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.data':['$']," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " }," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " include_package_data=True," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " install_requires=[" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'protobuf >= ${Protobuf_VERSION}'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'six >= 1.10'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ]," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " classifiers=[" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Development Status :: 5 - Production/Stable'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Intended Audience :: Developers'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'License :: OSI Approved :: Apache Software License'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: POSIX :: Linux'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: MacOS :: MacOS X'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: Microsoft :: Windows'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 2'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 2.7'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3.5'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3.6'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Office/Business :: Scheduling'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Scientific/Engineering'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Scientific/Engineering :: Mathematics'," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Software Development :: Libraries :: Python Modules'" >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo " ]," >> setup.py - COMMAND ${CMAKE_COMMAND} -E echo ")" >> setup.py - VERBATIM) + COMMAND ${CMAKE_COMMAND} -E echo "from setuptools import dist, find_packages, setup" > setup.py + COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "class BinaryDistribution(dist.Distribution):" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " def is_pure(self):" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " return False" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " def has_ext_modules(self):" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " return True" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "from setuptools.command.install import install" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "class InstallPlatlib(install):" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " def finalize_options(self):" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " install.finalize_options(self)" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " self.install_lib=self.install_platlib" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo "setup(" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " name='ortools'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " license='Apache 2.0'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " version='${PROJECT_VERSION}'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " author='Google Inc'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " author_email='lperron@google.com'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " description='Google OR-Tools python libraries and modules'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " long_description='read(README.txt)'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " keywords=('operations research' +" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ', constraint programming' +" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ', linear programming' +" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ', flow algoritms' +" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ', python')," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " url='https://developers.google.com/optimization/'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " download_url='https://github.com/google/or-tools/releases'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " distclass=BinaryDistribution," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " cmdclass={'install': InstallPlatlib}," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " packages=find_packages()," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " package_data={" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools':[$<$>:'.libs/*', '../$'>]," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.constraint_solver':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.linear_solver':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.sat':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.graph':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.algorithms':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.data':['$']," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " }," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " include_package_data=True," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " install_requires=[" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'protobuf >= ${Protobuf_VERSION}'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'six >= 1.10'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ]," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " classifiers=[" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Development Status :: 5 - Production/Stable'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Intended Audience :: Developers'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'License :: OSI Approved :: Apache Software License'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: POSIX :: Linux'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: MacOS :: MacOS X'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Operating System :: Microsoft :: Windows'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 2'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 2.7'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3.5'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Programming Language :: Python :: 3.6'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Office/Business :: Scheduling'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Scientific/Engineering'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Scientific/Engineering :: Mathematics'," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " 'Topic :: Software Development :: Libraries :: Python Modules'" >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo " ]," >> setup.py + COMMAND ${CMAKE_COMMAND} -E echo ")" >> setup.py + VERBATIM) function(search_python_module MODULE_NAME) - execute_process( - COMMAND ${PYTHON_EXECUTABLE} -c "import ${MODULE_NAME}; print(${MODULE_NAME}.__version__)" - RESULT_VARIABLE _RESULT - OUTPUT_VARIABLE MODULE_VERSION - ERROR_QUIET - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - if(${_RESULT} STREQUAL "0") - message(STATUS "Found python module: ${MODULE_NAME} (found version \"${MODULE_VERSION}\")") - else() - message(WARNING "Can't find python module \"${MODULE_NAME}\", install it using pip...") - execute_process( - COMMAND ${PYTHON_EXECUTABLE} -m pip install --user ${MODULE_NAME} - OUTPUT_STRIP_TRAILING_WHITESPACE - ) - endif() + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -c "import ${MODULE_NAME}; print(${MODULE_NAME}.__version__)" + RESULT_VARIABLE _RESULT + OUTPUT_VARIABLE MODULE_VERSION + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(${_RESULT} STREQUAL "0") + message(STATUS "Found python module: ${MODULE_NAME} (found version \"${MODULE_VERSION}\")") + else() + message(WARNING "Can't find python module \"${MODULE_NAME}\", install it using pip...") + execute_process( + COMMAND ${PYTHON_EXECUTABLE} -m pip install --user ${MODULE_NAME} + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + endif() endfunction() # Look for python module wheel @@ -171,31 +171,31 @@ search_python_module(wheel) # Main Target add_custom_target(bdist ALL - DEPENDS setup.py Py${PROJECT_NAME}_proto - COMMAND ${CMAKE_COMMAND} -E remove_directory dist - COMMAND ${PYTHON_EXECUTABLE} setup.py bdist bdist_wheel - ) + DEPENDS setup.py Py${PROJECT_NAME}_proto + COMMAND ${CMAKE_COMMAND} -E remove_directory dist + COMMAND ${PYTHON_EXECUTABLE} setup.py bdist bdist_wheel + ) # Test if(BUILD_TESTING) - # Look for python module virtualenv - search_python_module(virtualenv) - # Testing using a vitual environment - set(VENV_EXECUTABLE ${PYTHON_EXECUTABLE} -m virtualenv) - set(VENV_DIR ${CMAKE_BINARY_DIR}/venv) - if(WIN32) - set(VENV_BIN_DIR "${VENV_DIR}\\Scripts") - else() - set(VENV_BIN_DIR ${VENV_DIR}/bin) - endif() - # make a virtualenv to install our python package in it - add_custom_command(TARGET bdist POST_BUILD - COMMAND ${VENV_EXECUTABLE} -p ${PYTHON_EXECUTABLE} ${VENV_DIR} - COMMAND ${VENV_BIN_DIR}/python setup.py install - COMMAND ${CMAKE_COMMAND} -E copy - ${CMAKE_CURRENT_SOURCE_DIR}/test.py.in - ${VENV_DIR}/test.py - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) - # run the tests within the virtualenv - add_test(pytest_venv ${VENV_BIN_DIR}/python ${VENV_DIR}/test.py) + # Look for python module virtualenv + search_python_module(virtualenv) + # Testing using a vitual environment + set(VENV_EXECUTABLE ${PYTHON_EXECUTABLE} -m virtualenv) + set(VENV_DIR ${CMAKE_BINARY_DIR}/venv) + if(WIN32) + set(VENV_BIN_DIR "${VENV_DIR}\\Scripts") + else() + set(VENV_BIN_DIR ${VENV_DIR}/bin) + endif() + # make a virtualenv to install our python package in it + add_custom_command(TARGET bdist POST_BUILD + COMMAND ${VENV_EXECUTABLE} -p ${PYTHON_EXECUTABLE} ${VENV_DIR} + COMMAND ${VENV_BIN_DIR}/python setup.py install + COMMAND ${CMAKE_COMMAND} -E copy + ${CMAKE_CURRENT_SOURCE_DIR}/test.py.in + ${VENV_DIR}/test.py + WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + # run the tests within the virtualenv + add_test(pytest_venv ${VENV_BIN_DIR}/python ${VENV_DIR}/test.py) endif()