# Set SWIG module name
set(SWIG_MODULE_NAME SyFi)

# Set SWIG flags
set(CMAKE_SWIG_FLAGS
  -module ${SWIG_MODULE_NAME}
  -shadow
  -modern
  -modernargs
  -fastdispatch
  -fvirtual
  -nosafecstrings
  -noproxydel
  -fastproxy
  -fastinit
  -fastunpack
  -fastquery
  -nobuildnone
  ${SYFI_CXX_DEFINITIONS}
  )
set(CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR})

# Add needed include directories
include_directories(
  ${PYTHON_INCLUDE_DIRS}
  ${NUMPY_INCLUDE_DIRS}
)

# Get all SWIG interface files
file(GLOB SYFI_SWIG_INTERFACE_FILES "*.i")

# Set GiNaC version number in SWIG source file
string(REGEX REPLACE "([^ ])..?..?" "\\1" GINACLIB_MAJOR_VERSION "${GINAC_VERSION}")
string(REGEX REPLACE ".?.([^ ])..?" "\\1" GINACLIB_MINOR_VERSION "${GINAC_VERSION}")
string(REGEX REPLACE ".?..?.([^ ])" "\\1" GINACLIB_MICRO_VERSION "${GINAC_VERSION}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SyFi.i.in ${CMAKE_CURRENT_BINARY_DIR}/SyFi.i @ONLY)

# Set SWIG source file
set(SWIG_SOURCES ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_MODULE_NAME}.i)
set_source_files_properties(${SWIG_SOURCES} PROPERTIES CPLUSPLUS ON)

# Remove '-Werror' and '-Wall' flags (if present) when compiling SWIG-generated files
string(REGEX REPLACE "-Wall" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "-Wall" " " CMAKE_CXX_FLAGS_DEVELOPER "${CMAKE_CXX_FLAGS_DEVELOPER}")
string(REGEX REPLACE "-Werror=format-security" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "-Werror=format-security" " " CMAKE_CXX_FLAGS_DEVELOPER "${CMAKE_CXX_FLAGS_DEVELOPER}")
string(REGEX REPLACE "-Werror" " " CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REGEX REPLACE "-Werror" " " CMAKE_CXX_FLAGS_DEVELOPER "${CMAKE_CXX_FLAGS_DEVELOPER}")

# The prevents swig being run unnecessarily
set_source_files_properties(${SWIG_SOURCES} PROPERTIES SWIG_MODULE_NAME ${SWIG_MODULE_NAME})

# Tell CMake which SWIG interface files should be checked for changes when recompile
set(SWIG_MODULE_${SWIG_MODULE_NAME}_EXTRA_DEPS
  ${SYFI_SWIG_INTERFACE_FILES}
  ${CMAKE_SOURCE_DIR}/syfi/SyFi.h
  )

swig_add_module(${SWIG_MODULE_NAME} python ${SWIG_SOURCES})
swig_link_libraries(${SWIG_MODULE_NAME} syfi ${SYFI_TARGET_LINK_LIBRARIES} ${PYTHON_LIBRARIES})

# Install Python .py files
get_target_property(SWIG_MODULE_LOCATION ${SWIG_MODULE_${SWIG_MODULE_NAME}_REAL_NAME} LOCATION)
install(FILES
  ${SWIG_MODULE_LOCATION} ${CMAKE_CURRENT_BINARY_DIR}/${SWIG_MODULE_NAME}.py
  DESTINATION ${SYFI_PYTHON_EXT_DIR}/
  COMPONENT RuntimeLibraries
  )

# Install SWIG interface files
install(FILES ${SYFI_SWIG_INTERFACE_FILES}
  DESTINATION ${SYFI_INCLUDE_DIR}/SyFi/swig
  COMPONENT Development
  )
