Added cmake support for C++, initial python build support
This commit is contained in:
239
cmake/UseSWIG.cmake
Normal file
239
cmake/UseSWIG.cmake
Normal file
@@ -0,0 +1,239 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user