From 5f06de040287a5df88d21367da9e8725d8585ba1 Mon Sep 17 00:00:00 2001 From: Romain Forlot Date: Mon, 5 Nov 2018 10:38:16 +0100 Subject: Adding packaging files Change-Id: I70d30588c59e6a0d3c451c74fc6cc565b5eea167 Signed-off-by: Romain Forlot --- src/cmake/cmake.d/01-build_options.cmake | 156 +++++++ src/cmake/cmake.d/02-variables.cmake | 205 ++++++++ src/cmake/cmake.d/03-macros.cmake | 695 ++++++++++++++++++++++++++++ src/cmake/cmake.d/04-extra_targets.cmake | 69 +++ src/cmake/common.cmake | 121 +++++ src/cmake/configure_file.cmake | 2 + src/cmake/export.map | 1 + src/samples.d/CMakeLists.txt.sample | 21 + src/samples.d/config.cmake.sample | 201 ++++++++ src/samples.d/config.xml.in.sample | 142 ++++++ src/samples.d/xds-config.env.sample | 10 + src/template.d/autobuild/agl/autobuild.in | 75 +++ src/template.d/autobuild/linux/autobuild.in | 75 +++ src/template.d/config.xml.in | 9 + src/template.d/deb-config.dsc.in | 15 + src/template.d/deb-config.install.in | 2 + src/template.d/debian.changelog.in | 5 + src/template.d/debian.compat.in | 1 + src/template.d/debian.control.in | 16 + src/template.d/debian.rules.in | 87 ++++ src/template.d/gdb-on-target.ini.in | 39 ++ src/template.d/install-wgt-on-target.sh.in | 19 + src/template.d/rpm-config.spec.in | 62 +++ src/template.d/start-on-target.sh.in | 35 ++ src/template.d/xds-project-target.conf.in | 12 + src/test-wgt/launcher.sh.in | 69 +++ src/test-wgt/test-config.xml.in | 25 + src/wgt/icon-default.png | Bin 0 -> 10651 bytes src/wgt/icon-html5.png | Bin 0 -> 6848 bytes src/wgt/icon-native.png | Bin 0 -> 5276 bytes src/wgt/icon-qml.png | Bin 0 -> 4971 bytes src/wgt/icon-service.png | Bin 0 -> 13273 bytes 32 files changed, 2169 insertions(+) create mode 100644 src/cmake/cmake.d/01-build_options.cmake create mode 100644 src/cmake/cmake.d/02-variables.cmake create mode 100644 src/cmake/cmake.d/03-macros.cmake create mode 100644 src/cmake/cmake.d/04-extra_targets.cmake create mode 100644 src/cmake/common.cmake create mode 100644 src/cmake/configure_file.cmake create mode 100644 src/cmake/export.map create mode 100644 src/samples.d/CMakeLists.txt.sample create mode 100644 src/samples.d/config.cmake.sample create mode 100644 src/samples.d/config.xml.in.sample create mode 100644 src/samples.d/xds-config.env.sample create mode 100755 src/template.d/autobuild/agl/autobuild.in create mode 100755 src/template.d/autobuild/linux/autobuild.in create mode 100644 src/template.d/config.xml.in create mode 100644 src/template.d/deb-config.dsc.in create mode 100644 src/template.d/deb-config.install.in create mode 100644 src/template.d/debian.changelog.in create mode 100644 src/template.d/debian.compat.in create mode 100644 src/template.d/debian.control.in create mode 100644 src/template.d/debian.rules.in create mode 100644 src/template.d/gdb-on-target.ini.in create mode 100755 src/template.d/install-wgt-on-target.sh.in create mode 100644 src/template.d/rpm-config.spec.in create mode 100755 src/template.d/start-on-target.sh.in create mode 100644 src/template.d/xds-project-target.conf.in create mode 100644 src/test-wgt/launcher.sh.in create mode 100644 src/test-wgt/test-config.xml.in create mode 100644 src/wgt/icon-default.png create mode 100644 src/wgt/icon-html5.png create mode 100644 src/wgt/icon-native.png create mode 100644 src/wgt/icon-qml.png create mode 100644 src/wgt/icon-service.png (limited to 'src') 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 +# Romain Forlot +# +# 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($<$:${option}>) +endforeach() +foreach(option ${CXX_COMPILE_OPTIONS}) + add_compile_options($<$:${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($<$:${option}>) +endforeach() +foreach(option ${DEBUG_COMPILE_OPTIONS}) + add_compile_options($<$:${option}>) +endforeach() +foreach(option ${COVERAGE_COMPILE_OPTIONS}) + add_compile_options($<$:${option}>) +endforeach() +foreach(option ${RELEASE_COMPILE_OPTIONS}) + add_compile_options($<$:${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 +# contrib: Romain Forlot +# +# 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 +# contrib: Romain Forlot +# +# 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 +# contrib: Romain Forlot +# +# 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 +# contrib: Romain Forlot +# +# 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 +# +# 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 +# +# 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 @@ + + + @PROJECT_NAME@ + + + @PROJECT_DESCRIPTION@ + @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@> + @PROJECT_LICENSE@ + + + + + + + + + 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" +# +# 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" +# +# 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 @@ + + + @PROJECT_NAME@ + + + @PROJECT_DESCRIPTION@ + @PROJECT_AUTHOR@ <@PROJECT_AUTHOR_MAIL@> + @PROJECT_LICENSE@ + 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 +# +# 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 + + @PROJECT_NAME@-test + + + Test widget used to launch tests for the project @PROJECT_NAME@ + Romain Forlot <romain.forlot@iot.bzh> + APL2.0 + + + + + + + + + + + + + + + + + diff --git a/src/wgt/icon-default.png b/src/wgt/icon-default.png new file mode 100644 index 0000000..def888b Binary files /dev/null and b/src/wgt/icon-default.png differ diff --git a/src/wgt/icon-html5.png b/src/wgt/icon-html5.png new file mode 100644 index 0000000..a3573ef Binary files /dev/null and b/src/wgt/icon-html5.png differ diff --git a/src/wgt/icon-native.png b/src/wgt/icon-native.png new file mode 100644 index 0000000..fcb5d35 Binary files /dev/null and b/src/wgt/icon-native.png differ diff --git a/src/wgt/icon-qml.png b/src/wgt/icon-qml.png new file mode 100644 index 0000000..ba248ea Binary files /dev/null and b/src/wgt/icon-qml.png differ diff --git a/src/wgt/icon-service.png b/src/wgt/icon-service.png new file mode 100644 index 0000000..3aeb6f0 Binary files /dev/null and b/src/wgt/icon-service.png differ -- cgit 1.2.3-korg