Files
ortools-clone/cmake/UseSWIG.cmake
2017-05-30 12:02:56 +05:30

239 lines
9.1 KiB
CMake

SET(SWIG_CXX_EXTENSION cxx)
SET(SWIG_EXTRA_LIBRARIES "")
SET(SWIG_PYTHON_EXTRA_FILE_EXTENSIONS .py)
SET(SWIG_JAVA_EXTRA_FILE_EXTENSIONS .java JNI.java)
MACRO(SWIG_MODULE_INITIALIZE NAME LANGUAGE)
STRING(TOUPPER "${LANGUAGE}" SWIG_UPPERCASE_LANGUAGE)
STRING(TOLOWER "${LANGUAGE}" SWIG_LOWERCASE_LANGUAGE)
SET(SWIG_MODULE_${NAME}_LANGUAGE ${SWIG_UPPERCASE_LANGUAGE})
SET(SWIG_MODULE_${NAME}_SWIG_LANGUAGE_FLAG ${SWIG_LOWERCASE_LANGUAGE})
SET(SWIG_MODULE_${NAME}_REAL_NAME ${NAME})
IF(";${CMAKE_SWIG_FLAGS};" MATCHES ";-noproxy;")
SET(SWIG_MODULE_${NAME}_NOPROXY TRUE)
ENDIF()
IF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xUNKNOWN")
MESSAGE(FATAL_ERROR "SWIG Error: Language \"${LANGUAGE}\" not found")
ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xPYTHON" AND NOT SWIG_MODULE_${NAME}_NOPROXY)
SET(SWIG_MODULE_${NAME}_REAL_NAME "_${NAME}")
ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xPERL")
SET(SWIG_MODULE_${NAME}_EXTRA_FLAGS "-shadow")
ELSEIF("x${SWIG_MODULE_${NAME}_LANGUAGE}" STREQUAL "xCSHARP")
SET(SWIG_MODULE_${NAME}_EXTRA_FLAGS "-dllimport;${NAME}")
ENDIF()
ENDMACRO()
MACRO(SWIG_GET_EXTRA_OUTPUT_FILES LANGUAGE OUTFILES GENERATEDPATH INFILE)
SET(${OUTFILES} "")
GET_SOURCE_FILE_PROPERTY(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename ${INFILE} SWIG_MODULE_NAME)
IF(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename STREQUAL "NOTFOUND")
IF(EXISTS ${INFILE})
FILE(STRINGS ${INFILE} _MODULE_NAME REGEX "[ ]*%module[ ]*[a-zA-Z0-9_]+.*")
ENDIF()
IF(_MODULE_NAME)
STRING(REGEX REPLACE "[ ]*%module[ ]*([a-zA-Z0-9_]+).*" "\\1" _MODULE_NAME "${_MODULE_NAME}")
SET(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${_MODULE_NAME}")
ELSE()
IF(EXISTS ${INFILE})
FILE(STRINGS ${INFILE} _MODULE_NAME REGEX "[ ]*%module[ ]*\\(.*\\)[ ]*[a-zA-Z0-9_]+.*")
ENDIF()
IF(_MODULE_NAME)
STRING(REGEX REPLACE "[ ]*%module[ ]*\\(.*\\)[ ]*([a-zA-Z0-9_]+).*" "\\1" _MODULE_NAME "${_MODULE_NAME}")
SET(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename "${_MODULE_NAME}")
ELSE()
GET_FILENAME_COMPONENT(SWIG_GET_EXTRA_OUTPUT_FILES_module_basename ${INFILE} NAME_WE)
ENDIF()
ENDIF()
ENDIF()
FOREACH(IT ${SWIG_${LANGUAGE}_EXTRA_FILE_EXTENSIONS})
SET(${OUTFILES} ${${OUTFILES}} "${GENERATEDPATH}/${SWIG_GET_EXTRA_OUTPUT_FILES_module_basename}${IT}")
ENDFOREACH()
ENDMACRO()
MACRO(SWIG_ADD_SOURCE_TO_MODULE NAME OUTFILES INFILE)
SET(SWIG_FULL_INFILE ${INFILE})
GET_FILENAME_COMPONENT(SWIG_SOURCE_FILE_NAME_WE "${INFILE}" NAME_WE)
GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_GENERATED ${INFILE} GENERATED)
GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_CPLUSPLUS ${INFILE} CPLUSPLUS)
GET_SOURCE_FILE_PROPERTY(SWIG_SOURCE_FILE_FLAGS ${INFILE} SWIG_FLAGS)
IF("${SWIG_SOURCE_FILE_FLAGS}" STREQUAL "NOTFOUND")
SET(SWIG_SOURCE_FILE_FLAGS "")
ENDIF()
GET_FILENAME_COMPONENT(SWIG_SOURCE_FILE_FULLNAME "${INFILE}" ABSOLUTE)
IF(CMAKE_SWIG_OUTDIR)
SET(SWIG_OUTDIR ${CMAKE_SWIG_OUTDIR})
ELSE()
SET(SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR})
ENDIF()
IF(SWIG_OUTFILE_DIR)
SET(SWIG_OUTFILE_DIR ${SWIG_OUTFILE_DIR})
ELSE()
SET(SWIG_OUTFILE_DIR ${SWIG_OUTDIR})
ENDIF()
IF(NOT SWIG_MODULE_${NAME}_NOPROXY)
SWIG_GET_EXTRA_OUTPUT_FILES(${SWIG_MODULE_${NAME}_LANGUAGE}
SWIG_EXTRA_GENERATED_FILES
"${SWIG_OUTDIR}" "${SWIG_SOURCE_FILE_FULLNAME}")
ENDIF()
SET(SWIG_GENERATED_FILE_FULLNAME "${SWIG_OUTFILE_DIR}/${SWIG_SOURCE_FILE_NAME_WE}")
STRING(APPEND SWIG_GENERATED_FILE_FULLNAME "${SWIG_MODULE_${NAME}_LANGUAGE}_wrap")
IF(SWIG_SOURCE_FILE_CPLUSPLUS)
STRING(APPEND SWIG_GENERATED_FILE_FULLNAME ".${SWIG_CXX_EXTENSION}")
ELSE()
STRING(APPEND SWIG_GENERATED_FILE_FULLNAME ".c")
ENDIF()
GET_DIRECTORY_PROPERTY(CMAKE_INCLUDE_DIRECTORIES INCLUDE_DIRECTORIES)
LIST(REMOVE_DUPLICATES CMAKE_INCLUDE_DIRECTORIES)
SET(SWIG_INCLUDE_DIRS)
FOREACH(IT ${CMAKE_INCLUDE_DIRECTORIES})
SET(SWIG_INCLUDE_DIRS ${SWIG_INCLUDE_DIRS} "-I${IT}")
ENDFOREACH()
SET(SWIG_SPECIAL_FLAGS)
IF(SWIG_SOURCE_FILE_CPLUSPLUS)
SET(SWIG_SPECIAL_FLAGS ${SWIG_SPECIAL_FLAGS} "-c++")
ENDIF()
SET(SWIG_EXTRA_FLAGS)
IF(SWIG_MODULE_${NAME}_EXTRA_FLAGS)
SET(SWIG_EXTRA_FLAGS ${SWIG_EXTRA_FLAGS} ${SWIG_MODULE_${NAME}_EXTRA_FLAGS})
ENDIF()
ADD_CUSTOM_COMMAND(
OUTPUT "${SWIG_GENERATED_FILE_FULLNAME}" ${SWIG_EXTRA_GENERATED_FILES}
COMMAND ${CMAKE_COMMAND} -E make_directory ${SWIG_OUTDIR}
COMMAND "${SWIG_EXECUTABLE}"
ARGS "-${SWIG_MODULE_${NAME}_SWIG_LANGUAGE_FLAG}"
${SWIG_SOURCE_FILE_FLAGS}
${CMAKE_SWIG_FLAGS}
-outdir ${SWIG_OUTDIR}
${SWIG_SPECIAL_FLAGS}
${SWIG_EXTRA_FLAGS}
${SWIG_INCLUDE_DIRS}
-o "${SWIG_GENERATED_FILE_FULLNAME}"
-module "${NAME}"
"${SWIG_SOURCE_FILE_FULLNAME}"
MAIN_DEPENDENCY "${SWIG_SOURCE_FILE_FULLNAME}"
DEPENDS ${SWIG_MODULE_${NAME}_EXTRA_DEPS}
IMPLICIT_DEPENDS CXX "${SWIG_SOURCE_FILE_FULLNAME}"
COMMENT "Swig source")
SET_SOURCE_FILES_PROPERTIES("${SWIG_GENERATED_FILE_FULLNAME}"
${SWIG_EXTRA_GENERATED_FILES} PROPERTIES GENERATED TRUE)
SET(${OUTFILES} "${SWIG_GENERATED_FILE_FULLNAME}" ${SWIG_EXTRA_GENERATED_FILES})
ENDMACRO()
MACRO(SWIG_ADD_LIBRARY NAME)
SET(OPTIONS "")
SET(ONEVALUEARGS LANGUAGE TYPE)
SET(MULTIVALUEARGS SOURCES)
CMAKE_PARSE_ARGUMENTS(_SAM "${OPTIONS}" "${ONEVALUEARGS}" "${MULTIVALUEARGS}" ${ARGN})
IF(NOT DEFINED _SAM_LANGUAGE)
MESSAGE(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing LANGUAGE argument")
ENDIF()
IF(NOT DEFINED _SAM_SOURCES)
MESSAGE(FATAL_ERROR "SWIG_ADD_LIBRARY: Missing SOURCES argument")
ENDIF()
IF(NOT DEFINED _SAM_TYPE)
SET(_SAM_TYPE MODULE)
ELSEIF("${_SAM_TYPE}" STREQUAL "USE_BUILD_SHARED_LIBS")
UNSET(_SAM_TYPE)
ENDIF()
SWIG_MODULE_INITIALIZE(${NAME} ${_SAM_LANGUAGE})
SET(SWIG_DOT_I_SOURCES)
SET(SWIG_OTHER_SOURCES)
FOREACH(IT ${_SAM_SOURCES})
IF(${IT} MATCHES "\\.i$")
SET(SWIG_DOT_I_SOURCES ${SWIG_DOT_I_SOURCES} "${IT}")
ELSE()
SET(SWIG_OTHER_SOURCES ${SWIG_OTHER_SOURCES} "${IT}")
ENDIF()
ENDFOREACH()
SET(SWIG_GENERATED_SOURCES)
FOREACH(IT ${SWIG_DOT_I_SOURCES})
SWIG_ADD_SOURCE_TO_MODULE(${NAME} SWIG_GENERATED_SOURCE ${IT})
SET(SWIG_GENERATED_SOURCES ${SWIG_GENERATED_SOURCES} "${SWIG_GENERATED_SOURCE}")
ENDFOREACH()
GET_DIRECTORY_PROPERTY(SWIG_EXTRA_CLEAN_FILES ADDITIONAL_MAKE_CLEAN_FILES)
SET_DIRECTORY_PROPERTIES(PROPERTIES
ADDITIONAL_MAKE_CLEAN_FILES "${SWIG_EXTRA_CLEAN_FILES};${SWIG_GENERATED_SOURCES}")
ADD_LIBRARY(${SWIG_MODULE_${NAME}_REAL_NAME} ${_SAM_TYPE} ${SWIG_GENERATED_SOURCES} ${SWIG_OTHER_SOURCES})
IF("${_SAM_TYPE}" STREQUAL "MODULE")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES NO_SONAME ON)
ENDIF()
STRING(TOLOWER "${_SAM_LANGUAGE}" SWIG_LOWERCASE_LANGUAGE)
IF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "octave")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".oct")
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "go")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "java")
IF(APPLE)
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".jnilib")
ENDIF(APPLE)
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "lua")
IF("${_SAM_TYPE}" STREQUAL "MODULE")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
ENDIF()
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "python")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
IF(WIN32 AND NOT CYGWIN)
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".pyd")
ENDIF()
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "r")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
ELSEIF("${SWIG_LOWERCASE_LANGUAGE}" STREQUAL "ruby")
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
IF(APPLE)
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES SUFFIX ".bundle")
ENDIF(APPLE)
ELSE()
SET_TARGET_PROPERTIES(${SWIG_MODULE_${NAME}_REAL_NAME} PROPERTIES PREFIX "")
ENDIF()
ENDMACRO()
MACRO(SWIG_LINK_LIBRARIES NAME)
IF(SWIG_MODULE_${NAME}_REAL_NAME)
TARGET_LINK_LIBRARIES(${SWIG_MODULE_${NAME}_REAL_NAME} ${ARGN})
ELSE()
MESSAGE(SEND_ERROR "Can not find Swig library \"${NAME}\".")
ENDIF()
ENDMACRO()