summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2018-11-05 10:38:16 +0100
committerRomain Forlot <romain.forlot@iot.bzh>2018-11-06 20:30:35 +0100
commit5f06de040287a5df88d21367da9e8725d8585ba1 (patch)
treebba4fb8aa6474b451f4f6f7af327c46ed6e181ae /src
parentdcdff18c4f09406ca1ec522fbde3f6f7342d8423 (diff)
Adding packaging files
Change-Id: I70d30588c59e6a0d3c451c74fc6cc565b5eea167 Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
Diffstat (limited to 'src')
-rw-r--r--src/cmake/cmake.d/01-build_options.cmake156
-rw-r--r--src/cmake/cmake.d/02-variables.cmake205
-rw-r--r--src/cmake/cmake.d/03-macros.cmake695
-rw-r--r--src/cmake/cmake.d/04-extra_targets.cmake69
-rw-r--r--src/cmake/common.cmake121
-rw-r--r--src/cmake/configure_file.cmake2
-rw-r--r--src/cmake/export.map1
-rw-r--r--src/samples.d/CMakeLists.txt.sample21
-rw-r--r--src/samples.d/config.cmake.sample201
-rw-r--r--src/samples.d/config.xml.in.sample142
-rw-r--r--src/samples.d/xds-config.env.sample10
-rwxr-xr-xsrc/template.d/autobuild/agl/autobuild.in75
-rwxr-xr-xsrc/template.d/autobuild/linux/autobuild.in75
-rw-r--r--src/template.d/config.xml.in9
-rw-r--r--src/template.d/deb-config.dsc.in15
-rw-r--r--src/template.d/deb-config.install.in2
-rw-r--r--src/template.d/debian.changelog.in5
-rw-r--r--src/template.d/debian.compat.in1
-rw-r--r--src/template.d/debian.control.in16
-rw-r--r--src/template.d/debian.rules.in87
-rw-r--r--src/template.d/gdb-on-target.ini.in39
-rwxr-xr-xsrc/template.d/install-wgt-on-target.sh.in19
-rw-r--r--src/template.d/rpm-config.spec.in62
-rwxr-xr-xsrc/template.d/start-on-target.sh.in35
-rw-r--r--src/template.d/xds-project-target.conf.in12
-rw-r--r--src/test-wgt/launcher.sh.in69
-rw-r--r--src/test-wgt/test-config.xml.in25
-rw-r--r--src/wgt/icon-default.pngbin0 -> 10651 bytes
-rw-r--r--src/wgt/icon-html5.pngbin0 -> 6848 bytes
-rw-r--r--src/wgt/icon-native.pngbin0 -> 5276 bytes
-rw-r--r--src/wgt/icon-qml.pngbin0 -> 4971 bytes
-rw-r--r--src/wgt/icon-service.pngbin0 -> 13273 bytes
32 files changed, 2169 insertions, 0 deletions
diff --git a/src/cmake/cmake.d/01-build_options.cmake b/src/cmake/cmake.d/01-build_options.cmake
new file mode 100644
index 0000000..3b1eca7
--- /dev/null
+++ b/src/cmake/cmake.d/01-build_options.cmake
@@ -0,0 +1,156 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# authors: Fulup Ar Foll <fulup@iot.bzh>
+# Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+
+#--------------------------------------------------------------------------
+# WARNING:
+# Do not change this cmake template
+# Customise your preferences in "./conf.d/cmake/config.cmake"
+#--------------------------------------------------------------------------
+
+# (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")
+
+INCLUDE(FindPkgConfig)
+INCLUDE(CheckIncludeFiles)
+INCLUDE(CheckLibraryExists)
+INCLUDE(GNUInstallDirs)
+
+if(NOT CMAKE_BUILD_TYPE)
+ if(BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE ${BUILD_TYPE} CACHE STRING "the type of build" FORCE)
+ else()
+ set(CMAKE_BUILD_TYPE RELEASE CACHE STRING "the type of build" FORCE)
+ endif()
+endif()
+if(NOT DEFINED BUILD_TEST_WGT)
+ set(BUILD_TEST_WGT FALSE)
+endif()
+
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+set(CMP0048 1)
+
+# Default compilation options
+############################################################################
+link_libraries(-Wl,--as-needed -Wl,--gc-sections)
+set(COMPILE_OPTIONS -Wall
+ -Wextra
+ -Wconversion
+ -Wno-unused-parameter
+ -Wno-sign-compare
+ -Wno-sign-conversion
+ -Werror=implicit-function-declaration
+ -ffunction-sections
+ -fdata-sections
+ -fPIC CACHE STRING "Compilation flags")
+
+set(COMPILE_OPTIONS_GNU -Werror=maybe-uninitialized CACHE STRING "GNU Compile specific options")
+set(COMPILE_OPTIONS_CLANG -Werror=uninitialized CACHE STRING "CLang compile specific options")
+
+# Compilation OPTIONS depending on language
+#########################################
+foreach(option ${COMPILE_OPTIONS})
+ add_compile_options(${option})
+endforeach()
+
+if (${CMAKE_C_COMPILER_ID} STREQUAL "GNU" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
+ foreach(option ${COMPILE_OPTIONS_GNU})
+ add_compile_options(${option})
+ endforeach()
+elseif(${CMAKE_C_COMPILER_ID} STREQUAL "Clang" OR ${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
+ foreach(option ${COMPILE_OPTIONS_CLANG})
+ add_compile_options(${option})
+ endforeach()
+endif()
+
+foreach(option ${C_COMPILE_OPTIONS})
+ add_compile_options($<$<COMPILE_LANGUAGE:C>:${option}>)
+endforeach()
+foreach(option ${CXX_COMPILE_OPTIONS})
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:${option}>)
+endforeach()
+
+# Compilation option depending on CMAKE_BUILD_TYPE
+##################################################
+set(PROFILING_COMPILE_OPTIONS
+ -g
+ -O0
+ -pg
+ -Wp,-U_FORTIFY_SOURCE
+ CACHE STRING "Compilation flags for PROFILING build type.")
+set(DEBUG_COMPILE_OPTIONS
+ -g
+ -O0
+ -ggdb
+ CACHE STRING "Compilation flags for DEBUG build type.")
+set(COVERAGE_COMPILE_OPTIONS
+ -g
+ -O0
+ --coverage
+ CACHE STRING "Compilation flags for COVERAGE build type.")
+set(RELEASE_COMPILE_OPTIONS
+ -O2
+ -D_FORTIFY_SOURCE=2
+ CACHE STRING "Compilation flags for RELEASE build type.")
+
+foreach(option ${PROFILING_COMPILE_OPTIONS})
+ add_compile_options($<$<CONFIG:PROFILING>:${option}>)
+endforeach()
+foreach(option ${DEBUG_COMPILE_OPTIONS})
+ add_compile_options($<$<CONFIG:DEBUG>:${option}>)
+endforeach()
+foreach(option ${COVERAGE_COMPILE_OPTIONS})
+ add_compile_options($<$<CONFIG:COVERAGE>:${option}>)
+endforeach()
+foreach(option ${RELEASE_COMPILE_OPTIONS})
+ add_compile_options($<$<CONFIG:RELEASE>:${option}>)
+endforeach()
+
+# Loop on required package and add options
+foreach (PKG_CONFIG ${PKG_REQUIRED_LIST})
+ 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})
+endforeach(PKG_CONFIG)
+
+# Optional LibEfence Malloc debug library
+IF(CMAKE_BUILD_TYPE MATCHES DEBUG AND USE_EFENCE)
+CHECK_LIBRARY_EXISTS(efence malloc "" HAVE_LIBEFENCE)
+IF(HAVE_LIBEFENCE)
+ MESSAGE("Linking with ElectricFence for debugging purposes...")
+ SET(libefence_LIBRARIES "-lefence")
+ list (APPEND link_libraries ${libefence_LIBRARIES})
+ENDIF(HAVE_LIBEFENCE)
+ENDIF(CMAKE_BUILD_TYPE MATCHES DEBUG AND USE_EFENCE)
+IF(${CMAKE_BUILD_TYPE} MATCHES COVERAGE)
+ list (APPEND link_libraries -coverage)
+ENDIF(${CMAKE_BUILD_TYPE} MATCHES COVERAGE)
+
+# set default include directories
+INCLUDE_DIRECTORIES(${EXTRA_INCLUDE_DIRS})
+
+# Default Linkflag
+get_filename_component(PKG_TEMPLATE_PREFIX "${CMAKE_CURRENT_LIST_DIR}/../.." REALPATH CACHE)
+
+if(NOT BINDINGS_LINK_FLAG)
+ set(BINDINGS_LINK_FLAG "-Wl,--version-script=${PKG_TEMPLATE_PREFIX}/cmake/export.map")
+endif()
diff --git a/src/cmake/cmake.d/02-variables.cmake b/src/cmake/cmake.d/02-variables.cmake
new file mode 100644
index 0000000..951a681
--- /dev/null
+++ b/src/cmake/cmake.d/02-variables.cmake
@@ -0,0 +1,205 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+# contrib: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+
+#--------------------------------------------------------------------------
+# WARNING:
+# Do not change this cmake template
+# Customise your preferences in "./etc/config.cmake"
+#--------------------------------------------------------------------------
+
+# Get colorized message output non Windows OS. You know bash ? :)
+if(NOT WIN32)
+ string(ASCII 27 Esc)
+ set(ColourReset "${Esc}[m")
+ set(ColourBold "${Esc}[1m")
+ set(Red "${Esc}[31m")
+ set(Green "${Esc}[32m")
+ set(Yellow "${Esc}[33m")
+ set(Blue "${Esc}[34m")
+ set(Magenta "${Esc}[35m")
+ set(Cyan "${Esc}[36m")
+ set(White "${Esc}[37m")
+ set(BoldRed "${Esc}[1;31m")
+ set(BoldGreen "${Esc}[1;32m")
+ set(BoldYellow "${Esc}[1;33m")
+ set(BoldBlue "${Esc}[1;34m")
+ set(BoldMagenta "${Esc}[1;35m")
+ set(BoldCyan "${Esc}[1;36m")
+ set(BoldWhite "${Esc}[1;37m")
+endif()
+
+# Native packaging name
+set(NPKG_PROJECT_NAME agl-${PROJECT_NAME})
+
+string(REGEX MATCH "[0-9]+" LINUX_VERSION_CODE ${LINUX_VERSION_CODE_LINE})
+math(EXPR a "${LINUX_VERSION_CODE} >> 16")
+math(EXPR b "(${LINUX_VERSION_CODE} >> 8) & 255")
+math(EXPR c "(${LINUX_VERSION_CODE} & 255)")
+
+set(KERNEL_VERSION "${a}.${b}.${c}")
+
+# Setup project and app-templates version variables
+execute_process(COMMAND git describe --abbrev=0
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE GIT_PROJECT_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+
+# Get the git commit hash to append to the version
+execute_process(COMMAND git rev-parse --short HEAD
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE COMMIT_HASH
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+
+# Detect unstaged or untracked changes
+execute_process(COMMAND git status --short
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ OUTPUT_VARIABLE DIRTY_FLAG
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ ERROR_QUIET
+)
+
+# Include project configuration
+# ------------------------------
+if(NOT DEFINED PROJECT_VERSION AND NOT DEFINED GIT_PROJECT_VERSION)
+ message(FATAL_ERROR "${Red}No version tag found from your project's source directory and no PROJECT_VERSION set in your config.cmake file. Abort!")
+elseif(NOT DEFINED PROJECT_VERSION AND DEFINED GIT_PROJECT_VERSION)
+ set(PROJECT_VERSION ${GIT_PROJECT_VERSION})
+endif()
+
+# Release additionnals informations isn't supported so setting project
+# attributes then add the dirty flag if git repo not sync'ed
+project(${PROJECT_NAME} VERSION ${PROJECT_VERSION} LANGUAGES ${PROJECT_LANGUAGES})
+if(NOT ${DIRTY_FLAG})
+ set(PROJECT_VERSION "${PROJECT_VERSION}-${COMMIT_HASH}-dirty")
+else()
+ set(PROJECT_VERSION "${PROJECT_VERSION}-${COMMIT_HASH}")
+endif()
+
+set(AFB_TOKEN "" CACHE PATH "Default AFB_TOKEN")
+set(AFB_REMPORT "1234" CACHE PATH "Default AFB_TOKEN")
+
+# Check GCC minimal version
+if (gcc_minimal_version)
+ message ("${Cyan}-- Check gcc_minimal_version (found gcc version ${CMAKE_C_COMPILER_VERSION}) \
+ (found g++ version ${CMAKE_CXX_COMPILER_VERSION})${ColourReset}")
+
+ if (("${PROJECT_LANGUAGES}" MATCHES "CXX"
+ AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version})
+ OR CMAKE_C_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version})
+ message(FATAL_ERROR "${Red}**** FATAL: Require at least gcc-${gcc_minimal_version} please set CMAKE_C[XX]_COMPILER")
+ endif()
+endif(gcc_minimal_version)
+
+# Check Kernel mandatory version, will fail the configuration if required version not matched.
+if (kernel_mandatory_version)
+ message("${Cyan}-- Check kernel_mandatory_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
+ if (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+ message(FATAL_ERROR "${Red}**** \
+ FATAL: Require at least ${kernel_mandatory_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
+ endif (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+endif(kernel_mandatory_version)
+
+# Check Kernel minimal version just print a Warning about missing features
+# and set a definition to be used as preprocessor condition in code to disable
+# incompatibles features.
+if (kernel_minimal_version)
+ message ( "${Cyan}-- Check kernel_minimal_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
+ if (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
+ message(WARNING "${Yellow}**** \
+ Warning: Some feature(s) require at least ${kernel_minimal_version}. \
+ Please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.\
+ ${ColourReset}")
+ else (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
+ add_definitions(-DKERNEL_MINIMAL_VERSION_OK)
+ endif (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
+endif(kernel_minimal_version)
+
+# Project path variables
+# ----------------------
+set(PKGOUT_DIR package CACHE PATH "Output directory for packages")
+
+# Define a default package directory
+if(PKG_PREFIX)
+ set(PROJECT_PKG_BUILD_DIR ${PKG_PREFIX}/${PKGOUT_DIR}
+ CACHE PATH "Application contents to be packaged")
+else()
+ set(PROJECT_PKG_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PKGOUT_DIR}
+ CACHE PATH "Application contents to be packaged")
+endif()
+
+set(PROJECT_APP_TEMPLATES_DIR "${CMAKE_CURRENT_LIST_DIR}/../..")
+
+set(TEMPLATE_DIR "${PROJECT_APP_TEMPLATES_DIR}/template.d"
+ CACHE PATH "Subpath to a directory where are stored needed files to launch on remote target to debuging purposes")
+
+set(PROJECT_PKG_ENTRY_POINT ${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/packaging
+ CACHE PATH "Where package build files, like rpm.spec file or config.xml, are write.")
+set(WIDGET_ICON "${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/wgt/${PROJECT_ICON}"
+ CACHE PATH "Path to the widget icon")
+
+if(NOT WIDGET_CONFIG_TEMPLATE)
+ set(WIDGET_CONFIG_TEMPLATE ${TEMPLATE_DIR}/config.xml.in
+ CACHE PATH "Path to widget config file template (config.xml.in)")
+endif()
+
+# Path to autobuild template
+set(PROJECT_AGL_AUTOBUILD_DIR ${CMAKE_SOURCE_DIR}/autobuild/agl
+ CACHE PATH "Subpath to a directory where are stored autobuild script")
+set(PROJECT_LINUX_AUTOBUILD_DIR ${CMAKE_SOURCE_DIR}/autobuild/linux
+ CACHE PATH "Subpath to a directory where are stored autobuild script")
+
+if(OSRELEASE MATCHES "debian" AND NOT DEFINED ENV{SDKTARGETSYSROOT} AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
+ # build deb spec file from template
+ set(PACKAGING_DEB_OUTPUT_DSC ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}.dsc)
+ set(PACKAGING_DEB_OUTPUT_INSTALL ${PROJECT_PKG_ENTRY_POINT}/debian.${NPKG_PROJECT_NAME}.install)
+ set(PACKAGING_DEB_OUTPUT_CHANGELOG ${PROJECT_PKG_ENTRY_POINT}/debian.changelog)
+ set(PACKAGING_DEB_OUTPUT_COMPAT ${PROJECT_PKG_ENTRY_POINT}/debian.compat)
+ set(PACKAGING_DEB_OUTPUT_CONTROL ${PROJECT_PKG_ENTRY_POINT}/debian.control)
+ set(PACKAGING_DEB_OUTPUT_RULES ${PROJECT_PKG_ENTRY_POINT}/debian.rules)
+endif()
+
+# Break After Binding are loaded but before they get initialised
+set(GDB_INITIAL_BREAK "personality" CACHE STRING "Initial Break Point for GDB remote")
+
+# Define some checker binaries to verify input DATA files
+# to be included in package. Schema aren't checked for now.
+# Dummy checker about JSON.
+set(LUA_CHECKER "luac" "-p" CACHE STRING "LUA compiler")
+set(XML_CHECKER "xmllint" CACHE STRING "XML linter")
+set(JSON_CHECKER "" CACHE STRING "JSON linter")
+
+# Default GNU directories path variables
+set(BINDIR bin CACHE PATH "User executables")
+set(ETCDIR etc CACHE PATH "Read only system configuration data")
+set(LIBDIR lib CACHE PATH "System library directory")
+set(HTTPDIR htdocs CACHE PATH "HTML5 data directory")
+set(DATADIR var CACHE PATH "External data resources files")
+
+# Normally CMake uses the build tree for the RPATH when building executables
+# etc on systems that use RPATH. When the software is installed the executables
+# etc are relinked by CMake to have the install RPATH. If this variable is set
+# to true then the software is always built with the install path for the RPATH
+# and does not need to be relinked when installed.
+# Rpath could be set and controlled by target property INSTALL_RPATH
+set(CMAKE_BUILD_WITH_INSTALL_RPATH true)
diff --git a/src/cmake/cmake.d/03-macros.cmake b/src/cmake/cmake.d/03-macros.cmake
new file mode 100644
index 0000000..0a94564
--- /dev/null
+++ b/src/cmake/cmake.d/03-macros.cmake
@@ -0,0 +1,695 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+# contrib: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+#--------------------------------------------------------------------------
+# WARNING:
+# Do not change this cmake template
+# Customise your preferences in "./conf.d/cmake/config.cmake"
+#--------------------------------------------------------------------------
+# CMake 3.6 imported macros to simulate list(FILTER ...) subcommand
+#--------------------------------------------------------------------------
+MACRO(prevent_in_source_build)
+ execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/CMakeCache.txt
+ ${CMAKE_SOURCE_DIR}/CMakeCacheForScript.cmake
+ ${CMAKE_SOURCE_DIR}/CMakeFiles
+ ${CMAKE_SOURCE_DIR}/cmake_install.cmake)
+
+ get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
+ get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
+
+ if(${srcdir} STREQUAL ${bindir})
+ message(FATAL_ERROR "${Red}**** ERROR: You trying to build the project from the source directory or a previous build in-source occured. This isn't allowed, you have to clean CMakeCache.txt file from your source directory (${srcdir}), and build from a separate directory. ****\n")
+ endif()
+ENDMACRO(prevent_in_source_build)
+
+MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
+ SET(DEFAULT_ARGS)
+ FOREACH(arg_name ${arg_names})
+ SET(${prefix}_${arg_name})
+ ENDFOREACH(arg_name)
+ FOREACH(option ${option_names})
+ SET(${prefix}_${option} FALSE)
+ ENDFOREACH(option)
+
+ SET(current_arg_name DEFAULT_ARGS)
+ SET(current_arg_list)
+ FOREACH(arg ${ARGN})
+ LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
+ IF (is_arg_name)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ SET(current_arg_name ${arg})
+ SET(current_arg_list)
+ ELSE (is_arg_name)
+ LIST_CONTAINS(is_option ${arg} ${option_names})
+ IF (is_option)
+ SET(${prefix}_${arg} TRUE)
+ ELSE (is_option)
+ SET(current_arg_list ${current_arg_list} ${arg})
+ ENDIF (is_option)
+ ENDIF (is_arg_name)
+ ENDFOREACH(arg)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(PARSE_ARGUMENTS)
+
+MACRO(LIST_CONTAINS var value)
+ SET(${var})
+ FOREACH (value2 ${ARGN})
+ IF (${value} STREQUAL ${value2})
+ SET(${var} TRUE)
+ ENDIF (${value} STREQUAL ${value2})
+ ENDFOREACH (value2)
+ENDMACRO(LIST_CONTAINS)
+
+MACRO(LIST_FILTER)
+ PARSE_ARGUMENTS(LIST_FILTER "OUTPUT_VARIABLE" "" ${ARGV})
+ # Check arguments.
+ LIST(LENGTH LIST_FILTER_DEFAULT_ARGS LIST_FILTER_default_length)
+ IF(${LIST_FILTER_default_length} EQUAL 0)
+ MESSAGE(FATAL_ERROR "LIST_FILTER: missing list variable.")
+ ENDIF(${LIST_FILTER_default_length} EQUAL 0)
+
+ IF(${LIST_FILTER_default_length} EQUAL 1)
+ MESSAGE(FATAL_ERROR "LIST_FILTER: missing regular expression variable.")
+ ENDIF(${LIST_FILTER_default_length} EQUAL 1)
+
+ # Reset output variable
+ IF(NOT LIST_FILTER_OUTPUT_VARIABLE)
+ SET(LIST_FILTER_OUTPUT_VARIABLE "LIST_FILTER_internal_output")
+ ENDIF(NOT LIST_FILTER_OUTPUT_VARIABLE)
+ SET(${LIST_FILTER_OUTPUT_VARIABLE})
+
+ # Extract input list from arguments
+ LIST(GET LIST_FILTER_DEFAULT_ARGS 0 LIST_FILTER_input_list)
+ LIST(REMOVE_AT LIST_FILTER_DEFAULT_ARGS 0)
+ FOREACH(LIST_FILTER_item ${${LIST_FILTER_input_list}})
+ FOREACH(LIST_FILTER_regexp_var ${LIST_FILTER_DEFAULT_ARGS})
+ FOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
+ IF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
+ LIST(APPEND ${LIST_FILTER_OUTPUT_VARIABLE} ${LIST_FILTER_item})
+ ENDIF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
+ ENDFOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
+ ENDFOREACH(LIST_FILTER_regexp_var)
+ ENDFOREACH(LIST_FILTER_item)
+
+ # If OUTPUT_VARIABLE is not specified, overwrite the input list.
+ IF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
+ SET(${LIST_FILTER_input_list} ${${LIST_FILTER_OUTPUT_VARIABLE}})
+ ENDIF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
+ENDMACRO(LIST_FILTER)
+
+# Generic useful macro
+# -----------------------
+macro(set_install_prefix)
+ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND INSTALL_PREFIX)
+ message("-- Overwrite the CMAKE default install prefix with ${INSTALL_PREFIX}")
+ set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX} CACHE PATH "Install prefix" FORCE)
+ endif()
+
+ # (BUG!!!) as PKG_CONFIG_PATH does not work [should be an env variable]
+ # ---------------------------------------------------------------------
+ set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}/lib64/pkgconfig ${CMAKE_INSTALL_PREFIX}/lib/pkgconfig CACHE PATH 'Prefix Path list used by pkgconfig module')
+ set(LD_LIBRARY_PATH ${CMAKE_INSTALL_PREFIX}/lib64 ${CMAKE_INSTALL_PREFIX}/lib CACHE PATH 'Path list where to search for libraries')
+endmacro()
+
+macro(PROJECT_TARGET_ADD TARGET_NAME)
+ set_property(GLOBAL APPEND PROPERTY PROJECT_TARGETS ${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)
+
+macro(defstr name value)
+ add_definitions(-D${name}=${value})
+endmacro(defstr)
+
+macro(configure_files_in_dir dir)
+ file(GLOB filelist "${dir}/*in")
+ foreach(file ${filelist})
+ get_filename_component(filename ${file} NAME)
+ string(REGEX REPLACE "target" "${RSYNC_TARGET}" destinationfile ${filename})
+ string(REGEX REPLACE ".in$" "" destinationfile ${destinationfile})
+ configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR}/target/${destinationfile})
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/target/${destinationfile}")
+ endforeach()
+endmacro(configure_files_in_dir)
+
+# Create custom target dedicated for HTML5 and DATA AGL target type
+macro(add_input_files 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$")
+
+ add_custom_target(${TARGET_NAME} ALL
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}
+ )
+
+ 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 ${LUA_CHECKER} ${file}
+ )
+ 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 ${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}
+ 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()
+
+# Set the name of the OPENAPI definition JSON file for binding v2
+macro(set_openapi_filename openapi_filename)
+ set(OPENAPI_DEF ${openapi_filename}
+ CACHE STRING "OpenAPI JSON file name used to generate binding header file before building a binding v2 target.")
+endmacro()
+
+# Common command to call inside project_targets_populate macro
+macro(generate_one_populate_target OUTPUTFILES PKG_DESTDIR)
+ add_custom_command(OUTPUT ${PKG_DESTDIR}/${OUTPUTFILES}
+ DEPENDS ${BD}/${OUTPUTFILES}
+ COMMAND mkdir -p ${PKG_DESTDIR}
+ COMMAND touch ${PKG_DESTDIR}
+ COMMAND cp -r ${BD}/${OUTPUTFILES}/* ${PKG_DESTDIR} 2> /dev/null || cp ${BD}/${OUTPUTFILES} ${PKG_DESTDIR}
+ )
+
+ add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PKG_DESTDIR}/${OUTPUTFILES})
+ add_dependencies(populate ${POPULE_PACKAGE_TARGET})
+ add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
+endmacro()
+
+# To be call inside project_targets_populate macro
+macro(afb_genskel)
+ set (ARGSLIST ${ARGN})
+
+ if ("${PROJECT_LANGUAGES}" MATCHES "CXX")
+ list(APPEND ARGSLIST "--cpp")
+ endif()
+
+ if (OPENAPI_DEF)
+ add_custom_command(OUTPUT ${SD}/${OPENAPI_DEF}.h
+ DEPENDS ${SD}/${OPENAPI_DEF}.json
+ COMMAND afb-genskel ${ARGSLIST} ${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 ${ARGSLIST} ${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()
+endmacro()
+
+# Pre-packaging
+macro(project_targets_populate)
+ # Default Widget default directory
+ set(PACKAGE_BINDIR ${PROJECT_PKG_BUILD_DIR}/${BINDIR})
+ set(PACKAGE_ETCDIR ${PROJECT_PKG_BUILD_DIR}/${ETCDIR})
+ set(PACKAGE_LIBDIR ${PROJECT_PKG_BUILD_DIR}/${LIBDIR})
+ set(PACKAGE_HTTPDIR ${PROJECT_PKG_BUILD_DIR}/${HTTPDIR})
+ set(PACKAGE_DATADIR ${PROJECT_PKG_BUILD_DIR}/${DATADIR})
+ # Default test Widget default directory
+ string(REGEX REPLACE "/([^/]*)$" "/\\1-test" PROJECT_PKG_TEST_DIR "${PROJECT_PKG_BUILD_DIR}")
+ set(PACKAGE_TEST_BINDIR ${PROJECT_PKG_TEST_DIR}/${BINDIR})
+ set(PACKAGE_TEST_ETCDIR ${PROJECT_PKG_TEST_DIR}/${ETCDIR})
+ set(PACKAGE_TEST_LIBDIR ${PROJECT_PKG_TEST_DIR}/${LIBDIR})
+ set(PACKAGE_TEST_HTTPDIR ${PROJECT_PKG_TEST_DIR}/${HTTPDIR})
+ set(PACKAGE_TEST_DATADIR ${PROJECT_PKG_TEST_DIR}/${DATADIR})
+
+ add_custom_command(OUTPUT ${PACKAGE_BINDIR}
+ ${PACKAGE_ETCDIR}
+ ${PACKAGE_LIBDIR}
+ ${PACKAGE_HTTPDIR}
+ ${PACKAGE_DATADIR}
+ ${PACKAGE_TEST_BINDIR}
+ ${PACKAGE_TEST_ETCDIR}
+ ${PACKAGE_TEST_LIBDIR}
+ ${PACKAGE_TEST_HTTPDIR}
+ ${PACKAGE_TEST_DATADIR}
+ COMMAND mkdir -p ${PACKAGE_BINDIR}
+ COMMAND mkdir -p ${PACKAGE_ETCDIR}
+ COMMAND mkdir -p ${PACKAGE_LIBDIR}
+ COMMAND mkdir -p ${PACKAGE_HTTPDIR}
+ COMMAND mkdir -p ${PACKAGE_DATADIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_BINDIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_ETCDIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_LIBDIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_HTTPDIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_DATADIR}
+ )
+ add_custom_target(populate DEPENDS ${PACKAGE_BINDIR}
+ ${PACKAGE_ETCDIR}
+ ${PACKAGE_LIBDIR}
+ ${PACKAGE_HTTPDIR}
+ ${PACKAGE_DATADIR}
+ ${PACKAGE_TEST_BINDIR}
+ ${PACKAGE_TEST_ETCDIR}
+ ${PACKAGE_TEST_LIBDIR}
+ ${PACKAGE_TEST_HTTPDIR}
+ ${PACKAGE_TEST_DATADIR})
+
+ # Dirty trick to define a default INSTALL command for app-templates handled
+ # targets
+ INSTALL(CODE "execute_process(COMMAND make populate)")
+ if(NO_DEDICATED_INSTALL_DIR)
+ INSTALL(DIRECTORY ${PROJECT_PKG_BUILD_DIR}/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}
+ )
+ else()
+ INSTALL(DIRECTORY ${PROJECT_PKG_BUILD_DIR}/
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}
+ )
+ endif()
+
+ get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
+ foreach(TARGET ${PROJECT_TARGETS})
+ # Declaration of a custom command that will populate widget tree with the target
+ set(POPULE_PACKAGE_TARGET "project_populate_${TARGET}")
+ get_target_property(T ${TARGET} LABELS)
+
+ if(T)
+ 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)
+
+ if(P MATCHES "NOTFOUND$")
+ if (${T} STREQUAL "LIBRARY" OR
+ ${T} MATCHES "^BINDINGV?.?$")
+ set(P "lib")
+ else()
+ set(P "")
+ endif()
+ endif()
+
+ get_target_property(IMPPATH ${TARGET} IMPORTED_LOCATION)
+ if(${T} STREQUAL "LIBRARY")
+ unset(BD)
+ generate_one_populate_target(${IMPPATH} ${PACKAGE_LIBDIR})
+ elseif(${T} STREQUAL "TEST-LIBRARY")
+ unset(BD)
+ generate_one_populate_target(${IMPPATH} ${PACKAGE_TEST_LIBDIR})
+ elseif(${T} STREQUAL "PLUGIN")
+ if(NOT S)
+ set(S ".ctlso")
+ endif()
+ generate_one_populate_target(${P}${OUT}${S} "${PACKAGE_LIBDIR}/plugins")
+ elseif(${T} STREQUAL "TEST-PLUGIN")
+ if(NOT S)
+ set(S ".ctlso")
+ endif()
+ generate_one_populate_target(${P}${OUT}${S} "${PACKAGE_TEST_LIBDIR}/plugins")
+ elseif(${T} STREQUAL "BINDING")
+ if(NOT S)
+ set(S ".so")
+ endif()
+ list(APPEND BINDINGS_LIST "${P}${OUT}${S}")
+ generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_LIBDIR})
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
+ )
+ elseif(${T} STREQUAL "BINDINGV2")
+ if(NOT S)
+ set(S ".so")
+ endif()
+ afb_genskel("-2")
+ generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_LIBDIR})
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
+ )
+ elseif(${T} STREQUAL "BINDINGV3")
+ if(NOT S)
+ set(S ".so")
+ endif()
+ afb_genskel("-3")
+ generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_LIBDIR})
+ SET_TARGET_PROPERTIES(${TARGET} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
+ )
+ elseif(${T} STREQUAL "EXECUTABLE")
+ if(NOT S)
+ set(S "")
+ endif()
+ if(NOT OUT AND IMPPATH)
+ unset(BD)
+ generate_one_populate_target(${IMPPATH} ${PACKAGE_BINDIR})
+ else()
+ generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_BINDIR})
+ endif()
+ elseif(${T} STREQUAL "TEST-EXECUTABLE")
+ if(NOT S)
+ set(S "")
+ endif()
+ if(NOT OUT AND IMPPATH)
+ unset(BD)
+ generate_one_populate_target(${IMPPATH} ${PACKAGE_TEST_BINDIR})
+ else()
+ generate_one_populate_target(${P}${OUT}${S} ${PACKAGE_TEST_BINDIR})
+ endif()
+ elseif(${T} STREQUAL "HTDOCS")
+ generate_one_populate_target(${P}${OUT} ${PACKAGE_HTTPDIR})
+ elseif(${T} STREQUAL "TEST-HTDOCS")
+ generate_one_populate_target(${P}${OUT} ${PACKAGE_HTTPDIR})
+ elseif(${T} STREQUAL "DATA" )
+ generate_one_populate_target(${TARGET} ${PACKAGE_DATADIR})
+ elseif(${T} STREQUAL "TEST-DATA")
+ generate_one_populate_target(${TARGET} ${PACKAGE_TEST_DATADIR})
+ elseif(${T} STREQUAL "BINDING-CONFIG" )
+ generate_one_populate_target(${TARGET} ${PACKAGE_ETCDIR})
+ elseif(${T} STREQUAL "TEST-CONFIG")
+ generate_one_populate_target(${TARGET} ${PACKAGE_TEST_ETCDIR})
+ endif()
+ elseif("${CMAKE_BUILD_TYPE}" MATCHES "[Dd][Ee][Bb][Uu][Gg]")
+ MESSAGE("${BoldBlue}.. Notice: ${TARGET} ignored when packaging.${ColourReset}")
+ 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 ("${Yellow}.. Warning: RSYNC_TARGET RSYNC_PREFIX not defined 'make remote-target-populate' not instanciated${ColourReset}")
+ add_custom_target(remote-target-populate
+ COMMENT "${Red}*** Fatal: RSYNC_TARGET RSYNC_PREFIX environment variables required with 'make remote-target-populate'${ColourReset}"
+ 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(${TEMPLATE_DIR})
+ configure_files_in_dir(${TEMPLATE_DIR})
+
+ 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}
+ )
+
+ 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)
+
+macro(wgt_package_build)
+ if(NOT EXISTS ${TEST_WIDGET_CONFIG_TEMPLATE})
+ MESSAGE("${BoldBlue}-- Notice: Using default test widget configuration's file.
+-- If you want to use a customized test-config.xml template then specify TEST_WIDGET_CONFIG_TEMPLATE in your config.cmake file.${ColourReset}")
+
+ set(TEST_WIDGET_CONFIG_TEMPLATE "${PROJECT_APP_TEMPLATES_DIR}/test-wgt/test-config.xml.in"
+ CACHE PATH "Path to the test widget config file template (test-config.xml.in)")
+ endif()
+ if(NOT EXISTS ${WIDGET_CONFIG_TEMPLATE})
+ MESSAGE(FATAL_ERROR "${Red}WARNING ! Missing mandatory files to build widget file.
+You need a config.xml template: please specify WIDGET_CONFIG_TEMPLATE correctly.${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)")
+ endif()
+ if(NOT DEFINED PROJECT_ICON)
+ if( ${WIDGET_TYPE} MATCHES "agl.native")
+ set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-native.png)
+ elseif( ${WIDGET_TYPE} MATCHES "agl.service")
+ set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-service.png)
+ elseif( ${WIDGET_TYPE} MATCHES "x-executable")
+ set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-qml.png)
+ elseif( ${WIDGET_TYPE} MATCHES "text/html")
+ set(ICON_PATH ${PKG_APP_TEMPLATE_DIR}/wgt/icon-html5.png)
+ endif()
+ elseif(EXISTS "${CMAKE_SOURCE_DIR}/${WIDGET_ICON}")
+ set(ICON_PATH "${CMAKE_SOURCE_DIR}/${WIDGET_ICON}")
+ elseif(EXISTS "${WIDGET_ICON}")
+ set(ICON_PATH "${WIDGET_ICON}")
+ else()
+ set(ICON_PATH ${PROJECT_APP_TEMPLATES_DIR}/wgt/icon-default.png)
+ endif()
+
+ if(NOT WIDGET_ENTRY_POINT)
+ set(WIDGET_ENTRY_POINT lib)
+ endif()
+
+ if(NOT ${CMAKE_BUILD_TYPE} STREQUAL "RELEASE")
+ string(TOLOWER "${PROJECT_NAME}-${CMAKE_BUILD_TYPE}" WGT_NAME)
+ else()
+ string(TOLOWER "${PROJECT_NAME}" WGT_NAME)
+ endif()
+
+ # Fulup ??? copy any extra file in wgt/etc into populate package before building the widget
+ file(GLOB PROJECT_CONF_FILES "${TEMPLATE_DIR}/etc/*")
+ if(${PROJECT_CONF_FILES})
+ file(COPY "${TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
+ endif(${PROJECT_CONF_FILES})
+
+ find_program(wgtpkgCMD "wgtpkg-pack")
+ if(wgtpkgCMD)
+ set(packCMD ${wgtpkgCMD} "-f" "-o" "${WGT_NAME}.wgt" ${PROJECT_PKG_BUILD_DIR})
+ set(packCMDTest ${wgtpkgCMD} "-f" "-o" "${WGT_NAME}-test.wgt" ${PROJECT_PKG_TEST_DIR})
+ else()
+ find_program(wgtpkgCMD "zip")
+ if(wgtpkgCMD)
+ set(packCMD ${CMAKE_COMMAND} -E cmake_echo_color --yellow "Warning: Widget will be built using Zip, NOT using the Application Framework widget pack command." && cd ${PROJECT_PKG_BUILD_DIR} && ${wgtpkgCMD} "../${WGT_NAME}.wgt" "*")
+ set(packCMDTest ${CMAKE_COMMAND} -E cmake_echo_color --yellow "Warning: Test widget will be built using Zip, NOT using the Application Framework widget pack command." && cd ${PROJECT_PKG_TEST_DIR} && ${wgtpkgCMD} "../${WGT_NAME}-test.wgt" "*")
+ else()
+ set(packCMD ${CMAKE_COMMAND} -E cmake_echo_color --red "Error: No utility found to build a widget. Either install wgtpkg-pack from App Framework or zip command")
+ endif()
+ endif()
+
+ 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 ${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
+ COMMAND cp ${ICON_PATH} ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}
+ )
+ add_custom_command(OUTPUT ${PROJECT_PKG_TEST_DIR}/config.xml ${PROJECT_PKG_TEST_DIR}/bin/launcher
+ COMMAND ${CMAKE_COMMAND} -DINFILE=${TEST_WIDGET_CONFIG_TEMPLATE} -DOUTFILE=${PROJECT_PKG_TEST_DIR}/config.xml
+ -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
+ -P ${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
+ COMMAND mkdir -p ${PROJECT_PKG_TEST_DIR}/bin
+ COMMAND cp ${ICON_PATH} ${PROJECT_PKG_TEST_DIR}/${PROJECT_ICON}
+ COMMAND cp ${PROJECT_APP_TEMPLATES_DIR}/test-wgt/launcher.sh.in ${PROJECT_PKG_TEST_DIR}/bin/launcher
+ )
+
+ add_custom_command(OUTPUT ${WGT_NAME}.wgt
+ DEPENDS ${PROJECT_TARGETS}
+ COMMAND ${packCMD}
+ )
+
+ add_custom_command(OUTPUT ${WGT_NAME}-test.wgt
+ DEPENDS ${PROJECT_TARGETS}
+ COMMAND ${packCMDTest}
+ )
+
+ if(${BUILD_TEST_WGT})
+ add_custom_target(packaging_wgt DEPENDS ${PROJECT_PKG_BUILD_DIR}/config.xml
+ ${PROJECT_PKG_TEST_DIR}/config.xml
+ ${PROJECT_PKG_TEST_DIR}/bin/launcher)
+ add_custom_target(widget DEPENDS ${WGT_NAME}.wgt ${WGT_NAME}-test.wgt)
+
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${WGT_NAME}-test.wgt")
+ else()
+ add_custom_target(packaging_wgt DEPENDS ${PROJECT_PKG_BUILD_DIR}/config.xml)
+ add_custom_target(widget DEPENDS ${WGT_NAME}.wgt)
+ add_custom_target(packaging_test_wgt DEPENDS ${PROJECT_PKG_TEST_DIR}/config.xml ${PROJECT_PKG_TEST_DIR}/bin/launcher)
+ add_custom_target(test_widget DEPENDS ${WGT_NAME}-test.wgt
+ ${PROJECT_PKG_TEST_DIR}/config.xml
+ ${PROJECT_PKG_TEST_DIR}/bin/launcher)
+ endif()
+
+ add_dependencies(widget populate packaging_wgt)
+ set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${WGT_NAME}.wgt")
+
+ if(NOT RSYNC_TARGET)
+ message ("${Yellow}.. Warning: RSYNC_TARGET not defined 'make widget-target-install' not instanciated${ColourReset}")
+ add_custom_target(widget-target-install
+ COMMENT "${Red}*** Fatal: RSYNC_TARGET RSYNC_PREFIX environment variables required with 'make widget-target-install'${ColourReset}"
+ COMMAND exit -1
+ )
+ else()
+ 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
+ COMMAND ${CMAKE_CURRENT_BINARY_DIR}/target/install-wgt-on-${RSYNC_TARGET}.sh
+ )
+ endif()
+
+ 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)
+ add_custom_command(OUTPUT ${NPKG_PROJECT_NAME}.spec
+ DEPENDS ${PROJECT_TARGETS}
+ archive
+ packaging
+ COMMAND rpmbuild --define=\"%_sourcedir ${PROJECT_PKG_ENTRY_POINT}\" -ba ${PROJECT_PKG_ENTRY_POINT}/${NPKG_PROJECT_NAME}.spec
+ )
+
+ add_custom_target(rpm DEPENDS ${NPKG_PROJECT_NAME}.spec)
+ add_dependencies(rpm populate packaging)
+
+ 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)
+
+macro(project_package_build)
+ if(EXISTS ${TEMPLATE_DIR})
+ wgt_package_build()
+ endif()
+endmacro(project_package_build)
+
+macro(project_subdirs_add)
+ set (ARGSLIST ${ARGN})
+ list(LENGTH ARGSLIST ARGSNUM)
+ if(${ARGSNUM} GREATER 0)
+ file(GLOB filelist "${ARGV0}")
+ else()
+ file(GLOB filelist "*")
+ endif()
+
+ foreach(filename ${filelist})
+ if(EXISTS "${filename}/CMakeLists.txt")
+ add_subdirectory(${filename})
+ elseif(${filename} MATCHES "^.*\\.cmake$")
+ include(${filename})
+ endif(EXISTS "${filename}/CMakeLists.txt")
+ endforeach()
+endmacro(project_subdirs_add)
+
+# Print developer helper message when build is done
+# -------------------------------------------------------
+macro(project_closing_msg)
+ get_property(PROJECT_TARGETS_SET GLOBAL PROPERTY PROJECT_TARGETS SET)
+ get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
+ if(CLOSING_MESSAGE AND ${PROJECT_TARGETS_SET})
+ add_custom_target(${PROJECT_NAME}_build_done ALL
+ COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${CLOSING_MESSAGE}"
+ )
+ add_dependencies(${PROJECT_NAME}_build_done
+ ${PROJECT_TARGETS} populate)
+ endif()
+endmacro()
diff --git a/src/cmake/cmake.d/04-extra_targets.cmake b/src/cmake/cmake.d/04-extra_targets.cmake
new file mode 100644
index 0000000..1cde843
--- /dev/null
+++ b/src/cmake/cmake.d/04-extra_targets.cmake
@@ -0,0 +1,69 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+# contrib: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+
+#--------------------------------------------------------------------------
+# WARNING:
+# Do not change this cmake template
+# Customise your preferences in "./conf.d/cmake/config.cmake"
+#--------------------------------------------------------------------------
+
+#Generate a cmake cache file usable by cmake script.
+set(CacheForScript ${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
+#Create a tmp cmake file.
+file(WRITE ${CacheForScript} "")
+
+get_cmake_property(Vars VARIABLES)
+foreach(Var ${Vars})
+ if(${Var})
+ #Replace unwanted char.
+ string(REPLACE "\\" "\\\\" VALUE ${${Var}})
+ string(REPLACE "\n" "\\n" VALUE ${VALUE})
+ string(REPLACE "\r" "\\n" VALUE ${VALUE})
+ string(REPLACE "\"" "\\\"" VALUE ${VALUE})
+ endif()
+ file(APPEND ${CacheForScript} "set(${Var} \"${VALUE}\")\n")
+endforeach()
+
+# ----------------------------------------------------------------------------
+# Autobuild target
+# ----------------------------------------------------------------------------
+
+add_custom_command(OUTPUT ${PROJECT_AGL_AUTOBUILD_DIR}/autobuild ${PROJECT_LINUX_AUTOBUILD_DIR}/autobuild
+ DEPENDS ${TEMPLATE_DIR}/autobuild/agl/autobuild.in
+ ${TEMPLATE_DIR}/autobuild/linux/autobuild.in
+
+ COMMAND [ ! -f "${PROJECT_AGL_AUTOBUILD_DIR}/autobuild" ] &&
+ ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/autobuild/agl/autobuild.in
+ -DOUTFILE=${PROJECT_AGL_AUTOBUILD_DIR}/autobuild
+ -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
+ -P ${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake &&
+ chmod a+x ${PROJECT_AGL_AUTOBUILD_DIR}/autobuild ||
+ true
+ COMMAND [ ! -f "${PROJECT_LINUX_AUTOBUILD_DIR}/autobuild" ] &&
+ ${CMAKE_COMMAND} -DINFILE=${TEMPLATE_DIR}/autobuild/agl/autobuild.in
+ -DOUTFILE=${PROJECT_LINUX_AUTOBUILD_DIR}/autobuild
+ -DPROJECT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}
+ -P ${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake &&
+ chmod a+x ${PROJECT_LINUX_AUTOBUILD_DIR}/autobuild ||
+ true
+)
+
+add_custom_target(autobuild ALL DEPENDS ${PROJECT_AGL_AUTOBUILD_DIR}/autobuild
+ ${PROJECT_LINUX_AUTOBUILD_DIR}/autobuild)
diff --git a/src/cmake/common.cmake b/src/cmake/common.cmake
new file mode 100644
index 0000000..6e43d13
--- /dev/null
+++ b/src/cmake/common.cmake
@@ -0,0 +1,121 @@
+###########################################################################
+# Copyright 2015 - 2018 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+# contrib: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+
+#--------------------------------------------------------------------------
+# WARNING:
+# Do not change this cmake template
+# Customise your preferences in "./conf.d/cmake/config.cmake"
+#--------------------------------------------------------------------------
+
+# Include ExternalProject CMake module by default
+include(ExternalProject)
+
+if(DEFINED ENV{SDKTARGETSYSROOT})
+file(STRINGS $ENV{SDKTARGETSYSROOT}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
+set(BUILD_ENV_SYSROOT $ENV{SDKTARGETSYSROOT})
+elseif(DEFINED ENV{PKG_CONFIG_SYSROOT_DIR})
+file(STRINGS $ENV{PKG_CONFIG_SYSROOT_DIR}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
+set(BUILD_ENV_SYSROOT $ENV{PKG_CONFIG_SYSROOT_DIR})
+else()
+file(STRINGS /usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
+set(BUILD_ENV_SYSROOT "")
+endif()
+
+# Get the os type
+# Used to package .deb
+set(OS_RELEASE_PATH "${BUILD_ENV_SYSROOT}/etc/os-release")
+if(EXISTS ${OS_RELEASE_PATH})
+ execute_process(COMMAND bash "-c" "grep -E '^ID(_LIKE)?=' ${OS_RELEASE_PATH} | tail -n 1"
+ OUTPUT_VARIABLE TMP_OSRELEASE
+ )
+
+ if (NOT TMP_OSRELEASE STREQUAL "")
+ string(REGEX REPLACE ".*=\"?([0-9a-z\._ -]*)\"?\n" "\\1" OSDETECTED ${TMP_OSRELEASE})
+ string(REPLACE " " ";" OSRELEASE ${OSDETECTED})
+ else()
+ set(OSRELEASE "NOT COMPATIBLE !")
+ endif()
+elseif("${BUILD_ENV_SYSROOT}" STREQUAL "$ENV{PKG_CONFIG_SYSROOT_DIR}")
+ set(OSRELEASE "yocto-build")
+else()
+ set(OSRELEASE "NOT COMPATIBLE ! Missing ${OS_RELEASE_PATH} file.")
+endif()
+message("Distribution detected (separated by ';' choose one of them) ${OSRELEASE}")
+
+# Include CMake modules core files
+file(GLOB project_cmakefiles ${CMAKE_CURRENT_LIST_DIR}/cmake.d/[0-9][0-9]-*.cmake)
+
+# Include optionnal user defined OS relative CMake files
+foreach(OS IN LISTS OSRELEASE)
+ list(APPEND PATTERN "${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/cmake/[0-9][0-9]-${OS}*.cmake"
+ "${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/cmake.d/[0-9][0-9]-${OS}*.cmake")
+endforeach()
+list(APPEND PATTERN "${PROJECT_CMAKE_CONF_DIR}/../cmake/[0-9][0-9]-common*.cmake"
+ "${PROJECT_CMAKE_CONF_DIR}/../cmake.d/[0-9][0-9]-common*.cmake")
+
+file(GLOB distro_cmakefiles ${PATTERN})
+list(SORT distro_cmakefiles)
+
+if(NOT distro_cmakefiles)
+ file(GLOB distro_cmakefiles ${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/cmake/[0-9][0-9]-default*.cmake
+ ${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/cmake.d/[0-9][0-9]-default*.cmake)
+endif()
+
+list(APPEND project_cmakefiles "${distro_cmakefiles}")
+list(SORT project_cmakefiles)
+
+file(GLOB home_cmakefiles $ENV{HOME}/.config/app-templates/cmake.d/[0-9][0-9]-common*.cmake
+ $ENV{HOME}/.config/app-templates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake
+ $ENV{HOME}/.config/cmake-apps-module/cmake.d/[0-9][0-9]-common*.cmake
+ $ENV{HOME}/.config/cmake-apps-module/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake
+ $ENV{HOME}/.config/CMakeAfbTemplates/cmake.d/[0-9][0-9]-common*.cmake
+ $ENV{HOME}/.config/CMakeAfbTemplates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake)
+list(SORT home_cmakefiles)
+
+file(GLOB system_cmakefiles /etc/app-templates/cmake.d/[0-9][0-9]-common*.cmake
+ /etc/app-templates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake
+ /etc/cmake-apps-module/cmake.d/[0-9][0-9]-common*.cmake
+ /etc/cmake-apps-module/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake
+ /etc/CMakeAfbTemplates/cmake.d/[0-9][0-9]-common*.cmake
+ /etc/CMakeAfbTemplates/cmake.d/[0-9][0-9]-${PROJECT_NAME}*.cmake)
+list(SORT system_cmakefiles)
+
+foreach(file ${system_cmakefiles} ${home_cmakefiles} ${project_cmakefiles})
+ message("Include: ${file}")
+ include(${file})
+endforeach()
+
+set_install_prefix()
+prevent_in_source_build()
+
+if(DEFINED PROJECT_SRC_DIR_PATTERN)
+ project_subdirs_add(${PROJECT_SRC_DIR_PATTERN})
+else()
+ project_subdirs_add()
+endif(DEFINED PROJECT_SRC_DIR_PATTERN)
+
+configure_files_in_dir(${CMAKE_SOURCE_DIR}/${PROJECT_CMAKE_CONF_DIR}/template.d)
+configure_files_in_dir($ENV{HOME}/.config/app-templates/scripts)
+configure_files_in_dir(/etc/app-templates/scripts)
+
+project_targets_populate()
+remote_targets_populate()
+project_package_build()
+project_closing_msg()
diff --git a/src/cmake/configure_file.cmake b/src/cmake/configure_file.cmake
new file mode 100644
index 0000000..2028388
--- /dev/null
+++ b/src/cmake/configure_file.cmake
@@ -0,0 +1,2 @@
+include(${CMAKE_BINARY_DIR}/CMakeCacheForScript.cmake)
+configure_file(${INFILE} ${OUTFILE} @ONLY)
diff --git a/src/cmake/export.map b/src/cmake/export.map
new file mode 100644
index 0000000..ee2f413
--- /dev/null
+++ b/src/cmake/export.map
@@ -0,0 +1 @@
+{ global: afbBindingV*; local: *; };
diff --git a/src/samples.d/CMakeLists.txt.sample b/src/samples.d/CMakeLists.txt.sample
new file mode 100644
index 0000000..b485097
--- /dev/null
+++ b/src/samples.d/CMakeLists.txt.sample
@@ -0,0 +1,21 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
+
+include(${CMAKE_CURRENT_SOURCE_DIR}/conf.d/cmake/config.cmake)
diff --git a/src/samples.d/config.cmake.sample b/src/samples.d/config.cmake.sample
new file mode 100644
index 0000000..2681113
--- /dev/null
+++ b/src/samples.d/config.cmake.sample
@@ -0,0 +1,201 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: Fulup Ar Foll <fulup@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+# Project Info
+# ------------------
+set(PROJECT_NAME example)
+set(API_NAME api-test)
+set(PROJECT_PRETTY_NAME "Example")
+set(PROJECT_DESCRIPTION "AGL application example")
+set(PROJECT_URL "https://gerrit.automotivelinux.org/gerrit/apps/cmake-apps-module")
+set(PROJECT_ICON "icon.png")
+set(PROJECT_AUTHOR "Last Name, First Name")
+set(PROJECT_AUTHOR_MAIL "example.man@bigouden.bzh")
+set(PROJECT_LICENSE "APL2.0")
+set(PROJECT_LANGUAGES "C")
+
+# Which directories inspect to find CMakeLists.txt target files
+# set(PROJECT_SRC_DIR_PATTERN "*")
+
+# Compilation Mode (DEBUG, RELEASE, COVERAGE or PROFILING)
+# ----------------------------------
+#set(BUILD_TYPE "DEBUG")
+#set(USE_EFENCE 1)
+
+# Kernel selection if needed. You can choose between a
+# mandatory version to impose a minimal version.
+# Or check Kernel minimal version and just print a Warning
+# about missing features and define a preprocessor variable
+# to be used as preprocessor condition in code to disable
+# incompatibles features. Preprocessor define is named
+# KERNEL_MINIMAL_VERSION_OK.
+#
+# NOTE*** FOR NOW IT CHECKS KERNEL Yocto environment and
+# Yocto SDK Kernel version.
+# -----------------------------------------------
+#set (kernel_mandatory_version 4.8)
+#set (kernel_minimal_version 4.8)
+
+# Compiler selection if needed. Impose a minimal version.
+# -----------------------------------------------
+set (gcc_minimal_version 4.9)
+
+# PKG_CONFIG required packages
+# -----------------------------
+set (PKG_REQUIRED_LIST
+ json-c
+ afb-daemon
+)
+
+# You can also consider to include libsystemd
+# -----------------------------------
+#list (APPEND PKG_REQUIRED_LIST libsystemd>=222)
+
+# Prefix path where will be installed the files
+# Default: /usr/local (need root permission to write in)
+# ------------------------------------------------------
+#set(INSTALL_PREFIX /opt/AGL CACHE PATH "INSTALL PREFIX PATH")
+
+# Customize link option
+# -----------------------------
+#list(APPEND link_libraries -an-option)
+
+# Compilation options definition
+# Use CMake generator expressions to specify only for a specific language
+# Values are prefilled with default options that is currently used.
+# Either separate options with ";", or each options must be quoted separately
+# DO NOT PUT ALL OPTION QUOTED AT ONCE , COMPILATION COULD FAILED !
+# ----------------------------------------------------------------------------
+#set(COMPILE_OPTIONS
+# -Wall
+# -Wextra
+# -Wconversion
+# -Wno-unused-parameter
+# -Wno-sign-compare
+# -Wno-sign-conversion
+# -Werror=maybe-uninitialized
+# -Werror=implicit-function-declaration
+# -ffunction-sections
+# -fdata-sections
+# -fPIC
+# CACHE STRING "Compilation flags")
+#set(C_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C language.")
+#set(CXX_COMPILE_OPTIONS "" CACHE STRING "Compilation flags for C++ language.")
+#set(PROFILING_COMPILE_OPTIONS
+# -g
+# -O0
+# -pg
+# -Wp,-U_FORTIFY_SOURCE
+# CACHE STRING "Compilation flags for PROFILING build type.")
+#set(DEBUG_COMPILE_OPTIONS
+# -g
+# -ggdb
+# CACHE STRING "Compilation flags for DEBUG build type.")
+#set(COVERAGE_COMPILE_OPTIONS
+# -g
+# -O0
+# --coverage
+# CACHE STRING "Compilation flags for COVERAGE build type.")
+#set(RELEASE_COMPILE_OPTIONS
+# -O2
+# -pipe
+# -D_FORTIFY_SOURCE=2
+# -fstack-protector-strong
+# -Wformat -Wformat-security
+# -Werror=format-security
+# -feliminate-unused-debug-types
+# -Wl,-O1
+# -Wl,--hash-style=gnu
+# -Wl,--as-needed
+# -fstack-protector-strong
+# -Wl,-z,relro,-z,now
+# CACHE STRING "Compilation flags for RELEASE build type.")
+
+# Location for config.xml.in template file.
+#
+# If you keep them commented then it will build with a default minimal widget
+# template which is very simple and it is highly probable that it will not suit
+# to your app.
+# -----------------------------------------
+#set(WIDGET_ICON "conf.d/wgt/${PROJECT_ICON}" CACHE PATH "Path to the widget icon")
+#set(WIDGET_CONFIG_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/config.xml.in" CACHE PATH "Path to widget config file template (config.xml.in)")
+#set(TEST_WIDGET_CONFIG_TEMPLATE "${CMAKE_CURRENT_SOURCE_DIR}/conf.d/wgt/test-config.xml.in" CACHE PATH "Path to the test widget config file template (test-config.xml.in)")
+
+# Mandatory widget Mimetype specification of the main unit
+# --------------------------------------------------------------------------
+# Choose between :
+#- text/html : HTML application,
+# content.src designates the home page of the application
+#
+#- application/vnd.agl.native : AGL compatible native,
+# content.src designates the relative path of the binary.
+#
+# - application/vnd.agl.service: AGL service, content.src is not used.
+#
+#- ***application/x-executable***: Native application,
+# content.src designates the relative path of the binary.
+# For such application, only security setup is made.
+#
+set(WIDGET_TYPE MimeType_Not_Set)
+
+# Mandatory Widget entry point file of the main unit
+# --------------------------------------------------------------
+# This is the file that will be executed, loaded,
+# at launch time by the application framework.
+#
+set(WIDGET_ENTRY_POINT EntryPoint_Path_Not_Set)
+
+# Optional dependencies order
+# ---------------------------
+#set(EXTRA_DEPENDENCIES_ORDER)
+
+# Optional Extra global include path
+# -----------------------------------
+#set(EXTRA_INCLUDE_DIRS)
+
+# Optional extra libraries
+# -------------------------
+#set(EXTRA_LINK_LIBRARIES)
+
+# Optional force binding Linking flag
+# ------------------------------------
+# set(BINDINGS_LINK_FLAG LinkOptions )
+
+# Optional force package prefix generation, like widget
+# -----------------------------------------------------
+# set(PKG_PREFIX DestinationPath)
+
+# Optional Application Framework security token
+# and port use for remote debugging.
+#------------------------------------------------------------
+set(AFB_TOKEN "" CACHE PATH "Default binder security token")
+set(AFB_REMPORT "1234" CACHE PATH "Default binder listening port")
+
+# Print a helper message when every thing is finished
+# ----------------------------------------------------
+set(CLOSING_MESSAGE "Typical binding launch: cd ${CMAKE_BINARY_DIR}/package \\&\\& afb-daemon --port=${AFB_REMPORT} --workdir=. --ldpaths=lib --roothttp=htdocs --token=\"${AFB_TOKEN}\" --tracereq=common --verbose")
+set(PACKAGE_MESSAGE "Install widget file using in the target : afm-util install ${PROJECT_NAME}.wgt")
+
+# Optional schema validator about now only XML, LUA and JSON
+# are supported
+#------------------------------------------------------------
+#set(LUA_CHECKER "luac" "-p" CACHE STRING "LUA compiler")
+#set(XML_CHECKER "xmllint" CACHE STRING "XML linter")
+#set(JSON_CHECKER "json_verify" CACHE STRING "JSON linter")
+
+include(CMakeAfbTemplates)
diff --git a/src/samples.d/config.xml.in.sample b/src/samples.d/config.xml.in.sample
new file mode 100644
index 0000000..b93f3d9
--- /dev/null
+++ b/src/samples.d/config.xml.in.sample
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
+ <description>@PROJECT_DESCRIPTION@</description>
+ <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
+ <license>@PROJECT_LICENSE@</license>
+
+<!-- Feature : required-api ------------------------------------------------------
+#### param name="#target" OPTIONAL
+
+Declares the name of the unit requiring the listed apis.
+Only one instance of the param "#target" is allowed.
+When there is not instance of this param, it behave as if
+the target main was specified.
+
+#### param name=[required api name]
+
+The name is the name of the required API.
+The value describes how to connect to the required api.
+It is either:
+
+ - local: The binding is a local shared object.
+ In that case, the name is the relative path of the
+ shared object to be loaded.
+ - auto: The framework set automatically the kind of
+ the connection to the API
+ - ws: The framework connect using internal websockets
+ - dbus: The framework connect using internal dbus
+ - link: The framework connect in memory by dinamically linking
+
+Example:
+ <feature name="urn:AGL:widget:required-api">
+ <param name="#target" value="low-can" />
+ <param name="<a-required-api>" value="auto" />
+ <param name="<another-required-api>" value="auto" />
+ </feature>
+--------------------------------------------------------------------------------->
+
+<!-- Feature : required-permission ------------------------------------------
+
+List of the permissions required by the unit.
+Each required permission must be explicited using a <param> entry.
+
+#### param name="#target" OPTIONAL
+
+Declares the name of the unit requiring the listed permissions.
+Only one instance of the param "#target" is allowed.
+When there is not instance of this param, it behave as if
+the target main was specified.
+
+#### param name=[required permission name]
+
+The value is either:
+- required: the permission is mandatorily needed except if the feature
+isn't required (required="false") and in that case it is optional.
+- optional: the permission is optional
+
+Example:
+<feature name="urn:AGL:widget:required-permission">
+ <param name="#target" value="geoloc" />
+ <param name="urn:AGL:permission:real-time" value="required" />
+ <param name="urn:AGL:permission:syscall:*" value="required" />
+</feature>
+--------------------------------------------------------------------------------->
+
+<!-- Feature : provided-unit -------------------------------------------------
+This feature is made for declaring new units
+for the widget. Using this feature, a software publisher
+can provide more than one application in the same widget.
+
+#### param name="#target" REQUIRED
+
+Declares the name of the unit. The default unit, the unit
+of the main of the widget, has the name "main". The value
+given here must be unique within the widget file. It will
+be used in other places of the widget config.xml file to
+designate the unit.
+
+Only one instance of the param "#target" is allowed.
+The value can't be "main".
+
+#### param name="content.type" REQUIRED
+
+The mimetype of the provided unit.
+
+#### param name="content.src"
+
+A path to the file (subject to localisation), this is the entry point
+to that unit.
+
+#### other parameters
+
+The items that can be set for the main unit
+can also be set using the params if needed.
+
+ - description
+ - name.content
+ - name.short
+ - ...
+
+Example:
+<feature name="urn:AGL:widget:provided-unit">
+ <param name="#target" value="geoloc" />
+ <param name="description" value="binding of name geoloc" />
+ <param name="content.src" value="index.html" />
+ <param name="content.type" value="application/vnd.agl.service" />
+</feature>
+--------------------------------------------------------------------------------->
+
+<!-- Feature: provided-api ---------------------------------------------------
+Use this feature for exporting one or more API of a unit
+to other widgets of the platform.
+
+This feature is an important feature of the framework.
+
+#### param name="#target" OPTIONAL
+
+Declares the name of the unit exporting the listed apis.
+Only one instance of the param "#target" is allowed.
+When there is not instance of this param, it behave as if
+the target main was specified.
+
+#### param name=[name of exported api]
+
+The name give the name of the api that is exported.
+
+The value is one of the following values:
+
+- ws: export the api using UNIX websocket
+- dbus: export the API using dbus
+- auto: export the api using the default method(s).
+
+Example:
+<feature name="urn:AGL:widget:provided-api">
+ <param name="#target" value="geoloc" />
+ <param name="geoloc" value="auto" />
+ <param name="moonloc" value="auto" />
+</feature>
+--------------------------------------------------------------------------------->
+</widget>
diff --git a/src/samples.d/xds-config.env.sample b/src/samples.d/xds-config.env.sample
new file mode 100644
index 0000000..a4c51b1
--- /dev/null
+++ b/src/samples.d/xds-config.env.sample
@@ -0,0 +1,10 @@
+XDS_PROJECT_ID=W2EAQBA-HQI75XA_unicens2-binding
+XDS_SDK_ID=poky-agl_aarch64_3.99.1+snapshot
+XDS_SERVER_URL=localhost:8000
+
+DOCKER_TARGET=docker-sdk
+
+RSYNC_TARGET=root@192.168.168.11
+RSYNC_PREFIX=./opt
+PROJECT_DIR=/home/seb/tmp/unicens2-binding
+
diff --git a/src/template.d/autobuild/agl/autobuild.in b/src/template.d/autobuild/agl/autobuild.in
new file mode 100755
index 0000000..a832db4
--- /dev/null
+++ b/src/template.d/autobuild/agl/autobuild.in
@@ -0,0 +1,75 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015 - 2018 "IoT.bzh"
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+THISFILE := $(lastword $(MAKEFILE_LIST))
+BUILD_DIR := $(abspath $(dir $(THISFILE))/../../build)
+DEST := ${BUILD_DIR}
+
+.PHONY: all clean distclean configure build package help update
+
+all: help
+
+help:
+ @echo "List of targets available:"
+ @echo ""
+ @echo "- all"
+ @echo "- clean"
+ @echo "- distclean"
+ @echo "- configure"
+ @echo "- build: compilation, link and prepare files for package into a widget"
+ @echo "- package: output a widget file '*.wgt'"
+ @echo "- install: install in your ${CMAKE_INSTALL_DIR} directory"
+ @echo ""
+ @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt"
+ @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+update: configure
+ @cmake --build ${BUILD_DIR} --target autobuild
+
+clean:
+ @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} ${CLEAN_ARGS} clean) || echo Nothing to clean
+
+distclean:
+ @rm -rf ${BUILD_DIR}
+
+configure:
+ @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
+ @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
+
+build: configure
+ @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
+
+package: build
+ @mkdir -p ${BUILD_DIR}/$@/bin
+ @mkdir -p ${BUILD_DIR}/$@/etc
+ @mkdir -p ${BUILD_DIR}/$@/lib
+ @mkdir -p ${BUILD_DIR}/$@/htdocs
+ @mkdir -p ${BUILD_DIR}/$@/var
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target widget
+ @mkdir -p ${DEST} && cp ${BUILD_DIR}/*.wgt ${DEST}
+
+package-test: build
+ @mkdir -p ${BUILD_DIR}/$@/bin
+ @mkdir -p ${BUILD_DIR}/$@/etc
+ @mkdir -p ${BUILD_DIR}/$@/lib
+ @mkdir -p ${BUILD_DIR}/$@/htdocs
+ @mkdir -p ${BUILD_DIR}/$@/var
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target widget
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target test_widget
+ @mkdir -p ${DEST} && cp ${BUILD_DIR}/*.wgt ${DEST}
+
+install: build
+ @cmake --build ${BUILD_DIR} ${INSTALL_ARGS} --target install
diff --git a/src/template.d/autobuild/linux/autobuild.in b/src/template.d/autobuild/linux/autobuild.in
new file mode 100755
index 0000000..a832db4
--- /dev/null
+++ b/src/template.d/autobuild/linux/autobuild.in
@@ -0,0 +1,75 @@
+#!/usr/bin/make -f
+# Copyright (C) 2015 - 2018 "IoT.bzh"
+# Author "Romain Forlot" <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+THISFILE := $(lastword $(MAKEFILE_LIST))
+BUILD_DIR := $(abspath $(dir $(THISFILE))/../../build)
+DEST := ${BUILD_DIR}
+
+.PHONY: all clean distclean configure build package help update
+
+all: help
+
+help:
+ @echo "List of targets available:"
+ @echo ""
+ @echo "- all"
+ @echo "- clean"
+ @echo "- distclean"
+ @echo "- configure"
+ @echo "- build: compilation, link and prepare files for package into a widget"
+ @echo "- package: output a widget file '*.wgt'"
+ @echo "- install: install in your ${CMAKE_INSTALL_DIR} directory"
+ @echo ""
+ @echo "Usage: ./autobuild/agl/autobuild package DEST=${HOME}/opt"
+ @echo "Don't use your build dir as DEST as wgt file is generated at this location"
+
+update: configure
+ @cmake --build ${BUILD_DIR} --target autobuild
+
+clean:
+ @([ -d ${BUILD_DIR} ] && make -C ${BUILD_DIR} ${CLEAN_ARGS} clean) || echo Nothing to clean
+
+distclean:
+ @rm -rf ${BUILD_DIR}
+
+configure:
+ @[ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR}
+ @[ -f ${BUILD_DIR}/Makefile ] || (cd ${BUILD_DIR} && cmake ${CONFIGURE_ARGS} ..)
+
+build: configure
+ @cmake --build ${BUILD_DIR} ${BUILD_ARGS} --target all
+
+package: build
+ @mkdir -p ${BUILD_DIR}/$@/bin
+ @mkdir -p ${BUILD_DIR}/$@/etc
+ @mkdir -p ${BUILD_DIR}/$@/lib
+ @mkdir -p ${BUILD_DIR}/$@/htdocs
+ @mkdir -p ${BUILD_DIR}/$@/var
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target widget
+ @mkdir -p ${DEST} && cp ${BUILD_DIR}/*.wgt ${DEST}
+
+package-test: build
+ @mkdir -p ${BUILD_DIR}/$@/bin
+ @mkdir -p ${BUILD_DIR}/$@/etc
+ @mkdir -p ${BUILD_DIR}/$@/lib
+ @mkdir -p ${BUILD_DIR}/$@/htdocs
+ @mkdir -p ${BUILD_DIR}/$@/var
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target widget
+ @cmake --build ${BUILD_DIR} ${PACKAGE_ARGS} --target test_widget
+ @mkdir -p ${DEST} && cp ${BUILD_DIR}/*.wgt ${DEST}
+
+install: build
+ @cmake --build ${BUILD_DIR} ${INSTALL_ARGS} --target install
diff --git a/src/template.d/config.xml.in b/src/template.d/config.xml.in
new file mode 100644
index 0000000..35d20b8
--- /dev/null
+++ b/src/template.d/config.xml.in
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="@WIDGET_ENTRY_POINT@" type="@WIDGET_TYPE@"/>
+ <description>@PROJECT_DESCRIPTION@</description>
+ <author>@PROJECT_AUTHOR@ &lt;@PROJECT_AUTHOR_MAIL@&gt;</author>
+ <license>@PROJECT_LICENSE@</license>
+</widget>
diff --git a/src/template.d/deb-config.dsc.in b/src/template.d/deb-config.dsc.in
new file mode 100644
index 0000000..28a4835
--- /dev/null
+++ b/src/template.d/deb-config.dsc.in
@@ -0,0 +1,15 @@
+Format: @PROJECT_VERSION@
+Source: @NPKG_PROJECT_NAME@
+Binary: @NPKG_PROJECT_NAME@-bin
+Architecture: any
+Version: 2.0-0
+Maintainer: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
+Standards-Version: 3.8.2
+Homepage: @PROJECT_URL@
+Build-Depends: debhelper (>= 5),
+ pkg-config,
+ cmake,
+ gcc,
+ g++,
+@DEB_PKG_DEPS@
+Debtransform-Tar: @NPKG_PROJECT_NAME@_@PROJECT_VERSION@.orig.tar.gz
diff --git a/src/template.d/deb-config.install.in b/src/template.d/deb-config.install.in
new file mode 100644
index 0000000..5858efd
--- /dev/null
+++ b/src/template.d/deb-config.install.in
@@ -0,0 +1,2 @@
+/opt/AGL/*
+/etc/profile.d/*
diff --git a/src/template.d/debian.changelog.in b/src/template.d/debian.changelog.in
new file mode 100644
index 0000000..f72c717
--- /dev/null
+++ b/src/template.d/debian.changelog.in
@@ -0,0 +1,5 @@
+@NPKG_PROJECT_NAME@ (@PROJECT_VERSION@-0) UNRELEASED; urgency=low
+
+ * init build
+
+ -- @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@> Mon, 25 Dec 2007 10:50:38 +0100
diff --git a/src/template.d/debian.compat.in b/src/template.d/debian.compat.in
new file mode 100644
index 0000000..45a4fb7
--- /dev/null
+++ b/src/template.d/debian.compat.in
@@ -0,0 +1 @@
+8
diff --git a/src/template.d/debian.control.in b/src/template.d/debian.control.in
new file mode 100644
index 0000000..ea4ad8a
--- /dev/null
+++ b/src/template.d/debian.control.in
@@ -0,0 +1,16 @@
+Priority: optional
+Maintainer: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
+Source: @NPKG_PROJECT_NAME@
+Build-Depends: debhelper (>= 5),
+ pkg-config,
+ cmake,
+ gcc,
+ g++,
+@DEB_PKG_DEPS@
+Standards-Version: 3.8.2
+Homepage: @PROJECT_URL@
+
+Package: @NPKG_PROJECT_NAME@
+Section: libs
+Architecture: any
+Description: @PROJECT_DESCRIPTION@
diff --git a/src/template.d/debian.rules.in b/src/template.d/debian.rules.in
new file mode 100644
index 0000000..6bb2825
--- /dev/null
+++ b/src/template.d/debian.rules.in
@@ -0,0 +1,87 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Uncomment this to turn on verbose mode.
+export DH_VERBOSE=1
+
+# These are used for cross-compiling and for saving the configure script
+# from having to guess our platform (since we know it already)
+DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
+DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
+
+
+CFLAGS = -Wall -g
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+else
+ CFLAGS += -O2
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+ INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ #
+ touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+ dh_testdir
+ mkdir -p build
+ cd build;cmake ../ -DCMAKE_INSTALL_PREFIX:PATH=/opt/AGL/@PROJECT_NAME@ -DCMAKE_INSTALL_LIBDIR:PATH=lib/$(DEB_HOST_MULTIARCH);$(MAKE)
+ #
+ touch build-stamp
+
+clean:
+ #dh_testdir
+ dh_testroot
+ rm -f configure-stamp build-stamp
+ [ ! -f Makefile ] || $(MAKE) distclean
+ #dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_prep
+ dh_installdirs
+ # Add here commands to install the package into debian/tmp
+ mkdir -p debian/tmp/opt/AGL/@PROJECT_NAME@;cd build;make populate;cp -r package/* ../debian/tmp/opt/AGL/@PROJECT_NAME@/
+ mkdir -p debian/tmp/etc/profile.d
+ echo '#---------- AGL @PROJECT_NAME@ options Start ---------" ' > debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ echo '# Object: AGL cmake option for binder/bindings' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ echo 'export LD_LIBRARY_PATH=/opt/AGL/@PROJECT_NAME@/lib/$(DEB_HOST_MULTIARCH):$$LD_LIBRARY_PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ echo 'export LIBRARY_PATH=/opt/AGL/@PROJECT_NAME@/lib/$(DEB_HOST_MULTIARCH):$$LIBRARY_PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ echo 'export PATH=/opt/AGL/@PROJECT_NAME@/bin:$$PATH' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ echo '#---------- AGL options End ---------' >> debian/tmp/etc/profile.d/AGL_@PROJECT_NAME@.sh
+ # Move all files in their corresponding package
+ dh_install --list-missing -s --sourcedir=debian/tmp
+ # empty dependency_libs in .la files
+ #sed -i "/dependency_libs/ s/'.*'/''/" `find debian/ -name '*.la'`
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installexamples
+ dh_installman
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_makeshlibs -V
+ dh_installdeb
+ dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
diff --git a/src/template.d/gdb-on-target.ini.in b/src/template.d/gdb-on-target.ini.in
new file mode 100644
index 0000000..20c8d30
--- /dev/null
+++ b/src/template.d/gdb-on-target.ini.in
@@ -0,0 +1,39 @@
+# gdb-remote.init file for IDE
+# Object: allow to use standard gdb to remote debug a target
+# Usage: remote-target-populate update script under ./build directory
+# Author: Fulup Ar Foll (IoT.bzh)
+# Reference: https://blog.flameeyes.eu/2010/02/remote-debugging-with-gdb-part-2-gdb/
+#
+# Warning:
+# - on target start with $GDB ./target/gdb-cross-root@$TARGET.ini
+# - Netbeans impose debug-command to point on a local instance of afb-daemon binary
+# - --ldpath should be absolute as solib-search-path refuse to work as documented
+
+# xds-gdb annotation to point where it should
+# :XDS-ENV: XDS_PROJECT_ID=@XDS_PROJECT_ID@
+# :XDS-ENV: XDS_SDK_ID=@XDS_SDK_ID@
+# :XDS-ENV: XDS_SERVER_URL=@XDS_SERVER_URL@
+
+# Start gdbserver on target and connect through SSH link WARNING:
+target remote | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null @RSYNC_TARGET@ gdbserver - \
+ /usr/bin/afb-daemon --port=@AFB_REMPORT@ --workdir=@RSYNC_PREFIX@/@PROJECT_NAME@ --roothttp=htdocs --ldpaths=@RSYNC_PREFIX@/@PROJECT_NAME@/lib --verbose --token=@AFB_TOKEN@
+
+# Disable auto answer no on questions and to set breakpoint
+set confirm off
+
+# Disable auto load of libraries to improved perf
+set auto-solib-add off
+
+# Define path for project libraries
+set solib-search-path ${PROJECT_PKG_BUILD_DIR}
+
+# Replace run by continue done by xds-gdb
+
+# Manually load project libraries when loaded by afb-daemon
+tbreak @GDB_INITIAL_BREAK@
+commands
+sharedlibrary @RSYNC_PREFIX@/@PROJECT_NAME@
+continue
+end
+
+
diff --git a/src/template.d/install-wgt-on-target.sh.in b/src/template.d/install-wgt-on-target.sh.in
new file mode 100755
index 0000000..39a69d5
--- /dev/null
+++ b/src/template.d/install-wgt-on-target.sh.in
@@ -0,0 +1,19 @@
+#!/bin/sh
+#
+# File: install-wgt-on-target.sh
+# Author: Sebastien Douheret @ IoT.bzh
+# Object: install widget on target
+# Created on 24-May-2017, 09:23:37
+# Usage:
+
+# Do not change manually use 'make remote-target-populate'
+export RSYNC_TARGET=@RSYNC_TARGET@
+export WGT_FILE_L=@CMAKE_CURRENT_BINARY_DIR@/@PROJECT_NAME@.wgt
+export WGT_FILE_T=/tmp/@PROJECT_NAME@.wgt
+
+scp $WGT_FILE_L $RSYNC_TARGET:$WGT_FILE_T \
+ && ssh -o "StrictHostKeyChecking no" -tt $RSYNC_TARGET -- \
+ afm-util install $WGT_FILE_T
+
+# && rm -f $WGT_FILE_T
+
diff --git a/src/template.d/rpm-config.spec.in b/src/template.d/rpm-config.spec.in
new file mode 100644
index 0000000..34a605d
--- /dev/null
+++ b/src/template.d/rpm-config.spec.in
@@ -0,0 +1,62 @@
+###########################################################################
+# Copyright 2015, 2016, 2017 IoT.bzh
+#
+# author: @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+
+Name: @NPKG_PROJECT_NAME@
+Version: @PROJECT_VERSION@
+Release: 1
+Group: AGL
+License: @PROJECT_LICENSE@
+Summary: @PROJECT_DESCRIPTION@
+Url: @PROJECT_URL@
+Source0: %{name}_%{version}.orig.tar.gz
+
+BuildRequires: cmake
+BuildRequires: gcc gcc-c++
+@RPM_PKG_DEPS@
+
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+
+%define _prefix /opt/AGL/@PROJECT_NAME@
+%define __cmake cmake
+
+%description
+@PROJECT_DESCRIPTION@
+
+%prep
+%setup -q
+
+%build
+%cmake -DCMAKE_INSTALL_PREFIX:PATH=%{_libdir}
+make %{?_smp_mflags}
+
+%install
+CURDIR=$(pwd)
+[ -d build ] && cd build
+make populate
+mkdir -p %{?buildroot}%{_prefix}
+cp -r package/* %{?buildroot}%{_prefix}
+
+cd $CURDIR
+find %{?buildroot}%{_prefix} -type d -exec echo "%dir {}" \;>> pkg_file
+find %{?buildroot}%{_prefix} -type f -exec echo "{}" \;>> pkg_file
+sed -i 's@%{?buildroot}@@g' pkg_file
+
+
+%files -f pkg_file
+%defattr(-,root,root)
diff --git a/src/template.d/start-on-target.sh.in b/src/template.d/start-on-target.sh.in
new file mode 100755
index 0000000..ae28506
--- /dev/null
+++ b/src/template.d/start-on-target.sh.in
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# File: start-on-target.sh
+# Author: Fulup Ar Foll @ IoT.bzh
+# Object: Forward signal (SIGTERM) to remote process
+# Created on 24-May-2017, 09:23:37
+# Usage: remote-target-populate update script under ./build directory
+
+# Do not change manually use 'make remote-target-populate'
+export RSYNC_TARGET=@RSYNC_TARGET@
+export PROJECT_NAME=@PROJECT_NAME@
+export RSYNC_PREFIX=@RSYNC_PREFIX@/@PROJECT_NAME@
+export AFB_REMPORT=@AFB_REMPORT@
+export AFB_TOKEN=@AFB_TOKEN@
+
+exec ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -tt $RSYNC_TARGET << EOF
+ CONTROL_CONFIG_PATH=$RSYNC_PREFIX/etc \
+ afb-daemon \
+ --workdir=$RSYNC_PREFIX \
+ --monitoring \
+ --port=$AFB_REMPORT \
+ --roothttp=./htdocs \
+ --ldpaths=./lib \
+ --verbose \
+ --token=$AFB_TOKEN \
+ --name $PROJECT_NAME &
+
+ PID_DAEMON=\$!
+ trap "echo REMOTE-SIGNAL TRAP; kill -15 \$PID_DAEMON" INT QUIT TERM EXIT
+ echo "Target Process Waiting for command"
+
+ # wait for daemon to finish
+ wait \$PID_DAEMON
+ exit
+EOF
diff --git a/src/template.d/xds-project-target.conf.in b/src/template.d/xds-project-target.conf.in
new file mode 100644
index 0000000..814597c
--- /dev/null
+++ b/src/template.d/xds-project-target.conf.in
@@ -0,0 +1,12 @@
+#
+# Cmake generated Do Not Edit
+#
+# Template: conf.d/app-templates/template.d/xds-project.conf.in
+# Values: $HOME/.config/app-templates/cmake/xx-projectname-xds.cmake
+#
+# WARNING: in Xdev mode $HOME is ~devel HOME on xds-docker
+#
+export XDS_SERVER_URL=@XDS_SERVER_URL@
+export XDS_PROJECT_ID=@XDS_PROJECT_ID@
+export XDS_SDK_ID=@XDS_SDK_ID@
+
diff --git a/src/test-wgt/launcher.sh.in b/src/test-wgt/launcher.sh.in
new file mode 100644
index 0000000..1dac914
--- /dev/null
+++ b/src/test-wgt/launcher.sh.in
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+###########################################################################
+# Copyright (C) 2017, 2018 IoT.bzh
+#
+# Author: Romain Forlot <romain.forlot@iot.bzh>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+###########################################################################
+
+PORT=$1
+TOKEN=$2
+
+[ ! "${VERBSELECTED}" ] && VERBSELECTED="*"
+
+# Research the Api name used
+CFGFILE=$(find ${AFM_APP_INSTALL_DIR} -name "*json" -print | head -n1)
+API=$(grep '\"api\"' ${CFGFILE} | cut -d'"' -f4)
+
+AFBCLIENTIN=$(mktemp -u)
+AFBCLIENTOUT=$(mktemp -u)
+mkfifo $AFBCLIENTIN
+mkfifo $AFBCLIENTOUT
+
+declare -a testVerb
+
+if [[ $(jq -r '.testVerb|type' $CFGFILE) == "array" ]]
+then
+ testVerbLength=$(jq '.testVerb|length' $CFGFILE)
+ if [ "$VERBSELECTED" = "*" ]
+ then
+ # Get all the verbs of the test api
+ for (( idx=0; idx<testVerbLength; idx++ )) do
+ testVerb[$idx]=$(jq -r ".testVerb[$idx].uid" ${CFGFILE})
+ done
+ else
+ # You search for a exact matching verb so there should be only one match
+ for (( idx=0; idx<testVerbLength; idx++ )) do
+ [ "$(jq -r ".testVerb[$idx].uid" ${CFGFILE})" = "$VERBSELECTED" ] && \
+ testVerb[0]=$(jq -r ".testVerb[$idx].uid" ${CFGFILE})
+ done
+ fi
+else
+ if [ "$VERBSELECTED" = "*" ]
+ then
+ testVerb[0]=$(jq -r ".testVerb.uid" ${CFGFILE})
+ else
+ [ "$(jq -r ".testVerb[0].uid" ${CFGFILE})" = "$VERBSELECTED" ] && \
+ testVerb[0]=$(jq -r ".testVerb[$idx].uid" ${CFGFILE})
+ fi
+fi
+
+testVerbLength=${#testVerb[@]}
+for (( idx=0; idx<testVerbLength; idx++ )) do
+ echo "Launching ${testVerb[$idx]}"
+ afb-client-demo -s ws://localhost:${PORT}/api?token=${TOKEN} "$API" "${testVerb[$idx]}" "${VERBARGS}"
+done
+
+afb-client-demo ws://localhost:${PORT}/api?token=${TOKEN} "$API" "exit"
diff --git a/src/test-wgt/test-config.xml.in b/src/test-wgt/test-config.xml.in
new file mode 100644
index 0000000..a5e645b
--- /dev/null
+++ b/src/test-wgt/test-config.xml.in
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" id="@PROJECT_NAME@-test" version="@PROJECT_VERSION@">
+ <name>@PROJECT_NAME@-test</name>
+ <icon src="@PROJECT_ICON@"/>
+ <content src="bin/launcher" type="application/vnd.agl.native"/>
+ <description>Test widget used to launch tests for the project @PROJECT_NAME@</description>
+ <author>Romain Forlot &lt;romain.forlot@iot.bzh&gt;</author>
+ <license>APL2.0</license>
+
+ <feature name="urn:AGL:widget:required-binding">
+ <param name="aft" value="extern" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-api">
+ <param name="@API_NAME@" value="auto" />
+ </feature>
+
+ <feature name="urn:AGL:widget:required-permission">
+ <param name="urn:AGL:permission:test" value="required" />
+ </feature>
+
+ <feature name="urn:AGL:widget:file-properties">
+ <param name="bin/launcher" value="executable" />
+ </feature>
+</widget>
diff --git a/src/wgt/icon-default.png b/src/wgt/icon-default.png
new file mode 100644
index 0000000..def888b
--- /dev/null
+++ b/src/wgt/icon-default.png
Binary files differ
diff --git a/src/wgt/icon-html5.png b/src/wgt/icon-html5.png
new file mode 100644
index 0000000..a3573ef
--- /dev/null
+++ b/src/wgt/icon-html5.png
Binary files differ
diff --git a/src/wgt/icon-native.png b/src/wgt/icon-native.png
new file mode 100644
index 0000000..fcb5d35
--- /dev/null
+++ b/src/wgt/icon-native.png
Binary files differ
diff --git a/src/wgt/icon-qml.png b/src/wgt/icon-qml.png
new file mode 100644
index 0000000..ba248ea
--- /dev/null
+++ b/src/wgt/icon-qml.png
Binary files differ
diff --git a/src/wgt/icon-service.png b/src/wgt/icon-service.png
new file mode 100644
index 0000000..3aeb6f0
--- /dev/null
+++ b/src/wgt/icon-service.png
Binary files differ