# 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(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)
- 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})
+ 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)
# Generic useful macro
# -----------------------
+macro(set_install_prefix)
+ if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND INSTALL_PREFIX)
+ message(STATUS "-- 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})
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(BINDIR bin)
- set(ETCDIR etc)
- set(LIBDIR lib)
- set(HTTPDIR htdocs)
- set(DATADIR data)
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})
-
- add_custom_command(OUTPUT ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR}
- COMMAND mkdir -p ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
- add_custom_target(populate DEPENDS ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
+ # 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})
+
+ if(${BUILD_TEST_WGT})
+ 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} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR}
+ COMMAND mkdir -p ${PACKAGE_TEST_BINDIR} ${PACKAGE_TEST_ETCDIR} ${PACKAGE_TEST_LIBDIR} ${PACKAGE_TEST_HTTPDIR} ${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})
+ else()
+ add_custom_command(OUTPUT ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR}
+ COMMAND mkdir -p ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
+ add_custom_target(populate DEPENDS ${PACKAGE_BINDIR} ${PACKAGE_ETCDIR} ${PACKAGE_LIBDIR} ${PACKAGE_HTTPDIR} ${PACKAGE_DATADIR})
+ endif()
# Dirty trick to define a default INSTALL command for app-templates handled
# targets
get_property(PROJECT_TARGETS GLOBAL PROPERTY PROJECT_TARGETS)
foreach(TARGET ${PROJECT_TARGETS})
- get_target_property(T ${TARGET} LABELS)
- if(T)
# Declaration of a custom command that will populate widget tree with the target
set(POPULE_PACKAGE_TARGET "project_populate_${TARGET}")
-
- 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 "BINDING")
- set(P "lib")
- else()
- set(P "")
- endif()
- endif()
-
- if(${T} STREQUAL "BINDING" OR ${T} STREQUAL "PLUGIN")
- if(NOT S)
- list(APPEND BINDINGS_LIST "${P}${OUT}")
- set(S ".so")
- else()
- set(PACKAGE_LIBDIR_BCK "${PACKAGE_LIBDIR}")
- set(PACKAGE_LIBDIR "${PACKAGE_LIBDIR}/plugins")
+ 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")
+ set(P "lib")
+ else()
+ set(P "")
+ endif()
endif()
- add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}${S}
- DEPENDS ${BD}/${P}${OUT}${S}
- COMMAND mkdir -p ${PACKAGE_LIBDIR}
- COMMAND cp ${BD}/${P}${OUT}${S} ${PACKAGE_LIBDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}${S})
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- set(PACKAGE_LIBDIR ${PACKAGE_LIBDIR_BCK})
- elseif(${T} STREQUAL "BINDINGV2")
- if (OPENAPI_DEF)
- add_custom_command(OUTPUT ${SD}/${OPENAPI_DEF}.h
- DEPENDS ${SD}/${OPENAPI_DEF}.json
- COMMAND afb-genskel ${SD}/${OPENAPI_DEF}.json > ${SD}/${OPENAPI_DEF}.h
+ 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(${T} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
)
- add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OPENAPI_DEF}.h
- COMMENT "Generating OpenAPI header file ${OPENAPI_DEF}.h")
- add_dependencies(${TARGET} "${TARGET}_GENSKEL")
- else()
- add_custom_command(OUTPUT ${SD}/${OUT}-apidef.h
- DEPENDS ${SD}/${OUT}-apidef.json
- COMMAND afb-genskel ${SD}/${OUT}-apidef.json > ${SD}/${OUT}-apidef.h
+ 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(${T} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
)
- add_custom_target("${TARGET}_GENSKEL" DEPENDS ${SD}/${OUT}-apidef.h
- COMMENT "Generating OpenAPI header file ${OUT}-apidef.h")
- add_dependencies(${TARGET} "${TARGET}_GENSKEL")
- endif()
-
- add_custom_command(OUTPUT ${PACKAGE_LIBDIR}/${P}${OUT}.so
- DEPENDS ${BD}/${P}${OUT}.so
- COMMAND mkdir -p ${PACKAGE_LIBDIR}
- COMMAND cp ${BD}/${P}${OUT}.so ${PACKAGE_LIBDIR}
+ 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(${T} PROPERTIES
+ LINK_FLAGS ${BINDINGS_LINK_FLAG}
)
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_LIBDIR}/${P}${OUT}.so)
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "EXECUTABLE")
- add_custom_command(OUTPUT ${PACKAGE_BINDIR}/${P}${OUT}
- DEPENDS ${BD}/${P}${OUT}
- COMMAND mkdir -p ${PACKAGE_BINDIR}
- COMMAND cp ${BD}/${P}${OUT} ${PACKAGE_BINDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_BINDIR}/${P}${OUT})
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "HTDOCS")
- add_custom_command(OUTPUT ${PACKAGE_HTTPDIR}-xx
- DEPENDS ${BD}/${P}${OUT}
- COMMAND mkdir -p ${PACKAGE_HTTPDIR}
- COMMAND touch ${PACKAGE_HTTPDIR}
- COMMAND cp -r ${BD}/${P}${OUT}/* ${PACKAGE_HTTPDIR}
- )
- add_custom_target(${POPULE_PACKAGE_TARGET} DEPENDS ${PACKAGE_HTTPDIR}-xx)
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "DATA")
- # Generate list of output files instead of just one output directory
- get_target_property(SF ${TARGET} SOURCES)
- foreach(file ${SF})
- get_filename_component(JUST_FILENAME ${file} NAME)
- list(APPEND OUTPUT_FILES ${PACKAGE_DATADIR}/${JUST_FILENAME})
- endforeach()
- add_custom_target(${POPULE_PACKAGE_TARGET})
- add_custom_command(TARGET ${POPULE_PACKAGE_TARGET}
- POST_BUILD
- COMMAND mkdir -p ${PACKAGE_DATADIR}
- COMMAND touch ${PACKAGE_DATADIR}
- COMMAND cp -r ${BD}/${TARGET} ${PACKAGE_DATADIR}
- )
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- elseif(${T} STREQUAL "BINDING-CONFIG")
- # Generate list of output files instead of just one output directory
- get_target_property(SF ${TARGET} SOURCES)
- foreach(file ${SF})
- get_filename_component(JUST_FILENAME ${file} NAME)
- list(APPEND OUTPUT_FILES ${PACKAGE_ETCDIR}/${JUST_FILENAME})
- endforeach()
- add_custom_target(${POPULE_PACKAGE_TARGET})
- add_custom_command(TARGET ${POPULE_PACKAGE_TARGET}
- POST_BUILD
- COMMAND mkdir -p ${PACKAGE_ETCDIR}
- COMMAND touch ${PACKAGE_ETCDIR}
- COMMAND cp -r ${BD}/${TARGET}/* ${PACKAGE_ETCDIR}
- )
- add_dependencies(populate ${POPULE_PACKAGE_TARGET})
- add_dependencies(${POPULE_PACKAGE_TARGET} ${TARGET})
- endif()
- elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]")
- MESSAGE("${Yellow}.. Warning: ${TARGET} ignored when packaging.${ColourReset}")
+ 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("${Yellow}.. Warning: ${TARGET} ignored when packaging.${ColourReset}")
endif()
endforeach()
endmacro(project_targets_populate)
endmacro(remote_targets_populate)
macro(wgt_package_build)
+ if(NOT EXISTS ${TEST_WIDGET_CONFIG_TEMPLATE})
+ MESSAGE(STATUS "${BoldBlue}Notice!:Using default test widget configuration's file.\n-- 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 "${CMAKE_SOURCE_DIR}/${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.\nYou need a config.xml template: please specify WIDGET_CONFIG_TEMPLATE correctly.${ColourReset}")
endif()
set(WIDGET_ENTRY_POINT lib)
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 ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/cmake/configure_file.cmake
- COMMAND cp ${ICON_PATH} ${PROJECT_PKG_BUILD_DIR}/${PROJECT_ICON}
-
- )
- add_custom_target(packaging_wgt DEPENDS ${PROJECT_PKG_BUILD_DIR}/config.xml)
+ 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/*")
file(COPY "${TEMPLATE_DIR}/etc/*" DESTINATION ${PROJECT_PKG_BUILD_DIR}/etc/)
endif(${PROJECT_CONF_FILES})
- add_custom_command(OUTPUT ${PROJECT_NAME}.wgt
+ 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 ${CMAKE_CURRENT_SOURCE_DIR}/${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 ${CMAKE_SOURCE_DIR}/${PROJECT_APP_TEMPLATES_DIR}/test-widget/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 wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${PROJECT_PKG_BUILD_DIR}
+ COMMAND ${packCMDTest}
)
- add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt)
+ 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)
+ endif()
+
add_dependencies(widget populate packaging_wgt)
- set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.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}")
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()
+ 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
endif()
endmacro(rpm_package_build)
-macro(deb_package_build)
-#TODO
-endmacro(deb_package_build)
-
macro(project_package_build)
-# if(EXISTS ${TEMPLATE_DIR})
-# rpm_package_build()
-# endif()
-
if(EXISTS ${TEMPLATE_DIR})
wgt_package_build()
endif()
-
-# if(EXISTS ${TEMPLATE_DIR})
-# deb_package_build()
-# endif()
endmacro(project_package_build)
macro(project_subdirs_add)
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)
${PROJECT_TARGETS} populate)
endif()
endmacro()
+
+macro(check_version)
+ if(GIT_PROJECT_VERSION)
+ if(${GIT_PROJECT_VERSION} VERSION_GREATER ${APP_TEMPLATES_VERSION})
+ message(STATUS "${Yellow}.. Your app-templates submodule version seems outdated. You should update it with 'git submodule update --remote ${PROJECT_APP_TEMPLATES_DIR}'.
+ - App-templates version: ${APP_TEMPLATES_VERSION}
+ - Project version according AGL Git tag: ${GIT_PROJECT_VERSION}"
+ )
+ endif()
+ elseif(PROJECT_VERSION)
+ if(${PROJECT_VERSION} VERSION_GREATER ${APP_TEMPLATES_VERSION})
+ message(STATUS "${Yellow}.. Your app-templates submodule version seems outdated. You should update it with 'git submodule update --remote ${PROJECT_APP_TEMPLATES_DIR}'.
+ - App-templates version: ${APP_TEMPLATES_VERSION}
+ - Project version according AGL Git tag: ${PROJECT_VERSION}"
+ )
+ endif()
+ else()
+ message(STATUS "${Yellow} Your git project repo doesn't have any version tags nor hosted by AGL gerrit infrastructure. Can't compare version between project and app-templates ${APP_TEMPLATES_VERSION} ${ColourReset}")
+ endif()
+endmacro()