# See ../CMakeLists.txt for info on staged-plugins* and clean-staged-plugins targets
#
# When developing on a plugin, use the following make targets:
#   staged-[plugin_dir_name] - stage specific plugin, regenerating any changed resources
#   clean-staged-[plugin_dir_name] - removes the plugin directory and its contents
#
# NOTE: regular project 'make install' is unaffected

FILE(WRITE ${CMAKE_BINARY_DIR}/stagecount 0)

IF(ENABLE_QT5)
  # The target port-plugins acts as a container for all port-plugin-XXX targets
  # Each port-plugin-XXX target will run scripts/2to3 on a plugin and migrate
  # Python 3 and Qt 5 code.
  SET (PORT_PLUGINS FALSE CACHE BOOL "Determines whether python plugins in staged or installed locations should be migrated to Python 3 and Qt 5")
  IF(PORT_PLUGINS)
    ADD_CUSTOM_TARGET(port-plugins ALL)
  ELSE(PORT_PLUGINS)
    ADD_CUSTOM_TARGET(port-plugins)
  ENDIF(PORT_PLUGINS)
ENDIF(ENABLE_QT5)

MACRO (PLUGIN_INSTALL plugin subdir )
  FILE(READ ${CMAKE_BINARY_DIR}/stagecount n)
  MATH(EXPR n "${n}+1")
  FILE(WRITE ${CMAKE_BINARY_DIR}/stagecount ${n})

  # regular project build's install command and target
  INSTALL(FILES ${ARGN} DESTINATION ${QGIS_DATA_DIR}/python/plugins/${plugin}/${subdir})

  SET(_cmake ${CMAKE_BINARY_DIR}/python/plugins/${plugin}/stageinstall.cmake)

  IF(NOT TARGET zzz-${plugin}-stageinstall)
    ADD_CUSTOM_TARGET(zzz-${plugin}-stageinstall)
    ADD_CUSTOM_TARGET(zzz-${plugin}-depend)
    ADD_DEPENDENCIES(zzz-${plugin}-stageinstall zzz-${plugin}-depend)

    ADD_CUSTOM_COMMAND(TARGET zzz-${plugin}-stageinstall
      COMMAND ${CMAKE_COMMAND} -P ${_cmake}
    )

    ADD_CUSTOM_TARGET(clean-staged-${plugin}
      COMMAND ${CMAKE_COMMAND} -E remove_directory ${PYTHON_OUTPUT_DIRECTORY}/plugins/${plugin}
    )

    ADD_DEPENDENCIES(staged-plugins zzz-${plugin}-stageinstall)
    ADD_CUSTOM_TARGET(staged-${plugin} DEPENDS zzz-${plugin}-stageinstall)
    FILE(WRITE ${_cmake} "")

    IF(ENABLE_QT5)
      ADD_CUSTOM_TARGET(port-plugin-${plugin})
      PY_2TO3(port-plugin-${plugin} ${PYTHON_OUTPUT_DIRECTORY}/plugins/${plugin})
      ADD_DEPENDENCIES(port-plugins port-plugin-${plugin})
      ADD_DEPENDENCIES(port-plugin-${plugin} staged-${plugin})
    ENDIF(ENABLE_QT5)
  ENDIF(NOT TARGET zzz-${plugin}-stageinstall)

  ADD_CUSTOM_TARGET(zzz-${plugin}-${n}-depend DEPENDS ${ARGN})
  ADD_DEPENDENCIES(zzz-${plugin}-depend zzz-${plugin}-${n}-depend)

  FILE(APPEND ${_cmake} "FILE(MAKE_DIRECTORY \"${PYTHON_OUTPUT_DIRECTORY}/plugins/${plugin}/${subdir}\")
")

  FOREACH(file ${ARGN})
    GET_FILENAME_COMPONENT(_file "${file}" ABSOLUTE)
    FILE(APPEND ${_cmake} "FILE(COPY \"${_file}\" DESTINATION \"${PYTHON_OUTPUT_DIRECTORY}/plugins/${plugin}/${subdir}\")
")
  ENDFOREACH(file)
ENDMACRO (PLUGIN_INSTALL)

ADD_CUSTOM_TARGET(staged-plugins-copy-init-py ALL DEPENDS staged-plugins)

# Dummy file to stage to output/python/plugins for testing purposes
ADD_CUSTOM_COMMAND(TARGET staged-plugins-copy-init-py
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory "${PYTHON_OUTPUT_DIRECTORY}/plugins"
    COMMAND ${CMAKE_COMMAND} -E copy __init__.py "${PYTHON_OUTPUT_DIRECTORY}/plugins"
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    DEPENDS __init__.py
)

ADD_SUBDIRECTORY(GdalTools)
ADD_SUBDIRECTORY(db_manager)
ADD_SUBDIRECTORY(processing)
ADD_SUBDIRECTORY(MetaSearch)

PY_COMPILE(staged-plugins "${PYTHON_OUTPUT_DIRECTORY}/plugins")
