diff --git a/mo2.cmake b/mo2.cmake index 2c6e0d8..877c592 100644 --- a/mo2.cmake +++ b/mo2.cmake @@ -41,6 +41,7 @@ set(QT_TARGETS_FOLDER autogen) include(${CMAKE_CURRENT_LIST_DIR}/mo2_cpp.cmake) include(${CMAKE_CURRENT_LIST_DIR}/mo2_python.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/mo2_extension.cmake) # mark as included set(MO2_DEFINED true) diff --git a/mo2_extension.cmake b/mo2_extension.cmake new file mode 100644 index 0000000..8d69713 --- /dev/null +++ b/mo2_extension.cmake @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.16) + +#! mo2_configure_extension : configure a MO2 extension +# +# this function read the extension identifier from the metadata.json file and +# expose it as a ${extension_identifier} variable +# +# this function also trigger the installation of the metadata file to the +# extension directory +# +function(mo2_configure_extension) + set(METADATA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/metadata.json) + + if(NOT (EXISTS ${METADATA_FILE})) + message(ERROR "metadata file ${METADATA_FILE} not found") + endif() + + file(READ ${METADATA_FILE} JSON_METADATA) + string(JSON extension_identifier GET ${JSON_METADATA} id) + string(JSON extension_icon ERROR_VARIABLE extension_icon_error GET ${JSON_METADATA} icon) + + set(MO2_EXTENSION_ID ${extension_identifier} PARENT_SCOPE) + install(FILES ${METADATA_FILE} + DESTINATION ${MO2_INSTALL_BIN}/extensions/${extension_identifier}/) + + if (NOT ${extension_icon} MATCHES "icon-NOTFOUND") + install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${extension_icon} + DESTINATION ${MO2_INSTALL_BIN}/extensions/${extension_identifier}/) + endif() + +endfunction() diff --git a/mo2_python.cmake b/mo2_python.cmake index c8af496..0e51dd7 100644 --- a/mo2_python.cmake +++ b/mo2_python.cmake @@ -174,12 +174,6 @@ function(mo2_python_requirements TARGET) file(MAKE_DIRECTORY "${MO2_LIBDIR}") - install( - DIRECTORY "${MO2_LIBDIR}" - DESTINATION "${MO2_INSTALL_BIN}/plugins/${TARGET}/" - PATTERN "__pycache__" EXCLUDE - ) - endfunction() #! mo2_configure_python_module : configure a Python plugin module @@ -221,6 +215,8 @@ function(mo2_configure_python_module TARGET) file(GLOB_RECURSE ui_files CONFIGURE_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/*.ui) mo2_python_uifiles(${TARGET} INPLACE FILES ${ui_files}) + set(install_dir "${MO2_INSTALL_BIN}/extensions/${MO2_EXTENSION_ID}") + # install requirements if there are any if(EXISTS "${PROJECT_SOURCE_DIR}/plugin-requirements.txt") mo2_python_requirements(${TARGET} LIBDIR "${lib_dir}") @@ -229,14 +225,18 @@ function(mo2_configure_python_module TARGET) ) source_group(requirements FILES "${PROJECT_SOURCE_DIR}/plugin-requirements.txt") - endif() - set(install_dir "${MO2_INSTALL_BIN}/plugins/${TARGET}") + install( + DIRECTORY "${MO2_LIBDIR}/" + DESTINATION "${install_dir}/lib/" + PATTERN "__pycache__" EXCLUDE + ) + endif() # directories that go in bin/plugins/${name} install( - DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/" - DESTINATION ${install_dir} + DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/${TARGET}/" + DESTINATION "${install_dir}/${TARGET}/" FILES_MATCHING PATTERN "*.py" PATTERN ".git" EXCLUDE PATTERN ".github" EXCLUDE @@ -247,8 +247,8 @@ function(mo2_configure_python_module TARGET) # copy the resource directory if it exists if(EXISTS "${res_dir}") install( - DIRECTORY "${res_dir}" - DESTINATION ${install_dir} + DIRECTORY "${res_dir}/" + DESTINATION "${install_dir}/res/" ) endif()