## #################################################################
## Generated by dtkPluginGenerator
## #################################################################

if(CMAKE_VERSION VERSION_LESS "3.19")
  cmake_minimum_required(VERSION 2.8.12)
else()
  cmake_minimum_required(VERSION 3.1...3.10)
endif()

if(POLICY CMP0048)# CMake 3.0
cmake_policy(SET CMP0011 NEW)
cmake_policy(SET CMP0042 NEW)
cmake_policy(SET CMP0048 NEW)
endif()

if(POLICY CMP0043)# CMake 3.1
cmake_policy(SET CMP0043 NEW)
endif()

project(gsAxlPlugin)

set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)
set(CMAKE_AUTOMOC ON)

######################################################################
# Check dependencies for axl plugin
######################################################################

find_package (dtk REQUIRED)
include_directories(${dtk_INCLUDE_DIRS})

#find_package (Qt4 REQUIRED)
find_package (Qt5Core REQUIRED)
set (QT_USE_QTXML 1)
set (QT_USE_QTOPENGL 1)
#include (${QT_USE_FILE})
add_definitions (${QT_DEFINITIONS})
add_definitions (-DQT_PLUGIN)
add_definitions (-DQT_SHARED)
add_definitions (-DQT_NO_DEBUG)

#set (QT_QMAKE_EXECUTABLE %which_qmake/qmake%)

include_directories (${QT_INCLUDE_DIR})
link_directories    (${QT_LIBRARY_DIR})
link_libraries      (${QT_LIBRARIES}  )

if (NOT AXL_USED AND NOT AXL_FOUND)
   if (NOT DEFINED Axl_DIR)
      set (Axl_DIR "../../axl")
   endif (NOT DEFINED Axl_DIR)
   find_package (Axl REQUIRED)
endif (NOT AXL_USED AND NOT AXL_FOUND)

if (AXL_FOUND OR AXL_USED)
  include_directories (${AXL_INCLUDE_DIR})
   set (${PKG_NAME}_INCLUDE_DIR ${${PKG_NAME}_INCLUDE_DIR} ${AXL_INCLUDE_DIR}  CACHE STRING "" FORCE)
   link_directories (${AXL_LIBRARY_DIR})
   set (${PKG_NAME}_LIBRARY_DIR ${${PKG_NAME}_LIBRARY_DIR} ${AXL_LIBRARY_DIR}      CACHE STRING "" FORCE)
   link_libraries (${AXL_LIBRARIES})
   set (${PKG_NAME}_LIBRARIES   ${${PKG_NAME}_LIBRARIES}   ${AXL_LIBRARIES}   CACHE STRING "" FORCE)
endif (AXL_FOUND OR AXL_USED)

## #################################################################
## Export header file
## #################################################################

#add_compiler_export_flags()

#generate_export_header(${PROJECT_NAME}
#  EXPORT_FILE_NAME "${PROJECT_NAME}Export.h")

#add_custom_command(TARGET ${PROJECT_NAME} PRE_BUILD
#  COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}Export.h" "${CMAKE_BINARY_DIR}"
# COMMAND ${CMAKE_COMMAND} ARGS -E copy_if_different "${${PROJECT_NAME}_BINARY_DIR}/${PROJECT_NAME}Export.h" "${CMAKE_BINARY_DIR}/${PROJECT_NAME}Export")

## #################################################################
## Input
## #################################################################

set(${PROJECT_NAME}_HEADERS_MOC # All except from PluginExport.h
  gsAxelPlugin.h
  gsBasisData.h
  gsBasisConverter.h
  gsMultiPatchData.h
  gsGeometryDialog.h
  gsGeometryCreator.h # Dialog
  gsGeometryConverter.h # not used
  gsReaderXml.h
  gsReaderAxl.h
  gsWriter.h
)

set(${PROJECT_NAME}_HEADERS 
  gsAxelPluginExport.h
  gsGeometryData.h
  #gsGeometryData.hpp
 ${${PROJECT_NAME}_HEADERS_MOC}
 ${gismo_HEADERS}
  )

set(${PROJECT_NAME}_SOURCES
  gsAxelPlugin.cpp
  gsBasisData.cpp
  gsMultiPatchData.cpp
  gsBasisConverter.cpp
  gsGeometryData.cpp
  gsGeometryDialog.cpp
  gsGeometryCreator.cpp
  gsGeometryConverter.cpp
  gsReaderXml.cpp
  gsReaderAxl.cpp
  gsWriter.cpp
  QDialogEditCP.cpp
)


## #################################################################
## Build rules
## #################################################################

set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plAxl)

#qt4_wrap_cpp(${PROJECT_NAME}_SOURCES_MOC ${${PROJECT_NAME}_HEADERS_MOC})

#to do: replace by macro
#if( (NOT GISMO_BUILD_LIB) )
#    set(${PROJECT_NAME}_SOURCES
#        ${${PROJECT_NAME}_SOURCES} ${gismo_SOURCES} ${gismo_EXTENSIONS} )
#endif()

#message("axl--->  ${AXL_INCLUDE_DIR} , ${AXL_LIBRARY_DIR} ")
link_directories(${AXL_LIBRARY_DIR} ${AXL_LIBRARY_DIR}64)

add_library(${PROJECT_NAME} SHARED
  ${${PROJECT_NAME}_SOURCES_MOC} 
  ${${PROJECT_NAME}_SOURCES}
)
  
# This target is a plugin, so we hook it to the grouping target
add_dependencies(plugins ${PROJECT_NAME})

target_link_libraries(${PROJECT_NAME}
  ${gismo_LINKER}
  #${QT_LIBRARIES}
  #dtkGui
  #dtkCore
  dtkGuiSupport
  dtkCoreSupport 
  dtkLog
  #axlCore
  #axlGui
  )

qt5_use_modules(${PROJECT_NAME} Quick)
qt5_use_modules(${PROJECT_NAME} Network)
#qt5_use_modules(${PROJECT_NAME} Declarative) #deprecated
qt5_use_modules(${PROJECT_NAME} Xml)
qt5_use_modules(${PROJECT_NAME} Core)
qt5_use_modules(${PROJECT_NAME} Gui)
qt5_use_modules(${PROJECT_NAME} OpenGL)
qt5_use_modules(${PROJECT_NAME} Widgets)


set_target_properties(${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON)

if( GISMO_BUILD_LIB )
  target_link_libraries(${PROJECT_NAME} gismo_static)
#  target_link_libraries(${PROJECT_NAME} gismo)
endif()

#message("Axl plugins directory: ${AXL_PLUGIN_DIR}")

# note: policy CMP0026: The LOCATION property should not be read from target
#get_property(gsAxelPlugin_location TARGET ${PROJECT_NAME} PROPERTY LOCATION)
ADD_CUSTOM_COMMAND(
    TARGET ${PROJECT_NAME}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${PROJECT_NAME}> ${AXL_PLUGIN_DIR}
    COMMAND ${CMAKE_COMMAND} -E echo 'The plugin has been copied to ${AXL_PLUGIN_DIR}.'
    )

## #################################################################
## Install rules
## #################################################################

install(TARGETS ${PROJECT_NAME}
  RUNTIME DESTINATION include/gismo/plugins
  LIBRARY DESTINATION include/gismo/plugins
  ARCHIVE DESTINATION include/gismo/plugins)


##########CPACK
  set(CPACK_PACKAGE_VENDOR "MyCompany")
  #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/README.txt)
  set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PROJECT_NAME})
  set(CPACK_PACKAGE_DESCRIPTION ${PROJECT_NAME})
 # set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/COPYING.txt)

  set (CPACK_PACKAGE_VERSION ${PROJECT_AXL_VERSION})
  set (CPACK_PACKAGE_CONTACT "contact@mycompany.com")
  set (CPACK_PACKAGE_SUMMARY ${PROJECT_NAME})
  set (CPACK_PACKAGE_DEFAULT_LOCATION "${PROJECT_SOURCE_DIR}")
  set (CPACK_SOURCE_INSTALLED_DIRECTORIES "${PROJECT_SOURCE_DIR};.")
  set (CPACK_BINARY_STGZ "ON")
  set (CPACK_BINARY_TBZ2 "OFF")
  set (CPACK_BINARY_TGZ "ON")
  set (CPACK_BINARY_TZ "ON")
  set (CPACK_GENERATOR "")
  set (CPACK_SOURCE_GENERATOR "TGZ;STGZ")

  if( BUILD_FOR_RELEASE)
  set (CPACK_INSTALL_PREFIX "/usr/local")
  endif ( BUILD_FOR_RELEASE)

if(WIN32)
    set (CPACK_PACKAGING_INSTALL_PREFIX "")
    set (CPACK_PACKAGE_INSTALL_DIRECTORY "axl-sdk 2.2.0")
    set (CPACK_PACKAGE_INSTALL_REGISTRY_KEY ${PROJECT_NAME}-${PROJECT_AXL_VERSION})
    set (CPACK_GENERATOR "NSIS")
    set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} MyPlugin")
    #set(CPACK_NSIS_MODIFY_PATH ON) # Choice to add prog dir to the system PATH
    set (CPACK_PACKAGE_FILE_NAME MyPlugin-${PROJECT_AXL_VERSION}-${PROJECT_VERSION}-win32-x86)
endif (WIN32)

if(UNIX AND NOT APPLE)
  if( BUILD_FOR_RELEASE)
        set (CPACK_PACKAGING_INSTALL_PREFIX  "/usr/local")
  endif( BUILD_FOR_RELEASE)

  set (CPACK_RPM_PACKAGE_DEBUG     0)
  set (CPACK_PACKAGE_FILE_NAME MyPlugin-${PROJECT_AXL_VERSION}-${PROJECT_VERSION}-fc16.x86_64)
  set (CPACK_GENERATOR "${CPACK_GENERATOR};RPM")
endif(UNIX AND NOT APPLE)

set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}-src")

if (APPLE)
add_custom_command (OUTPUT ${CMAKE_BINARY_DIR}/.deploy
                   COMMAND ${Axl_DIR}/dtk/bin/dtkDeploy ${Axl_DIR}/bin/axl.app -inject=${CMAKE_BINARY_DIR}/plugins
                   WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )

add_custom_command (OUTPUT ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.dmg
                    COMMAND /usr/bin/hdiutil create -fs HFS+ -srcfolder ${Axl_DIR}/bin/axl.app/ -volname Axl ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.dmg
                    WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )

add_custom_command (OUTPUT ${CMAKE_BINARY_DIR}/.clean_dmg
                   COMMAND if test -f ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.dmg \; then rm   ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.dmg\; fi
                   WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
add_custom_target (clean_dmg
                    DEPENDS ${CMAKE_BINARY_DIR}/.clean_dmg
                    COMMENT "Cleaning dmg file(s)")

add_custom_target (dmg
                    DEPENDS ${CMAKE_BINARY_DIR}/${PROJECT_NAME}-${PROJECT_VERSION}.dmg  ${CMAKE_BINARY_DIR}/.deploy
                    COMMENT "update the packages")
endif (APPLE)
include (CPack)

