Fix: can't build wgt file
[apps/app-templates.git] / default / cmake / common.cmake
index 9650ad0..78a0af9 100644 (file)
@@ -64,17 +64,18 @@ macro(defstr name value)
        add_definitions(-D${name}=${value})
 endmacro(defstr)
 
-# WGT packaging
+# Pre-packaging
 macro(project_targets_populate)
-       # Default Widget default directory
-       set(PACKAGE_BINDIR  ${PROJECT_PKG_DIR}/bin)
-       set(PACKAGE_ETCDIR  ${PROJECT_PKG_DIR}/etc)
-       set(PACKAGE_LIBDIR  ${PROJECT_PKG_DIR}/lib)
-       set(PACKAGE_HTTPDIR ${PROJECT_PKG_DIR}/htdocs)
-       set(PACKAGE_DATADIR ${PROJECT_PKG_DIR}/data)
+
+        # Default Widget default directory
+        set(PACKAGE_BINDIR  ${PROJECT_PKG_BUILD_DIR}/bin)
+        set(PACKAGE_ETCDIR  ${PROJECT_PKG_BUILD_DIR}/etc)
+        set(PACKAGE_LIBDIR  ${PROJECT_PKG_BUILD_DIR}/lib)
+        set(PACKAGE_HTTPDIR ${PROJECT_PKG_BUILD_DIR}/htdocs)
+        set(PACKAGE_DATADIR ${PROJECT_PKG_BUILD_DIR}/data)
 
        add_custom_target(populate)
-       get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
+        get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
        foreach(TARGET ${PROJECT_TARGETS})
                get_target_property(T ${TARGET} LABELS)
                if(T)
@@ -112,45 +113,79 @@ macro(project_targets_populate)
                        elseif(${T} STREQUAL "HTDOCS")
                                add_custom_command(OUTPUT ${PACKAGE_HTTPDIR}
                                        DEPENDS ${TARGET}
-                                       COMMAND mkdir -p ${PROJECT_PKG_DIR}/${PACKAGE_HTTPDIR}
+                                       COMMAND mkdir -p ${PACKAGE_HTTPDIR}
                                        COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_HTTPDIR}
-                                       )
+                               )
                                        add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR})
                                        add_dependencies(populate ${POPULE_PACKAGE_TARGET}) 
                        elseif(${T} STREQUAL "DATA")
                                add_custom_command(OUTPUT ${PACKAGE_DATADIR}
                                        DEPENDS ${TARGET}
-                                       COMMAND mkdir -p ${PROJECT_PKG_DIR}/${PACKAGE_DATADIR}
-                                       COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_DATADIR}
-                                       )
+                                       COMMAND mkdir -p ${PACKAGE_DATADIR}
+                                       COMMAND cp -r ${BD}/${P}${OUT} ${PACKAGE_DATADIR}
+                               )
                                        add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_DATADIR})
                                        add_dependencies(populate ${POPULE_PACKAGE_TARGET}) 
                        endif(${T} STREQUAL "BINDING")
-#              elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
-#                                      MESSAGE(WARNING "This target, ${TARGET}, will be not be included in the package.")
+               elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
+                       MESSAGE(".. Warning: ${TARGET} ignored when packaging.")
                endif()
        endforeach()
 endmacro(project_targets_populate)
 
+macro(remote_targets_populate)
+       if (DEFINED ENV{RSYNC_TARGET})
+       set (RSYNC_TARGET $ENV{RSYNC_TARGET})
+       endif()
+       if (DEFINED ENV{RSYNC_PREFIX})
+       set (RSYNC_PREFIX $ENV{RSYNC_PREFIX})
+       endif()
+
+       set(
+               REMOTE_LAUNCH "Test on target with: ${CMAKE_CURRENT_BINARY_DIR}/target/start-on-${RSYNC_TARGET}.sh" 
+               CACHE STRING "Command to start ${PROJECT_NAME} on remote target ${RSYNC_TARGET}"
+       )
+
+       if(NOT RSYNC_TARGET OR NOT RSYNC_PREFIX)
+               message (".. Warning: RSYNC_TARGET RSYNC_PREFIX not defined 'make remote-target-populate' not instanciated")
+               add_custom_target(remote-target-populate
+                       COMMENT "*** Fatal: RSYNC_TARGET RSYNC_PREFIX required with 'make remote-target-populate'"
+                       COMMAND exit -1
+               )
+       else() 
+
+               configure_file(${SSH_TEMPLATE_DIR}/start-on-target.in ${CMAKE_CURRENT_BINARY_DIR}/target/start-on-${RSYNC_TARGET}.sh)
+               configure_file(${GDB_TEMPLATE_DIR}/gdb-on-target.in ${CMAKE_CURRENT_BINARY_DIR}/target/gdb-on-${RSYNC_TARGET}.ini)
+
+               add_custom_target(remote-target-populate
+                       DEPENDS populate
+                       COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/target/start-on-${RSYNC_TARGET}.sh
+                       COMMAND rsync --archive --delete ${PROJECT_PKG_DIR}/ ${RSYNC_TARGET}:${RSYNC_PREFIX}/${PROJECT_NAME}
+                       COMMENT "${REMOTE_LAUNCH}"
+               )
+       endif()
+endmacro(remote_targets_populate)
+
 macro(wgt_package_build)
-       if(NOT EXISTS ${TEMPLATE_WGT_DIR}/config.xml.in OR NOT EXISTS ${TEMPLATE_WGT_DIR}/${PROJECT_ICON})
+       if(NOT EXISTS ${TEMPLATE_WGT_DIR}/config.xml.in OR NOT EXISTS ${TEMPLATE_WGT_DIR}/icon-default.png)
                MESSAGE(SEND_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need config.xml.in and ${PROJECT_ICON} files in ${TEMPLATE_WGT_DIR} folder.${ColourReset}")
        else()
                # Build widget spec file from template only once (Fulup good idea or should depend on time ????)
                if(NOT EXISTS ${TEMPLATE_WGT_DIR}/config.xml.in OR NOT EXISTS ${TEMPLATE_WGT_DIR}/${PROJECT_ICON})
-                               configure_file(${TEMPLATE_WGT_DIR}/config.xml.in ${PROJECT_PKG_DIR}/config.xml)
-                               file(COPY ${TEMPLATE_WGT_DIR}/${PROJECT_ICON} DESTINATION ${PROJECT_PKG_DIR}/${PROJECT_ICON})
+                       configure_file(${TEMPLATE_WGT_DIR}/config.xml.in ${PROJECT_PKG_BUILD_DIR}/config.xml)
+                       configure_file(${TEMPLATE_WGT_DIR}/config.xml.in ${PROJECT_PKG_ENTRY_POINT}/config.xml)
+                       file(COPY ${TEMPLATE_WGT_DIR}/icon-default.png DESTINATION ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON})
                endif(NOT EXISTS ${TEMPLATE_WGT_DIR}/config.xml.in OR NOT EXISTS ${TEMPLATE_WGT_DIR}/${PROJECT_ICON})
 
                # Fulup ??? copy any extra file in wgt/etc into populate package before building the widget
                file(GLOB PROJECT_CONF_FILES "${TEMPLATE_WGT_DIR}/etc/*")
                if(${PROJECT_CONF_FILES})
-                               file(COPY "${TEMPLATE_WGT_DIR}/etc/*" DESTINATION ${PROJECT_PKG_DIR}/etc/)
+                       file(COPY "${TEMPLATE_WGT_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
                endif(${PROJECT_CONF_FILES})
 
                add_custom_command(OUTPUT ${PROJECT_NAME}.wgt
-                               DEPENDS ${PROJECT_TARGETS}
-                               COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_DIR}
+                       DEPENDS ${PROJECT_TARGETS}
+                       COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_BUILD_DIR}
                )
 
                add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt)
@@ -159,15 +194,15 @@ macro(wgt_package_build)
 
                if(PACKAGE_MESSAGE)
                add_custom_command(TARGET widget
-                               POST_BUILD
-                               COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
+                       POST_BUILD
+                       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
                endif()
        endif()
 endmacro(wgt_package_build)
 
 macro(rpm_package_build)
-       if(NOT EXISTS ${PROJECT_RPM_DIR}/config.spec.in)
-                       MESSAGE(STATUS "Missing mandatory files: you need config.spec.in in ${PROJECT_RPM_DIR} folder.")
+       if(NOT EXISTS ${TEMPLATE_RPM_DIR}/config.spec.in)
+                       MESSAGE(STATUS "Missing mandatory files: you need config.spec.in in ${TEMPLATE_RPM_DIR} folder.")
        else()
                # extract PROJECT_PKG_DEPS and replace ; by , for RPM spec file
                get_property(PROJECT_PKG_DEPS GLOBAL PROPERTY PROJECT_PKG_DEPS)
@@ -176,11 +211,12 @@ macro(rpm_package_build)
                endforeach()
 
                # build rpm spec file from template
-               configure_file(${PROJECT_RPM_DIR}/config.spec.in ${PROJECT_PKG_DIR}/config.spec)
+               configure_file(${TEMPLATE_RPM_DIR}/config.spec.in ${PROJECT_PKG_BUILD_DIR}/config.spec)
+               configure_file(${TEMPLATE_RPM_DIR}/config.xml.in ${PROJECT_PKG_ENTRY_POINT}/config.xml)
 
                add_custom_command(OUTPUT ${PROJECT_NAME}.spec
-                               DEPENDS ${PROJECT_TARGETS}
-                               COMMAND rpmbuild -ba  ${PROJECT_PKG_DIR}/config.spec
+                       DEPENDS ${PROJECT_TARGETS}
+                       COMMAND rpmbuild -ba  ${PROJECT_PKG_BUILD_DIR}/config.spec
                )
 
                add_custom_target(rpm DEPENDS ${PROJECT_NAME}.spec)
@@ -189,8 +225,8 @@ macro(rpm_package_build)
 
                if(PACKAGE_MESSAGE)
                add_custom_command(TARGET rpm
-                               POST_BUILD
-                               COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
+                       POST_BUILD
+                       COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}")
                endif()
        endif()
 endmacro(rpm_package_build)
@@ -297,19 +333,20 @@ endif()
 
 # Define a default package directory
 if(PACKAGE_PREFIX)
-       set(PROJECT_PKG_DIR ${PKG_PREFIX}/package CACHE PATH "Where the package will be built.")
+       set(PROJECT_PKG_BUILD_DIR ${PKG_PREFIX}/package CACHE PATH "Where the package will be built.")
 else()
-       set(PROJECT_PKG_DIR ${CMAKE_CURRENT_BINARY_DIR}/package CACHE PATH "Where the package will be built")
+       set(PROJECT_PKG_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/package CACHE PATH "Where the package will be built")
 endif()
+set(PROJECT_PKG_ENTRY_POINT ${CMAKE_SOURCE_DIR}/packaging CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.")
 
 set (PKG_TEMPLATE_PREFIX ${CMAKE_SOURCE_DIR}/etc CACHE PATH "Default Package Templates Directory")
-set(TEMPLATE_WGT_DIR "${CMAKE_SOURCE_DIR}/conf.d/app-templates/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget")
-set(TEMPLATE_RPM_DIR "${CMAKE_SOURCE_DIR}/conf.d/app-templates/rpm" CACHE PATH "Subpath to a directory where are stored needed files to build rpm package")
-set(TEMPLATE_DEB_DIR "${CMAKE_SOURCE_DIR}/conf.d/app-templates/deb" CACHE PATH "Subpath to a directory where are stored needed files to build deb package")
+set(TEMPLATE_WGT_DIR "${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget")
+set(TEMPLATE_RPM_DIR "${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default/rpm" CACHE PATH "Subpath to a directory where are stored needed files to build rpm package")
+set(TEMPLATE_DEB_DIR "${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default/deb" CACHE PATH "Subpath to a directory where are stored needed files to build deb package")
 
 # Default Linkflag
 if(NOT BINDINGS_LINK_FLAG)
-       set(BINDINGS_LINK_FLAG "-Wl,--version-script=${CMAKE_SOURCE_DIR}/conf.d/app-templates/cmake/export.map")
+       set(BINDINGS_LINK_FLAG "-Wl,--version-script=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default/cmake/export.map")
 endif()
 
 # Add a dummy target to enable global dependency order