# 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)
# To be call inside project_targets_populate macro
macro(afb_genskel)
+ if ("${PROJECT_LANGUAGES}" MATCHES "CXX")
+ list(APPEND GENSKEL_OPTS "--cpp")
+ endif()
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
+ COMMAND afb-genskel ${GENSKEL_OPTS} ${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")
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
+ COMMAND afb-genskel ${GENSKEL_OPTS} ${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")
# 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})
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()