Update Readme
[apps/app-templates.git] / cmake / cmake.d / 03-macros.cmake
index ff4388d..fa4bd1f 100644 (file)
@@ -121,54 +121,91 @@ macro(configure_files_in_dir dir)
        endforeach()
 endmacro(configure_files_in_dir)
 
-macro(add_required_module PKG_CONFIG)
-       string(REGEX REPLACE "[<>]?=.*$" "" XPREFIX ${PKG_CONFIG})
-       PKG_CHECK_MODULES(${XPREFIX} REQUIRED ${PKG_CONFIG})
-
-       INCLUDE_DIRECTORIES(${${XPREFIX}_INCLUDE_DIRS})
-       list(APPEND link_libraries ${${XPREFIX}_LDFLAGS})
-       add_compile_options (${${XPREFIX}_CFLAGS})
-endmacro(add_required_module)
-
 # Create custom target dedicated for HTML5 and DATA AGL target type
 macro(add_input_files INPUT_FILES)
-       set(XML_LIST ${INPUT_FILES})
-       set(LUA_LIST ${INPUT_FILES})
-       set(JSON_LIST ${INPUT_FILES})
+       if(NOT DEFINED XML_FILES)
+               set(ext_reg "xml$")
+               set(XML_LIST ${INPUT_FILES})
+               list_filter(XML_LIST ext_reg)
+               execute_process(
+                       COMMAND which ${XML_CHECKER}
+                       RESULT_VARIABLE XML_CHECKER_PRESENT
+                       OUTPUT_QUIET ERROR_QUIET
+               )
+       endif()
+       if(NOT DEFINED LUA_LIST)
+               set(ext_reg "lua$")
+               set(LUA_LIST ${INPUT_FILES})
+               list_filter(LUA_LIST ext_reg)
+               execute_process(
+                       COMMAND which ${LUA_CHECKER}
+                       RESULT_VARIABLE LUA_CHECKER_PRESENT
+                       OUTPUT_QUIET ERROR_QUIET
+               )
+       endif()
+       if(NOT DEFINED JSON_FILES)
+               set(ext_reg "json$")
+               set(JSON_LIST ${INPUT_FILES})
+               list_filter(JSON_LIST ext_reg)
+               execute_process(
+                       COMMAND which ${JSON_CHECKER}
+                       RESULT_VARIABLE JSON_CHECKER_PRESENT
+                       OUTPUT_QUIET ERROR_QUIET
+               )
+       endif()
+
        # These are v3.6 subcommand. Not used as default for now as
        # many dev use Ubuntu 16.04 which have only 3.5 version
        #list(FILTER XML_LIST INCLUDE REGEX "xml$")
        #list(FILTER LUA_LIST INCLUDE REGEX "lua$")
        #list(FILTER JSON_LIST INCLUDE REGEX "json$")
-       list_filter(XML_LIST "xml$")
-       list_filter(LUA_LIST "lua$")
-       list_filter(JSON_LIST "json$")
 
-       add_custom_target(${TARGET_NAME}
+       add_custom_target(${TARGET_NAME} ALL
        DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
        )
 
-       foreach(file ${XML_LIST})
+       if(XML_CHECKER_PRESENT EQUAL 0)
+               foreach(file ${XML_LIST})
+                       add_custom_command(TARGET ${TARGET_NAME}
+                               PRE_BUILD
+                               WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                               COMMAND ${XML_CHECKER} ${file}
+                       )
+               endforeach()
+       elseif(XML_LIST)
+       add_custom_command(TARGET ${TARGET_NAME}
+       PRE_BUILD
+       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "Warning: XML_CHECKER not found. Not verification made on files !")
+       endif()
+       if(LUA_CHECKER_PRESENT EQUAL 0)
+               foreach(file ${LUA_LIST})
                add_custom_command(TARGET ${TARGET_NAME}
                        PRE_BUILD
                        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-                       COMMAND ${XML_CHECKER} ${file}
+                       COMMAND ${LUA_CHECKER} ${file}
                )
-       endforeach()
-       foreach(file ${LUA_LIST})
-       add_custom_command(TARGET ${TARGET_NAME}
-               PRE_BUILD
-               WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-               COMMAND ${LUA_CHECKER} ${file}
-       )
-       endforeach()
-       foreach(file ${JSON_LIST})
+               endforeach()
+       elseif(LUA_LIST)
+               add_custom_command(TARGET ${TARGET_NAME}
+                       PRE_BUILD
+                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "Warning: LUA_CHECKER not found. Not verification made on files !")
+       endif()
+       if(JSON_CHECKER_PRESENT EQUAL 0)
+               foreach(file ${JSON_LIST})
+               add_custom_command(TARGET ${TARGET_NAME}
+                       PRE_BUILD
+                       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+                       COMMAND ${JSON_CHECKER} ${file}
+               )
+               endforeach()
+       elseif(JSON_LIST)
        add_custom_command(TARGET ${TARGET_NAME}
-               PRE_BUILD
-               WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-               COMMAND cat ${file} | ${JSON_CHECKER}
-       )
-       endforeach()
+       PRE_BUILD
+       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --red "Warning: JSON_CHECKER not found. Not verification made on files !")
+       endif()
 
        add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
        DEPENDS ${INPUT_FILES}
@@ -214,6 +251,7 @@ macro(project_targets_populate)
                set(POPULE_PACKAGE_TARGET "project_populate_${TARGET}")
 
                get_target_property(P ${TARGET} PREFIX)
+               get_target_property(S ${TARGET} SUFFIX)
                get_target_property(BD ${TARGET} BINARY_DIR)
                get_target_property(SD ${TARGET} SOURCE_DIR)
                get_target_property(OUT ${TARGET} OUTPUT_NAME)
@@ -226,16 +264,24 @@ macro(project_targets_populate)
                        endif()
                endif()
 
-               if(${T} STREQUAL "BINDING")
-                       list(APPEND BINDINGS_LIST "${P}${OUT}")
-                       add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}.so
-                               DEPENDS ${BD}/${P}${OUT}.so
+               if(${T} STREQUAL "BINDING" OR ${T} STREQUAL "PLUGIN")
+                       if(NOT S)
+                               list(APPEND BINDINGS_LIST "${P}${OUT}")
+                               set(S ".so")
+                       else()
+                               set(PACKAGE_LIBDIR_BCK "${PACKAGE_LIBDIR}")
+                               set(PACKAGE_LIBDIR "${PACKAGE_LIBDIR}/plugins")
+                       endif()
+
+                       add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}${S}
+                               DEPENDS ${BD}/${P}${OUT}${S}
                                COMMAND mkdir -p ${PACKAGE_LIBDIR}
-                               COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
+                               COMMAND cp ${BD}/${P}${OUT}${S} ${PACKAGE_LIBDIR}
                        )
-                       add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
+                       add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}${S})
                        add_dependencies(populate ${POPULE_PACKAGE_TARGET})
                        add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
+                       set(PACKAGE_LIBDIR ${PACKAGE_LIBDIR_BCK})
                elseif(${T} STREQUAL "BINDINGV2")
                        if (OPENAPI_DEF)
                                add_custom_command(OUTPUT ${SD}/${OPENAPI_DEF}.h
@@ -298,7 +344,23 @@ macro(project_targets_populate)
                        )
                        add_dependencies(populate ${POPULE_PACKAGE_TARGET})
                        add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
-               endif(${T} STREQUAL "BINDING")
+                       elseif(${T} STREQUAL "BINDING-CONFIG")
+                       # Generate list of output files instead of just one output directory
+                       get_target_property(SF ${TARGET} SOURCES)
+                       foreach(file ${SF})
+                               get_filename_component(JUST_FILENAME ${file} NAME)
+                               list(APPEND OUTPUT_FILES ${PACKAGE_ETCDIR}/${JUST_FILENAME})
+                       endforeach()
+                       add_custom_target(${POPULE_PACKAGE_TARGET})
+                       add_custom_command(TARGET ${POPULE_PACKAGE_TARGET}
+                               POST_BUILD
+                               COMMAND mkdir -p ${PACKAGE_ETCDIR}
+                               COMMAND touch ${PACKAGE_ETCDIR}
+                               COMMAND cp -r ${BD}/${TARGET}/* ${PACKAGE_ETCDIR}
+                       )
+                       add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+                       add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
+               endif()
                elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
                        MESSAGE("${Yellow}.. Warning: ${TARGET} ignored when packaging.${ColourReset}")
                endif()
@@ -345,8 +407,13 @@ macro(remote_targets_populate)
                add_custom_target(remote-target-populate
                        COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/*.sh
                        COMMAND rsync -e "ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --archive --delete ${PROJECT_PKG_BUILD_DIR}/ ${RSYNC_TARGET}:${RSYNC_PREFIX}/${PROJECT_NAME}
-                       COMMENT "${REMOTE_LAUNCH}"
                )
+
+               add_custom_command(TARGET remote-target-populate
+               POST_BUILD
+               COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --green --bold ${REMOTE_LAUNCH}
+               )
+
                add_dependencies(remote-target-populate populate)
        endif()
 endmacro(remote_targets_populate)
@@ -447,17 +514,17 @@ macro(deb_package_build)
 endmacro(deb_package_build)
 
 macro(project_package_build)
-       if(EXISTS ${TEMPLATE_DIR})
-               rpm_package_build()
-       endif()
+#      if(EXISTS ${TEMPLATE_DIR})
+#              rpm_package_build()
+#      endif()
 
        if(EXISTS ${TEMPLATE_DIR})
                wgt_package_build()
        endif()
 
-       if(EXISTS ${TEMPLATE_DIR})
-               deb_package_build()
-       endif()
+#      if(EXISTS ${TEMPLATE_DIR})
+#              deb_package_build()
+#      endif()
 endmacro(project_package_build)
 
 macro(project_subdirs_add)
@@ -485,7 +552,7 @@ macro(project_closing_msg)
                add_custom_target(${PROJECT_NAME}_build_done ALL
                        COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${CLOSING_MESSAGE}"
                )
-                add_dependencies(${PROJECT_NAME}_build_done
-                       ${DEPENDENCIES_TARGET} ${PROJECT_TARGETS})
+               add_dependencies(${PROJECT_NAME}_build_done
+                       ${PROJECT_TARGETS} populate)
        endif()
 endmacro()