From 2de0f6ce0d934bad9a80908bbc4a93a837f20eeb Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 24 May 2017 17:59:53 +0200 Subject: [PATCH 01/16] Added possibility to check linux kernel version Change-Id: I212e1a5a2dc16c6cc2eb78523dbf9496d9da234a Signed-off-by: Romain Forlot --- cmake/common.cmake | 10 +++++++++- cmake/config.cmake.sample | 6 +++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 4c85498..1d43a73 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -52,7 +52,7 @@ macro(PROJECT_TARGET_ADD TARGET_NAME) set(TARGET_NAME ${TARGET_NAME}) endmacro(PROJECT_TARGET_ADD) -# Check GCC minimal version version +# Check GCC minimal version if (gcc_minimal_version) message (STATUS "${Blue}-- Check gcc_minimal_version (found gcc version ${CMAKE_C_COMPILER_VERSION}) (found g++ version ${CMAKE_CXX_COMPILER_VERSION})${ColourReset}") if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version} OR CMAKE_C_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version}) @@ -60,6 +60,14 @@ if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version} OR CMAKE_C_CO endif() endif(gcc_minimal_version) +# Check Kernel minimal version +if (kernel_minimal_version) + message (STATUS "${Blue}-- Check kernel_minimal_version (found kernel version ${CMAKE_SYSTEM_VERSION})${ColourReset}") + if (CMAKE_SYSTEM_VERSION VERSION_LESS ${kernel_minimal_version}) + message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_minimal_version} please use a recent kernel.") +endif() +endif(kernel_minimal_version) + macro(defstr name value) add_definitions(-D${name}=${value}) endmacro(defstr) diff --git a/cmake/config.cmake.sample b/cmake/config.cmake.sample index 66be37c..27d9f17 100644 --- a/cmake/config.cmake.sample +++ b/cmake/config.cmake.sample @@ -44,9 +44,13 @@ set(PROJECT_APP_TEMPLATES_DIR "conf.d") # ---------------------------------- set(CMAKE_BUILD_TYPE "DEBUG") +# Kernel selection if needed. Impose a minimal version. +# ----------------------------------------------- +set (kernel_minimal_version 4.8) + # Compiler selection if needed. Impose a minimal version. # ----------------------------------------------- -set (gcc_minimal_version 4.9) +set (gcc_minimal_version 4.9) # PKG_CONFIG required packages # ----------------------------- -- 2.16.6 From 132404c28f8e2d29605c6f7e5b8d06e0be5a7d42 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 24 May 2017 18:07:15 +0200 Subject: [PATCH 02/16] Fix: variable coherence Change-Id: Ie7c073e0df0e19b31e210cb02d628bde864d11de Signed-off-by: Romain Forlot --- cmake/common.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 1d43a73..12ef8e8 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -160,7 +160,7 @@ macro(remote_targets_populate) COMMENT "*** Fatal: RSYNC_TARGET RSYNC_PREFIX required with 'make remote-target-populate'" COMMAND exit -1 ) - else() + 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) @@ -346,12 +346,12 @@ else() 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 (PKG_TEMPLATE_PREFIX ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default CACHE PATH "Default Package Templates Directory") set(SSH_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/ssh) set(GDB_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/gdb) -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") +set(TEMPLATE_WGT_DIR "${PKG_TEMPLATE_PREFIX}/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget") +set(TEMPLATE_RPM_DIR "${PKG_TEMPLATE_PREFIX}/rpm" CACHE PATH "Subpath to a directory where are stored needed files to build rpm package") +set(TEMPLATE_DEB_DIR "${PKG_TEMPLATE_PREFIX}/deb" CACHE PATH "Subpath to a directory where are stored needed files to build deb package") # Default Linkflag if(NOT BINDINGS_LINK_FLAG) -- 2.16.6 From 1ab0ddf219ec8c523db844ae85bc2d52ffbe7089 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 24 May 2017 18:16:37 +0200 Subject: [PATCH 03/16] Fix: hardcoded path Change-Id: I882f7f69b3577a779266c5347c25ee6d7ab52377 Signed-off-by: Romain Forlot --- cmake/common.cmake | 4 ++-- cmake/config.cmake.sample | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 12ef8e8..fadba0e 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -346,7 +346,7 @@ else() 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}/${PROJECT_APP_TEMPLATES_DIR}/default CACHE PATH "Default Package Templates Directory") +set (PKG_TEMPLATE_PREFIX ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR} CACHE PATH "Default Package Templates Directory") set(SSH_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/ssh) set(GDB_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/gdb) set(TEMPLATE_WGT_DIR "${PKG_TEMPLATE_PREFIX}/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget") @@ -355,7 +355,7 @@ set(TEMPLATE_DEB_DIR "${PKG_TEMPLATE_PREFIX}/deb" CACHE PATH "Subpath to a direc # Default Linkflag if(NOT BINDINGS_LINK_FLAG) - set(BINDINGS_LINK_FLAG "-Wl,--version-script=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/default/cmake/export.map") + set(BINDINGS_LINK_FLAG "-Wl,--version-script=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/export.map") endif() # Add a dummy target to enable global dependency order diff --git a/cmake/config.cmake.sample b/cmake/config.cmake.sample index 27d9f17..73d3832 100644 --- a/cmake/config.cmake.sample +++ b/cmake/config.cmake.sample @@ -31,7 +31,7 @@ set(PROJECT_LANGUAGES,"C") # Where are stored default templates files from submodule or subtree app-templates in your project tree # relative to the root project directory -set(PROJECT_APP_TEMPLATES_DIR "conf.d") +set(PROJECT_APP_TEMPLATES_DIR "conf.d/default") # Where are stored your external libraries for your project. This is 3rd party library that you don't maintain # but used and must be built and linked. -- 2.16.6 From de8b71d64d660db06cd7ac60bc8ad7d28cbc6ada Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Wed, 24 May 2017 18:43:43 +0200 Subject: [PATCH 04/16] Fix: rsync / on target. Populate target with the correct path. Change-Id: I25df58cbc14ca2e0d20450a6be97c635f9c2a4b3 Signed-off-by: Romain Forlot --- cmake/common.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index fadba0e..a78d246 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -168,7 +168,7 @@ macro(remote_targets_populate) 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} + COMMAND rsync --archive --delete ${PROJECT_PKG_BUILD_DIR}/ ${RSYNC_TARGET}:${RSYNC_PREFIX}/${PROJECT_NAME} COMMENT "${REMOTE_LAUNCH}" ) endif() -- 2.16.6 From 0c4659c67fa3758298421d268534416f32b8372c Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Sun, 28 May 2017 13:01:23 +0200 Subject: [PATCH 05/16] Fix: first ssh connection Don't ask to valid host key at first connection to a host Change-Id: I664d15e2a913638ffccb85c4d420a0df8b9addc5 Signed-off-by: Romain Forlot --- ssh/start-on-target.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ssh/start-on-target.in b/ssh/start-on-target.in index 309a059..b0623cf 100644 --- a/ssh/start-on-target.in +++ b/ssh/start-on-target.in @@ -13,7 +13,7 @@ export RSYNC_PREFIX=@RSYNC_PREFIX@/@PROJECT_NAME@ export AFB_REMPORT=@AFB_REMPORT@ export AFB_TOKEN=@AFB_TOKEN@ -exec ssh -tt $RSYNC_TARGET << EOF +exec ssh -o "StrictHostKeyChecking no" -tt $RSYNC_TARGET << EOF afb-daemon --workdir=$RSYNC_PREFIX --port=$AFB_REMPORT --roothttp=./htdocs --ldpath=./lib --verbose --token=$AFB_TOKEN & PID_DAEMON=\$! -- 2.16.6 From 6cd7467fbe20534d26440b4c374ff960efbdf835 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Sun, 28 May 2017 13:02:09 +0200 Subject: [PATCH 06/16] Fix:use first optional argument in adding subdir macro Change-Id: Id09128836df86ade96036359e125e4ce4f23a124 Signed-off-by: Romain Forlot --- cmake/common.cmake | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index a78d246..9904692 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -253,11 +253,13 @@ macro(project_package_build) endmacro(project_package_build) macro(project_subdirs_add) - if(${ARGV0}) + set (ARGSLIST ${ARGN}) + list(LENGTH ARGSLIST ARGSNUM) + if(${ARGSNUM} GREATER 0) file(GLOB filelist "${ARGV0}") else() - file(GLOB filelist "*") - endif(${ARGV0}) + file(GLOB filelist "*") + endif() foreach(filename ${filelist}) if(EXISTS "${filename}/CMakeLists.txt") -- 2.16.6 From 8cd1b7811d19e353206acecfa5d0364ab5733e1a Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Sun, 28 May 2017 13:35:45 +0200 Subject: [PATCH 07/16] Adding colors in output messages. Change-Id: Iad429f66156468098d8e7798c5cabed2481b92a4 Signed-off-by: Romain Forlot --- cmake/common.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 9904692..afc8ce0 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -155,9 +155,9 @@ macro(remote_targets_populate) ) if(NOT RSYNC_TARGET OR NOT RSYNC_PREFIX) - message (".. Warning: RSYNC_TARGET RSYNC_PREFIX not defined 'make remote-target-populate' not instanciated") + message ("${Yellow}.. Warning: RSYNC_TARGET RSYNC_PREFIX not defined 'make remote-target-populate' not instanciated${ColourReset}") add_custom_target(remote-target-populate - COMMENT "*** Fatal: RSYNC_TARGET RSYNC_PREFIX required with 'make remote-target-populate'" + COMMENT "${Red}*** Fatal: RSYNC_TARGET RSYNC_PREFIX environment variables required with 'make remote-target-populate'${ColourReset}" COMMAND exit -1 ) else() -- 2.16.6 From c46c36a2d0e1b27159fdb98cba89f45e4f3dfaa9 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Sun, 28 May 2017 13:36:12 +0200 Subject: [PATCH 08/16] Fix missing variable use for remote debug Change-Id: I73a3c490e9abe780a79ac24fbfc838e5bd18eade Signed-off-by: Romain Forlot --- cmake/common.cmake | 3 +++ cmake/config.cmake.sample | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/cmake/common.cmake b/cmake/common.cmake index afc8ce0..8e23af7 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -278,6 +278,9 @@ project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES ${PROJECT_LANGUAGES set(PROJECT_LIBDIR "${CMAKE_SOURCE_DIR}/libs" CACHE PATH "Subpath to libraries") set(PROJECT_RESOURCES "${CMAKE_SOURCE_DIR}/data" CACHE PATH "Subpath to data") +set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN") +set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN") + INCLUDE(FindPkgConfig) INCLUDE(CheckIncludeFiles) INCLUDE(CheckLibraryExists) diff --git a/cmake/config.cmake.sample b/cmake/config.cmake.sample index 73d3832..af5ad93 100644 --- a/cmake/config.cmake.sample +++ b/cmake/config.cmake.sample @@ -124,3 +124,10 @@ set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib) # - application/vnd.agl.html.hybrid # # set(WIDGET_TYPE MimeType) + + +# Optional Application Framework security token +# and port use for remote debugging. +#------------------------------------------------------------ +#set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN") +#set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN") \ No newline at end of file -- 2.16.6 From cff5c4f02ae1c76992dd8a08eefe32c8d05b054d Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 01:59:39 +0200 Subject: [PATCH 09/16] Add missing macro used in building RPM spec file Change-Id: I4058a9fc101b7aea0343a68557a2e5b76ec827f2 Signed-off-by: Romain Forlot --- cmake/common.cmake | 4 ++++ rpm/{config.spec.in => rpm-config.spec.in} | 0 2 files changed, 4 insertions(+) rename rpm/{config.spec.in => rpm-config.spec.in} (100%) diff --git a/cmake/common.cmake b/cmake/common.cmake index 8e23af7..1c931cb 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -52,6 +52,10 @@ macro(PROJECT_TARGET_ADD TARGET_NAME) set(TARGET_NAME ${TARGET_NAME}) endmacro(PROJECT_TARGET_ADD) +macro(PROJECT_PKGDEP_ADD PKG_NAME) + set_property(GLOBAL APPEND PROPERTY PROJECT_PKG_DEPS ${PKG_NAME}) +endmacro(PROJECT_PKGDEP_ADD) + # Check GCC minimal version if (gcc_minimal_version) message (STATUS "${Blue}-- Check gcc_minimal_version (found gcc version ${CMAKE_C_COMPILER_VERSION}) (found g++ version ${CMAKE_CXX_COMPILER_VERSION})${ColourReset}") diff --git a/rpm/config.spec.in b/rpm/rpm-config.spec.in similarity index 100% rename from rpm/config.spec.in rename to rpm/rpm-config.spec.in -- 2.16.6 From 1b16a2806eb6a22be45468771f7e72700112d1de Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:00:58 +0200 Subject: [PATCH 10/16] Renamed variables to avoid confusing Change-Id: Iddd9215f45001c3ed515e601e7ef2ba73161a703 Signed-off-by: Romain Forlot --- cmake/common.cmake | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 1c931cb..524e023 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -243,15 +243,15 @@ macro(rpm_package_build) endmacro(rpm_package_build) macro(project_package_build) - if(EXISTS ${TEMPLATE_RPM_DIR}) + if(EXISTS ${RPM_TEMPLATE_DIR}) rpm_package_build() endif() - if(EXISTS ${TEMPLATE_WGT_DIR}) + if(EXISTS ${WGT_TEMPLATE_DIR}) wgt_package_build() endif() - if(EXISTS ${TEMPLATE_DEB_DIR}) + if(EXISTS ${DEB_TEMPLATE_DIR}) deb_package_build() endif() endmacro(project_package_build) @@ -353,18 +353,20 @@ if(PACKAGE_PREFIX) else() 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}/${PROJECT_APP_TEMPLATES_DIR} CACHE PATH "Default Package Templates Directory") -set(SSH_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/ssh) -set(GDB_TEMPLATE_DIR ${PKG_TEMPLATE_PREFIX}/gdb) -set(TEMPLATE_WGT_DIR "${PKG_TEMPLATE_PREFIX}/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget") -set(TEMPLATE_RPM_DIR "${PKG_TEMPLATE_PREFIX}/rpm" CACHE PATH "Subpath to a directory where are stored needed files to build rpm package") -set(TEMPLATE_DEB_DIR "${PKG_TEMPLATE_PREFIX}/deb" CACHE PATH "Subpath to a directory where are stored needed files to build deb package") +set(SSH_TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/ssh" CACHE PATH "Subpath to a directory where are stored needed files to launch on remote target to debuging purposes") +set(GDB_TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/gdb" CACHE PATH "Subpath to a directory where are stored needed files to launch debuging server on a remote target. Use gdbserver.") +set(WGT_TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/wgt" CACHE PATH "Subpath to a directory where are stored needed files to build widget") +set(RPM_TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/rpm" CACHE PATH "Subpath to a directory where are stored needed files to build rpm package") +set(DEB_TEMPLATE_DIR "${PKG_TEMPLATE_PREFIX}/deb" CACHE PATH "Subpath to a directory where are stored needed files to build deb package") + +string(REGEX REPLACE "^(.*)/.*$" "\\1" ENTRY_POINT "${PKG_TEMPLATE_PREFIX}") +set(PROJECT_PKG_ENTRY_POINT ${ENTRY_POINT}/packaging CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.") # Default Linkflag if(NOT BINDINGS_LINK_FLAG) - set(BINDINGS_LINK_FLAG "-Wl,--version-script=${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/export.map") + set(BINDINGS_LINK_FLAG "-Wl,--version-script=${PKG_TEMPLATE_PREFIX}/cmake/export.map") endif() # Add a dummy target to enable global dependency order -- 2.16.6 From 71ad3c3141c8e5b0fd0a9a671c2230448ff80e26 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:01:40 +0200 Subject: [PATCH 11/16] Use FATAL_ERROR if missing file to build packages Change-Id: I5d1b0abf5447fdf9938d4c4d4b7ad0d921cf27a0 Signed-off-by: Romain Forlot --- cmake/common.cmake | 86 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 41 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 524e023..28de7b0 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -179,66 +179,70 @@ macro(remote_targets_populate) endmacro(remote_targets_populate) macro(wgt_package_build) - 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_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}) + if(NOT EXISTS ${WGT_TEMPLATE_DIR}/config.xml.in OR NOT EXISTS ${WGT_TEMPLATE_DIR}/icon-default.png) + MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need config.xml.in and ${PROJECT_ICON} files in ${WGT_TEMPLATE_DIR} folder.${ColourReset}") + endif() - # 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_BUILD_DIR}/etc/) - endif(${PROJECT_CONF_FILES}) + configure_file(${WGT_TEMPLATE_DIR}/config.xml.in ${PROJECT_PKG_BUILD_DIR}/config.xml) + configure_file(${WGT_TEMPLATE_DIR}/config.xml.in ${PROJECT_PKG_ENTRY_POINT}/config.xml) + file(COPY ${WGT_TEMPLATE_DIR}/icon-default.png DESTINATION ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}) - add_custom_command(OUTPUT ${PROJECT_NAME}.wgt - DEPENDS ${PROJECT_TARGETS} - COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_BUILD_DIR} - ) + # Fulup ??? copy any extra file in wgt/etc into populate package before building the widget + file(GLOB PROJECT_CONF_FILES "${WGT_TEMPLATE_DIR}/etc/*") + if(${PROJECT_CONF_FILES}) + file(COPY "${WGT_TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/) + endif(${PROJECT_CONF_FILES}) - add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt) - add_dependencies(widget populate) - set(ADDITIONAL_MAKE_CLEAN_FILES, "${PROJECT_NAME}.wgt") + add_custom_command(OUTPUT ${PROJECT_NAME}.wgt + DEPENDS ${PROJECT_TARGETS} + COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_BUILD_DIR} + ) - if(PACKAGE_MESSAGE) - add_custom_command(TARGET widget - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}") - endif() + add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt) + add_dependencies(widget populate) + set(ADDITIONAL_MAKE_CLEAN_FILES, "${PROJECT_NAME}.wgt") + + if(PACKAGE_MESSAGE) + add_custom_command(TARGET widget + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}") endif() endmacro(wgt_package_build) macro(rpm_package_build) - 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) - foreach (PKFCONF ${PROJECT_PKG_DEPS}) + if(NOT EXISTS ${RPM_TEMPLATE_DIR}/rpm-config.spec.in) + MESSAGE(FATAL_ERROR "${Red}Missing mandatory files: you need rpm-config.spec.in in ${RPM_TEMPLATE_DIR} folder.${ColourReset}") + endif() + + # extract PROJECT_PKG_DEPS and replace ; by , for RPM spec file + get_property(PROJECT_PKG_DEPS GLOBAL PROPERTY PROJECT_PKG_DEPS) + foreach (PKFCONF ${PROJECT_PKG_DEPS}) set(RPM_PKG_DEPS "${RPM_PKG_DEPS}, pkgconfig(${PKFCONF})") - endforeach() + endforeach() - # build rpm spec file from template - configure_file(${TEMPLATE_RPM_DIR}/config.spec.in ${PROJECT_PKG_BUILD_DIR}/config.spec) + # build rpm spec file from template + configure_file(${RPM_TEMPLATE_DIR}/rpm-config.spec.in ${PROJECT_PKG_BUILD_DIR}/${PROJECT_NAME}.spec) + configure_file(${RPM_TEMPLATE_DIR}/rpm-config.spec.in ${PROJECT_PKG_ENTRY_POINT}/${PROJECT_NAME}.spec) - add_custom_command(OUTPUT ${PROJECT_NAME}.spec - DEPENDS ${PROJECT_TARGETS} - COMMAND rpmbuild -ba ${PROJECT_PKG_BUILD_DIR}/config.spec - ) + add_custom_command(OUTPUT ${PROJECT_NAME}.spec + DEPENDS ${PROJECT_TARGETS} + COMMAND rpmbuild -ba ${PROJECT_PKG_BUILD_DIR}/${PROJECT_NAME}.spec + ) - add_custom_target(rpm DEPENDS ${PROJECT_NAME}.spec) - add_dependencies(rpm populate) - set(ADDITIONAL_MAKE_CLEAN_FILES, "${PROJECT_NAME}.spec") + add_custom_target(rpm DEPENDS ${PROJECT_NAME}.spec) + add_dependencies(rpm populate) + set(ADDITIONAL_MAKE_CLEAN_FILES, "${PROJECT_NAME}.spec") - if(PACKAGE_MESSAGE) - add_custom_command(TARGET rpm - POST_BUILD - COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}") - endif() + if(PACKAGE_MESSAGE) + add_custom_command(TARGET rpm + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${PACKAGE_MESSAGE}") endif() endmacro(rpm_package_build) -- 2.16.6 From 67979984ee8be9b96bf600d5191ab9df303ba73e Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:02:04 +0200 Subject: [PATCH 12/16] Always configure files to build widget. Change-Id: I78ff4d6333dcbb6786d5618a27b89ac9cd9e9ebc Signed-off-by: Romain Forlot --- cmake/common.cmake | 6 ------ 1 file changed, 6 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 28de7b0..d23614f 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -179,12 +179,6 @@ macro(remote_targets_populate) endmacro(remote_targets_populate) macro(wgt_package_build) - # 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_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}) if(NOT EXISTS ${WGT_TEMPLATE_DIR}/config.xml.in OR NOT EXISTS ${WGT_TEMPLATE_DIR}/icon-default.png) MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.\nYou need config.xml.in and ${PROJECT_ICON} files in ${WGT_TEMPLATE_DIR} folder.${ColourReset}") endif() -- 2.16.6 From 8ca8aa2c6182de0980956d4dbab68750e85ca58f Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:02:59 +0200 Subject: [PATCH 13/16] Overload CMAKE_INSTALL_PREFIX if custom defined Change-Id: I327d6af1862b4732f91d78abe26c7ffd6d2fbe51 Signed-off-by: Romain Forlot --- cmake/common.cmake | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index d23614f..fa7b369 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -310,7 +310,13 @@ set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -ggdb -Wp,-U_FORTIFY_SOURCE") set(CMAKE_CXX_FLAGS_RELEASE "-g -O2") set(CMAKE_CXX_FLAGS_CCOV "-g -O2 --coverage") -set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/Install" CACHE PATH "The path where to install") +# Env variable overload default +if(DEFINED ENV{INSTALL_PREFIX}) + set (INSTALL_PREFIX $ENV{INSTALL_PREFIX}) +else() + set(INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/Install" CACHE PATH "The path where to install") +endif() +set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX} CACHE STRING "Installation Prefix" FORCE) # (BUG!!!) as PKG_CONFIG_PATH does not work [should be en env variable] set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON CACHE BOOLEAN "Flag for using prefix path") -- 2.16.6 From 8b76b1a089eb6e18e4b0b3e55b322f770064856b Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:03:12 +0200 Subject: [PATCH 14/16] Format Change-Id: I5197065ea620cee4accca7e097df9a49b796c671 Signed-off-by: Romain Forlot --- cmake/common.cmake | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index fa7b369..04d144f 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -79,15 +79,15 @@ endmacro(defstr) # Pre-packaging macro(project_targets_populate) - # 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) + # 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) -- 2.16.6 From b370e2d20d131478dc593ee31a2dff5d8d3f9024 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 02:04:00 +0200 Subject: [PATCH 15/16] Trick to always execute popule http and data dir This will fake cmake to make it believe that the output produced by custom_command never exists so it have to re execute the command... Change-Id: I3836510d5c522b8f23991669eb07b08bf17aba5f Signed-off-by: Romain Forlot --- cmake/common.cmake | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index 04d144f..ee95906 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -123,20 +123,22 @@ macro(project_targets_populate) add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_BINDIR}/${P}${TARGET}) add_dependencies(populate ${POPULE_PACKAGE_TARGET}) elseif(${T} STREQUAL "HTDOCS") - add_custom_command(OUTPUT ${PACKAGE_HTTPDIR} + add_custom_command(OUTPUT ${PACKAGE_HTTPDIR}-xx DEPENDS ${TARGET} 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}) + add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR}-xx) add_dependencies(populate ${POPULE_PACKAGE_TARGET}) elseif(${T} STREQUAL "DATA") - add_custom_command(OUTPUT ${PACKAGE_DATADIR} + add_custom_command(OUTPUT ${PACKAGE_DATADIR}-xx DEPENDS ${TARGET} 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}) + add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_DATADIR}-xx) add_dependencies(populate ${POPULE_PACKAGE_TARGET}) endif(${T} STREQUAL "BINDING") elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]") -- 2.16.6 From 6ea964a015407b6273af24c66ef086bc3b31bf72 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 29 May 2017 10:40:04 +0200 Subject: [PATCH 16/16] Description Change-Id: I81f684b829d612fb58330cf0aeaca5e1097e3b4b Signed-off-by: Romain Forlot --- cmake/common.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/common.cmake b/cmake/common.cmake index ee95906..b29a83f 100644 --- a/cmake/common.cmake +++ b/cmake/common.cmake @@ -355,9 +355,9 @@ endif() # Define a default package directory if(PACKAGE_PREFIX) - set(PROJECT_PKG_BUILD_DIR ${PKG_PREFIX}/package CACHE PATH "Where the package will be built.") + set(PROJECT_PKG_BUILD_DIR ${PKG_PREFIX}/package CACHE PATH "Application contents to be packaged") else() - set(PROJECT_PKG_BUILD_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 "Application contents to be packaged") endif() set (PKG_TEMPLATE_PREFIX ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR} CACHE PATH "Default Package Templates Directory") -- 2.16.6