Ease standard target DATA and HTDOCS creation
[apps/app-templates.git] / cmake / cmake.d / 02-macros.cmake
index 08a56f0..3e4b919 100644 (file)
@@ -48,6 +48,28 @@ macro(configure_files_in_dir dir)
        endforeach()
 endmacro(configure_files_in_dir)
 
+# Create custom target dedicated for HTML5 and DATA AGL target type
+macro(add_input_files INPUT_FILES)
+       add_custom_target(${TARGET_NAME} 
+       DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       )
+
+       add_custom_command(TARGET ${TARGET_NAME}
+       PRE_BUILD
+       WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+       COMMAND [ -f *xml ] && ${XML_CHECKER} ${INPUT_FILES}
+       COMMAND [ -f *lua ] && ${LUA_CHECKER} ${INPUT_FILES}
+       COMMAND [ -f *json ] && for f in ${INPUT_FILES}; do cat ${INPUT_FILES} | ${JSON_CHECKER}; done
+       )
+
+       add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       DEPENDS  ${INPUT_FILES}
+       OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       COMMAND mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       COMMAND touch ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       COMMAND cp -r ${INPUT_FILES} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+       )
+endmacro()
 # Pre-packaging
 macro(project_targets_populate)
        # Default Widget default directory
@@ -57,7 +79,9 @@ macro(project_targets_populate)
        set(PACKAGE_HTTPDIR ${PROJECT_PKG_BUILD_DIR}/htdocs)
        set(PACKAGE_DATADIR ${PROJECT_PKG_BUILD_DIR}/data)
 
-       add_custom_target(populate)
+       add_custom_command(OUTPUT ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR}
+               COMMAND mkdir -p ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
+       add_custom_target(populate DEPENDS ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
                get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
        foreach(TARGET ${PROJECT_TARGETS})
                get_target_property(T ${TARGET} LABELS)
@@ -79,35 +103,69 @@ macro(project_targets_populate)
                        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
+                                       COMMAND mkdir -p ${PACKAGE_LIBDIR}
+                                       COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
+                               )
+                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
+                               add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+                               add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
+                       elseif(${T} STREQUAL "BINDINGV2")
                                add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}.so
+                                       DEPENDS ${BD}/${P}${OUT}.so
                                        COMMAND mkdir -p ${PACKAGE_LIBDIR}
                                        COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
                                )
-                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${TARGET}.so)
-                               add_dependencies(populate ${POPULE_PACKAGE_TARGET} ${TARGET})
+                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
+
+                               if (OPENAPI_DEF)
+                                       add_custom_command(OUTPUT ${SD}/${OPENAPI_DEF}.h
+                                               DEPENDS ${SD}/${OPENAPI_DEF}.json
+                                               COMMAND afb-genskel ${SD}/${OPENAPI_DEF}.json > ${SD}/${OPENAPI_DEF}.h
+                                       )
+                                       add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OPENAPI_DEF}.h
+                                               COMMENT "Generating OpenAPI header file ${OPENAPI_DEF}.h")
+                                       add_dependencies(${TARGET} "${TARGET}_GENSKEL")
+                               else()
+                                       add_custom_command(OUTPUT ${SD}/${OUT}-apidef.h
+                                               DEPENDS ${SD}/${OUT}-apidef.json
+                                               COMMAND afb-genskel ${SD}/${OUT}-apidef.json > ${SD}/${OUT}-apidef.h
+                                       )
+                                       add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OUT}-apidef.h
+                                               COMMENT "Generating OpenAPI header file ${OUT}-apidef.h")
+                                       add_dependencies(${TARGET} "${TARGET}_GENSKEL")
+                               endif()
                        elseif(${T} STREQUAL "EXECUTABLE")
                                add_custom_command(OUTPUT ${PACKAGE_BINDIR}/${P}${OUT}
+                                       DEPENDS ${BD}/${P}${OUT}
                                        COMMAND mkdir -p ${PACKAGE_BINDIR}
                                        COMMAND cp ${BD}/${P}${OUT} ${PACKAGE_BINDIR}
                                )
-                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_BINDIR}/${P}${TARGET})
-                               add_dependencies(populate ${POPULE_PACKAGE_TARGET} ${TARGET})
+                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_BINDIR}/${P}${OUT})
+                               add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+                               add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
                        elseif(${T} STREQUAL "HTDOCS")
                                add_custom_command(OUTPUT ${PACKAGE_HTTPDIR}-xx
+                                       DEPENDS ${BD}/${P}${OUT}
                                        COMMAND mkdir -p ${PACKAGE_HTTPDIR}
                                        COMMAND touch ${PACKAGE_HTTPDIR}
                                        COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_HTTPDIR}
                                )
-                                       add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR}-xx)
-                                       add_dependencies(populate ${POPULE_PACKAGE_TARGET} ${TARGET})
+                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR}-xx)
+                               add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+                               add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
                        elseif(${T} STREQUAL "DATA")
                                add_custom_command(OUTPUT ${PACKAGE_DATADIR}-xx
+                                       DEPENDS ${BD}/${P}${OUT}
                                        COMMAND mkdir -p ${PACKAGE_DATADIR}
                                        COMMAND touch ${PACKAGE_DATADIR}
                                        COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_DATADIR}
                                )
-                                       add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_DATADIR}-xx)
-                                       add_dependencies(populate ${POPULE_PACKAGE_TARGET} ${TARGET})
+                               add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_DATADIR}-xx)
+                               add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+                               add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
                        endif(${T} STREQUAL "BINDING")
                elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
                        MESSAGE(".. Warning: ${TARGET} ignored when packaging.")
@@ -135,9 +193,22 @@ macro(remote_targets_populate)
                        COMMAND exit -1
                )
        else()
+               set(BINDINGS_REGEX "not_set")
+               if(DEFINED BINDINGS_LIST)
+                       list(LENGTH BINDINGS_LIST BINDINGS_LIST_LENGTH)
+                       if(BINDINGS_LIST_LENGTH EQUAL 1)
+                               list(GET BINDINGS_LIST 0 BINDINGS_REGEX)
+                               string(APPEND BINDINGS_REGEX ".so")
+                       elseif(BINDINGS_LIST_LENGTH GREATER 1)
+                               foreach(B IN LISTS BINDINGS_LIST)
+                                       STRING(APPEND BINDINGS_STR "${B}|")
+                               endforeach()
+                                       STRING(REGEX REPLACE "^(.*)\\|$" "(\\1).so" BINDINGS_REGEX ${BINDINGS_STR})
+                       endif()
+               endif()
 
-               configure_files_in_dir(${SSH_TEMPLATE_DIR})
-               configure_files_in_dir(${GDB_TEMPLATE_DIR})
+               configure_files_in_dir(${TEMPLATE_DIR})
+               configure_files_in_dir(${TEMPLATE_DIR})
 
                add_custom_target(remote-target-populate
                        COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/*.sh
@@ -152,8 +223,8 @@ macro(wgt_package_build)
        if(NOT EXISTS ${WIDGET_CONFIG_TEMPLATE})
                MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need a config.xml template: please specify WIDGET_CONFIG_TEMPLATE correctly.${ColourReset}")
        endif()
-       if(NOT EXISTS ${WGT_TEMPLATE_DIR}/icon-default.png)
-               MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need ${PROJECT_ICON} file in ${WGT_TEMPLATE_DIR} folder.${ColourReset}")
+       if(NOT EXISTS ${TEMPLATE_DIR}/icon-default.png)
+               MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need ${PROJECT_ICON} file in ${TEMPLATE_DIR} folder.${ColourReset}")
        endif()
     if(NOT WIDGET_TYPE)
         MESSAGE(FATAL_ERROR "WIDGET_TYPE must be set in your config.cmake.\neg.: set(WIDGET_TYPE application/vnd.agl.service)")
@@ -165,15 +236,15 @@ macro(wgt_package_build)
 
        add_custom_command(OUTPUT ${PROJECT_PKG_BUILD_DIR}/config.xml
                COMMAND ${CMAKE_COMMAND} -DINFILE=${WIDGET_CONFIG_TEMPLATE} -DOUTFILE=${PROJECT_PKG_BUILD_DIR}/config.xml -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
-               COMMAND cp ${WGT_TEMPLATE_DIR}/icon-default.png ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}
+               COMMAND cp ${TEMPLATE_DIR}/icon-default.png ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}
 
        )
        add_custom_target(packaging_wgt DEPENDS ${PROJECT_PKG_BUILD_DIR}/config.xml)
 
        # Fulup ??? copy any extra file in wgt/etc into populate package before building the widget
-       file(GLOB PROJECT_CONF_FILES "${WGT_TEMPLATE_DIR}/etc/*")
+       file(GLOB PROJECT_CONF_FILES "${TEMPLATE_DIR}/etc/*")
        if(${PROJECT_CONF_FILES})
-               file(COPY "${WGT_TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
+               file(COPY "${TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
        endif(${PROJECT_CONF_FILES})
 
        add_custom_command(OUTPUT ${PROJECT_NAME}.wgt
@@ -192,7 +263,7 @@ macro(wgt_package_build)
                        COMMAND exit -1
                )
        else()
-       configure_files_in_dir(${WGT_TEMPLATE_DIR})
+       configure_files_in_dir(${TEMPLATE_DIR})
        add_custom_target(widget-target-install
        DEPENDS widget
        COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/install-wgt-on-${RSYNC_TARGET}.sh
@@ -230,15 +301,15 @@ macro(deb_package_build)
 endmacro(deb_package_build)
 
 macro(project_package_build)
-       if(EXISTS ${RPM_TEMPLATE_DIR})
+       if(EXISTS ${TEMPLATE_DIR})
                rpm_package_build()
        endif()
 
-       if(EXISTS ${WGT_TEMPLATE_DIR})
+       if(EXISTS ${TEMPLATE_DIR})
                wgt_package_build()
        endif()
 
-       if(EXISTS ${DEB_TEMPLATE_DIR})
+       if(EXISTS ${TEMPLATE_DIR})
                deb_package_build()
        endif()
 endmacro(project_package_build)