Remove tab from CMakeLists.txt

- Mandatory to follow google internal convention
This commit is contained in:
Corentin Le Molgat
2018-11-13 09:21:15 +01:00
parent d78cc79ef1
commit b88298edd3
10 changed files with 448 additions and 449 deletions

View File

@@ -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

View File

@@ -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
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
$<INSTALL_INTERFACE:include>
)
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
$<INSTALL_INTERFACE:include>
)
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}
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
)
${PROJECT_SOURCE_DIR}
${PROJECT_BINARY_DIR}
$<TARGET_PROPERTY:protobuf::libprotobuf,INTERFACE_INCLUDE_DIRECTORIES>
)
#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 $<TARGET_OBJECTS:${PROJECT_NAME}::proto>)
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 $<TARGET_OBJECTS:${PROJECT_NAME}::${SUBPROJECT}>)
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 $<TARGET_OBJECTS:${PROJECT_NAME}::${SUBPROJECT}>)
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)

View File

@@ -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

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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
)

View File

@@ -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':[$<$<NOT:$<PLATFORM_ID:Windows>>:'.libs/*', '../$<TARGET_SONAME_FILE_NAME:ortools>'>]," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.constraint_solver':['$<TARGET_FILE_NAME:_pywrapcp>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.linear_solver':['$<TARGET_FILE_NAME:_pywraplp>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.sat':['$<TARGET_FILE_NAME:_pywrapsat>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.graph':['$<TARGET_FILE_NAME:_pywrapgraph>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.algorithms':['$<TARGET_FILE_NAME:_pywrapknapsack_solver>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.data':['$<TARGET_FILE_NAME:_pywraprcpsp>']," >> 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':[$<$<NOT:$<PLATFORM_ID:Windows>>:'.libs/*', '../$<TARGET_SONAME_FILE_NAME:ortools>'>]," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.constraint_solver':['$<TARGET_FILE_NAME:_pywrapcp>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.linear_solver':['$<TARGET_FILE_NAME:_pywraplp>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.sat':['$<TARGET_FILE_NAME:_pywrapsat>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.graph':['$<TARGET_FILE_NAME:_pywrapgraph>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.algorithms':['$<TARGET_FILE_NAME:_pywrapknapsack_solver>']," >> setup.py
COMMAND ${CMAKE_COMMAND} -E echo " 'ortools.data':['$<TARGET_FILE_NAME:_pywraprcpsp>']," >> 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()