
# For find_package (Python)
cmake_minimum_required(VERSION 3.12)

find_package (Python COMPONENTS Interpreter Development)
if(NOT Python_FOUND)
    message(FATAL_ERROR "Could not find Python. Set RSGIS_PYTHON=OFF to disable.")
endif(NOT Python_FOUND)

if(APPLE)
    set(CMAKE_SHARED_LIBRARY_SUFFIX ".so")
endif(APPLE)

#set(PYRSGIS_ROOT_PATH "${Python_SITELIB}")
file(TO_CMAKE_PATH "${Python_SITELIB}" PYRSGIS_ROOT_PATH)
if(NOT MSVC AND NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
    # user has set CMAKE_INSTALL_PREFIX - ensure we install
    # under there rather than the default Python install location.
    # BUT we want to keep the last part of the path the same as Python_SITELIB
    # (ie the lib/pythonX.X/site-packages part)
    string(REPLACE "${_Python_PREFIX}" "${CMAKE_INSTALL_PREFIX}" PYRSGIS_ROOT_PATH "${PYRSGIS_ROOT_PATH}")
endif(NOT MSVC AND NOT CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
message(STATUS "installing Python libs to ${PYRSGIS_ROOT_PATH}")

#set(PYRSGIS_INSTALL_PATH "${PYRSGIS_ROOT_PATH}/rsgislib")
file(TO_CMAKE_PATH "${PYRSGIS_ROOT_PATH}/rsgislib" PYRSGIS_INSTALL_PATH)

include_directories(${Python_INCLUDE_DIRS})
include_directories(../src/cmds ../src)
link_directories(../src)

# copy all the .py files
install(DIRECTORY rsgislib DESTINATION "${PYRSGIS_ROOT_PATH}")

# _imagecalc
add_library(_imagecalc SHARED src/imagecalc.cpp)
if(APPLE)
    # see https://blog.tim-smith.us/2015/09/python-extension-modules-os-x/
    set_target_properties(_imagecalc PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imagecalc ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imagecalc ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imagecalc PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imagecalc PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imagecalc DESTINATION "${PYRSGIS_INSTALL_PATH}/imagecalc")

# _imageutils
add_library(_imageutils SHARED src/imageutils.cpp)
if(APPLE)
    set_target_properties(_imageutils PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imageutils ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imageutils ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imageutils PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imageutils PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imageutils DESTINATION "${PYRSGIS_INSTALL_PATH}/imageutils")

# _segmentation
add_library(_segmentation SHARED src/segmentation.cpp)
if(APPLE)
    set_target_properties(_segmentation PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_segmentation ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_segmentation ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_segmentation PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_segmentation PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _segmentation DESTINATION "${PYRSGIS_INSTALL_PATH}/segmentation")

# _segmentation
add_library(_imagecalibration SHARED src/imagecalibration.cpp)
if(APPLE)
    set_target_properties(_imagecalibration PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imagecalibration ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imagecalibration ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imagecalibration PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imagecalibration PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imagecalibration DESTINATION "${PYRSGIS_INSTALL_PATH}/imagecalibration")

# _rastergis
add_library(_rastergis SHARED src/rastergis.cpp)
if(APPLE)
    # see https://blog.tim-smith.us/2015/09/python-extension-modules-os-x/
    set_target_properties(_rastergis PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_rastergis ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_rastergis ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_rastergis PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_rastergis PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _rastergis DESTINATION "${PYRSGIS_INSTALL_PATH}/rastergis")

# _zonalstats
#add_library(_zonalstats SHARED src/zonalstats.cpp)
#if(APPLE)
#    set_target_properties(_zonalstats PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
#    target_link_libraries(_zonalstats ${RSGISLIB_CMDSINTERFACE_LIB_NAME})
#else()
#    target_link_libraries(_zonalstats ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES})
#endif(APPLE)
#set_target_properties(_zonalstats PROPERTIES PREFIX "")
#if(MSVC)
#    set_target_properties(_zonalstats PROPERTIES SUFFIX ".pyd")
#endif(MSVC)

#install(TARGETS _zonalstats DESTINATION "${PYRSGIS_INSTALL_PATH}/zonalstats")

# _imageregistration
add_library(_imageregistration SHARED src/imageregistration.cpp)
if(APPLE)
    set_target_properties(_imageregistration PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imageregistration ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imageregistration ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imageregistration PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imageregistration PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imageregistration DESTINATION "${PYRSGIS_INSTALL_PATH}/imageregistration")

# _vectorutils
add_library(_vectorutils SHARED src/vectorutils.cpp)
if(APPLE)
    set_target_properties(_vectorutils PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_vectorutils ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_vectorutils ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_vectorutils PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_vectorutils PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _vectorutils DESTINATION "${PYRSGIS_INSTALL_PATH}/vectorutils")

# _imagefilter
add_library(_imagefilter SHARED src/imagefilter.cpp)
if(APPLE)
    set_target_properties(_imagefilter PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imagefilter ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imagefilter ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imagefilter PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imagefilter PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imagefilter DESTINATION "${PYRSGIS_INSTALL_PATH}/imagefilter")

# _classification
add_library(_classification SHARED src/classification.cpp)
if(APPLE)
    set_target_properties(_classification PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_classification ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_classification ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_classification PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_classification PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _classification DESTINATION "${PYRSGIS_INSTALL_PATH}/classification")

# _elevation
add_library(_elevation SHARED src/elevation.cpp)
if(APPLE)
    set_target_properties(_elevation PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_elevation ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_elevation ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_elevation PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_elevation PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _elevation DESTINATION "${PYRSGIS_INSTALL_PATH}/elevation")

# _imagemorphology
add_library(_imagemorphology SHARED src/imagemorphology.cpp)
if(APPLE)
    set_target_properties(_imagemorphology PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_imagemorphology ${RSGISLIB_CMDSINTERFACE_LIB_NAME}) 
else()
    target_link_libraries(_imagemorphology ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES}) 
endif(APPLE)
set_target_properties(_imagemorphology PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_imagemorphology PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _imagemorphology DESTINATION "${PYRSGIS_INSTALL_PATH}/imagemorphology")


# _specunmixing
add_library(_specunmixing SHARED src/specunmixing.cpp)
if(APPLE)
    set_target_properties(_specunmixing PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
    target_link_libraries(_specunmixing ${RSGISLIB_CMDSINTERFACE_LIB_NAME})
else()
    target_link_libraries(_specunmixing ${RSGISLIB_CMDSINTERFACE_LIB_NAME} ${Python_LIBRARIES})
endif(APPLE)
set_target_properties(_specunmixing PROPERTIES PREFIX "")
if(MSVC)
    set_target_properties(_specunmixing PROPERTIES SUFFIX ".pyd")
endif(MSVC)

install(TARGETS _specunmixing DESTINATION "${PYRSGIS_INSTALL_PATH}/imagecalc/specunmixing")

# custom install step to create .pyc files
file(TO_CMAKE_PATH "${Python_EXECUTABLE}" SAFE_PYTHON_EXECUTABLE)
install(CODE "execute_process(COMMAND \"${SAFE_PYTHON_EXECUTABLE}\" -m compileall \"${PYRSGIS_INSTALL_PATH}\")")
