# Debian-specific stuff
Set(CMAKE_DEBIAN_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
Set(CPACK_DEBIAN_PACKAGE_SECTION "science")
Set(CPACK_DEBIAN_PACKAGE_NAME "mgx")

# Separate packages for Linux
Set(CPACK_DEB_COMPONENT_INSTALL ON)
Set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP)
Get_CMake_Property(CPACK_COMPONENTS_ALL COMPONENTS)

# Check that we don't have any Unspecified components.
# (This isn't fatal, but they should be put into a component.)
List(FIND CPACK_COMPONENTS_ALL "Unspecified" _index)
If(${_index} GREATER -1)
  Message(WARNING "Some installed files do not have a Component")
EndIf()

ForEach(_comp ${CPACK_COMPONENTS_ALL})
  If(NOT _comp STREQUAL "MGXUCNN")
    String(TOUPPER ${_comp} _compU)
    Set(CPACK_COMPONENT_${_compU}_GROUP "mgx")
  EndIf()
EndForEach()
Set(CPACK_COMPONENT_MGXUCNN_GROUP "mgx-cnn")

Set(CPACK_DEBIAN_MGX_PACKAGE_NAME "mgx")
String(REPLACE "-CNN" "" _file_name_no_cnn ${CPACK_PACKAGE_FILE_NAME})
Set(CPACK_DEBIAN_MGX_FILE_NAME "${_file_name_no_cnn}.deb")

If(BUILD_CNN)
  Set(CPACK_DEBIAN_MGX-CNN_PACKAGE_NAME "mgx-cnn")
  Set(CPACK_DEBIAN_MGX-CNN_PACKAGE_DEPENDS "mgx")
  Set(CPACK_DEBIAN_MGX-CNN_PACKAGE_RECOMMENDS "mgx")
  Set(CPACK_DEBIAN_MGX-CNN_FILE_NAME "${CPACK_PACKAGE_NAME}${ARCH32}-${MGX_VERSION}.${MGX_REVISION}-${MGX_OS}${MGX_OS_RELEASE}-${MGX_BACKEND}-CNN.deb")
EndIf()

# These are set for all versions, not sure if all these are correct for older versions
Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "xdg-utils, libqt5widgets5, libqt5opengl5, libqt5xml5, libqt5printsupport5, libtbb2, libtriangle-1.6")
Set(CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS "libtbb2") # need to put something in here
If(${MGX_OS} STREQUAL "Debian")
  String(REGEX MATCH "([0-9]+)" DEBIAN_MAJOR ${MGX_OS_RELEASE})
  If(${DEBIAN_MAJOR} STREQUAL "8")
    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libcgal10")
  ElseIf(${DEBIAN_MAJOR} STREQUAL "9")
    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libgsl23, libcgal12")
  ElseIf(${DEBIAN_MAJOR} STREQUAL "10")
    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libgsl23")
  Else()
    Message(WARNING "Unsupported Debian version ${DEBIAN_MAJOR}; dependencies may not be accurate.")
  EndIf()
ElseIf(${MGX_OS} STREQUAL "LinuxMint" OR ${MGX_OS} STREQUAL "Linuxmint" OR ${MGX_OS} STREQUAL "Ubuntu")
  If(${MGX_OS} STREQUAL "LinuxMint" OR ${MGX_OS} STREQUAL "Linuxmint") # For Mint just translate to Ubuntu
    String(REGEX MATCH "([0-9]+)" MINT_MAJOR ${MGX_OS_RELEASE})
    If(${MINT_MAJOR} STREQUAL "18")
      Set(UBUNTU_MAJOR "16")
    ElseIf(${MINT_MAJOR} STREQUAL "19")
      Set(UBUNTU_MAJOR "18")
    ElseIf(${MINT_MAJOR} STREQUAL "20")
      Set(UBUNTU_MAJOR "20")
    Else()
      Message(WARNING "Unsupported Mint version ${MINT_MAJOR}; dependencies may not be accurate.")
    EndIf()
  Else()
	  String(REGEX MATCH "([0-9]+)" UBUNTU_MAJOR ${MGX_OS_RELEASE})
  Endif()
  If(${UBUNTU_MAJOR} STREQUAL "16")

    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libgsl2, libcgal11v5")
  ElseIf(${UBUNTU_MAJOR} STREQUAL "18")
    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libgsl23, libcgal13")
  ElseIf(${UBUNTU_MAJOR} STREQUAL "20")
    Set(CPACK_DEBIAN_MGX_PACKAGE_DEPENDS "${CPACK_DEBIAN_MGX_PACKAGE_DEPENDS}, libgsl23") # GCal is now a header only library
    If(BUILD_CNN)
	    Set(CPACK_DEBIAN_MGX-CNN_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_MGX-CNN_PACKAGE_RECOMMENDS}, libcudnn8, libopenmpi3")
    EndIf() 
    If(BUILD_HDF)
	    Set(CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS}, libhdf5-cpp-103")
    EndIf() 
  Else()
    Message(FATAL_ERROR "Unsupported Ubuntu version: ${UBUNTU_MAJOR}")
  EndIf()
Else()
  Message(WARNING "Unsupported OS ${MGX_OS}; dependencies may not be accurate.")
EndIf()
If(BUILD_MGX2R)
	Set(CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS}, r-cran-rinside")
EndIf()
If(PYTHON_COMPILE) # RSS FIXME Should be BUILD_PYTHON
	Set(CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS "${CPACK_DEBIAN_MGX_PACKAGE_RECOMMENDS}, python2.7")
EndIf()

Set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS FALSE CACHE BOOL
  "Use dpkg-shlibdeps to auto-detect Debian dependencies")
Set(DEB_POSTINST  # install icons and MIME types
  "#!/bin/bash
   xdg-icon-resource install --mode system --size 64 \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/Icon64.png\" morphographx-MorphoGraphX
   xdg-icon-resource install --mode system --size 22 \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/Icon22.png\" morphographx-MorphoGraphX
   xdg-desktop-menu install --mode system \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/morphographx-MorphoGraphX.desktop\"
   xdg-mime install --mode system \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/morphographx-MorphoGraphX.xml\"
   xdg-icon-resource install --mode system --context mimetypes --size 48 \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/FileIcon.png\" application-morphographx.mgxv
   xdg-icon-resource install --mode system --context mimetypes --size 48 \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/StackIcon.png\" application-morphographx.mgxs
   xdg-icon-resource install --mode system --context mimetypes --size 48 \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/MeshIcon.png\" application-morphographx.mgxm
   ldconfig")
Set(DEB_PRERM  # uninstall icons and MIME types
  "#!/bin/bash
   xdg-icon-resource uninstall --mode system --size 64 morphographx-MorphoGraphX
   xdg-icon-resource uninstall --mode system --size 22 morphographx-MorphoGraphX
   xdg-desktop-menu uninstall --mode system \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/morphographx-MorphoGraphX.desktop\"
   xdg-mime uninstall --mode system \"${CPACK_PACKAGING_INSTALL_PREFIX}/share/MorphoGraphX/morphographx-MorphoGraphX.xml\"
   xdg-icon-resource uninstall --mode system --context mimetypes --size 48 application-morphographx.mgxv
   xdg-icon-resource uninstall --mode system --context mimetypes --size 48 application-morphographx.mgxs
   xdg-icon-resource uninstall --mode system --context mimetypes --size 48 application-morphographx.mgxm")
File(WRITE ${CMAKE_BINARY_DIR}/postinst "${DEB_POSTINST}")
File(WRITE ${CMAKE_BINARY_DIR}/prerm "${DEB_PRERM}")
Set(CPACK_DEBIAN_MGX_PACKAGE_CONTROL_EXTRA
  "${CMAKE_BINARY_DIR}/postinst;${CMAKE_BINARY_DIR}/prerm")

Set(CPACK_GENERATOR "DEB")
Set(CPACK_SOURCE_GENERATOR "TGZ")

Include(CPack)

