X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=reference%2Fetc%2Fmacros.cmake;h=2d04d34e8964d4f11bff1917e7e420989f97a1cc;hb=7df33dd8a243a953d31d442279ea51486a156eac;hp=af5e5420b7c5b2f01ce224f0c4e004c6ae9da6c8;hpb=2d5f16ac2a87b8a9e525e55d9a93aee047e0b141;p=apps%2Fapp-templates.git diff --git a/reference/etc/macros.cmake b/reference/etc/macros.cmake index af5e542..2d04d34 100644 --- a/reference/etc/macros.cmake +++ b/reference/etc/macros.cmake @@ -28,76 +28,85 @@ # Generic useful macro # ----------------------- macro(PROJECT_TARGET_ADD TARGET_NAME) - set(PROJECT_TARGETS ${PROJECT_TARGETS} ${TARGET_NAME} CACHE INTERNAL PROJECT_TARGETS) + set_property(GLOBAL APPEND PROPERTY PROJECT_TARGETS ${TARGET_NAME}) set(TARGET_NAME ${TARGET_NAME}) - - # Cmake does not maintain targets list before 3.7 - # ------------------------------------------------- - if(${CMAKE_VERSION} VERSION_LESS 3.7) - set(GLOBAL_TARGET_LIST ${PROJECT_TARGETS}) - else() - get_property(GLOBAL_TARGET_LIST GLOBAL PROPERTY GlobalTargetList) - endif() endmacro(PROJECT_TARGET_ADD) +# Check GCC minimal version version +if (gcc_minimal_version) + message ("-- Check gcc_minimal_version (found gcc version ${CMAKE_C_COMPILER_VERSION}) (found g++ version ${CMAKE_CXX_COMPILER_VERSION})") +if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version} OR CMAKE_C_COMPILER_VERSION VERSION_LESS ${gcc_minimal_version}) + message(FATAL_ERROR "**** FATAL: Require at least gcc-${gcc_minimal_version} please set CMAKE_C[XX]_COMPILER") +endif() +endif(gcc_minimal_version) + macro(defstr name value) add_definitions(-D${name}=${value}) endmacro(defstr) # WGT packaging macro(project_targets_populate) + add_custom_target(MAIN_POPULATE) foreach(TARGET ${PROJECT_TARGETS}) - # Declaration of a custom command that will populate widget tree with the target - set(POPULE_WIDGET_TARGET "project_populate_${TARGET}") - get_target_property(T ${TARGET} LABELS) - get_target_property(P ${TARGET} PREFIX) - get_target_property(BD ${TARGET} BINARY_DIR) - get_target_property(OUT ${TARGET} OUTPUT_NAME) - - if(${P} STREQUAL "P-NOTFOUND" AND ${T} STREQUAL "BINDING") - set(P "lib") - elseif(${P} STREQUAL "P-NOTFOUND") - set(P "") - endif(${P} STREQUAL "P-NOTFOUND" AND ${T} STREQUAL "BINDING") - - if(${T} STREQUAL "BINDING") - add_custom_command(OUTPUT ${WIDGET_LIBDIR}/${P}${TARGET}.so - DEPENDS ${TARGET} - COMMAND mkdir -p ${WIDGET_LIBDIR} - COMMAND cp ${BD}/${P}${OUT}.so ${WIDGET_LIBDIR} - ) - add_custom_target(${POPULE_WIDGET_TARGET} ALL DEPENDS ${WIDGET_LIBDIR}/${P}${TARGET}.so) - elseif(${T} STREQUAL "EXECUTABLE") - add_custom_command(OUTPUT ${WIDGET_BINDIR}/${P}${TARGET} - DEPENDS ${TARGET} - COMMAND mkdir -p ${WIDGET_BINDIR} - COMMAND cp ${BD}/${P}${OUT} ${WIDGET_BINDIR} - ) - add_custom_target(${POPULE_WIDGET_TARGET} ALL DEPENDS ${WIDGET_BINDIR}/${P}${TARGET}) - elseif(${T} STREQUAL "HTDOCS") - add_custom_command(OUTPUT ${WIDGET_HTTPDIR} - DEPENDS ${TARGET} - COMMAND cp -r ${BD}/${P}${OUT} ${WIDGET_HTTPDIR} + if(T) + # Declaration of a custom command that will populate widget tree with the target + set(POPULE_WIDGET_TARGET "project_populate_${TARGET}") + + get_target_property(P ${TARGET} PREFIX) + get_target_property(BD ${TARGET} BINARY_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") + add_custom_command(OUTPUT ${WIDGET_LIBDIR}/${P}${TARGET}.so + DEPENDS ${TARGET} + COMMAND mkdir -p ${WIDGET_LIBDIR} + COMMAND cp ${BD}/${P}${OUT}.so ${WIDGET_LIBDIR} ) - add_custom_target(${POPULE_WIDGET_TARGET} ALL DEPENDS ${WIDGET_HTTPDIR}) - elseif(${T} STREQUAL "DATA") - add_custom_command(OUTPUT ${WIDGET_DATADIR} - DEPENDS ${TARGET} - COMMAND cp -r ${BD}/${P}${OUT} ${WIDGET_DATADIR} + add_custom_target(${POPULE_WIDGET_TARGET} DEPENDS ${WIDGET_LIBDIR}/${P}${TARGET}.so) + add_dependencies(MAIN_POPULATE ${POPULE_WIDGET_TARGET}) + elseif(${T} STREQUAL "EXECUTABLE") + add_custom_command(OUTPUT ${WIDGET_BINDIR}/${P}${TARGET} + DEPENDS ${TARGET} + COMMAND mkdir -p ${WIDGET_BINDIR} + COMMAND cp ${BD}/${P}${OUT} ${WIDGET_BINDIR} ) - add_custom_target(${POPULE_WIDGET_TARGET} ALL DEPENDS ${WIDGET_HTTPDIR}) - else() - if(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]") - MESSAGE(AUTHOR_WARNING "This target, ${TARGET}, will be not be included in the package.") - endif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]") - endif(${T} STREQUAL "BINDING") - PROJECT_TARGET_ADD(${POPULE_WIDGET_TARGET}) + add_custom_target(${POPULE_WIDGET_TARGET} DEPENDS ${WIDGET_BINDIR}/${P}${TARGET}) + add_dependencies(MAIN_POPULATE ${POPULE_WIDGET_TARGET}) + elseif(${T} STREQUAL "HTDOCS") + add_custom_command(OUTPUT ${WIDGET_HTTPDIR} + DEPENDS ${TARGET} + COMMAND cp -r ${BD}/${P}${OUT} ${WIDGET_HTTPDIR} + ) + add_custom_target(${POPULE_WIDGET_TARGET} DEPENDS ${WIDGET_HTTPDIR}) + add_dependencies(MAIN_POPULATE ${POPULE_WIDGET_TARGET}) + elseif(${T} STREQUAL "DATA") + add_custom_command(OUTPUT ${WIDGET_DATADIR} + DEPENDS ${TARGET} + COMMAND cp -r ${BD}/${P}${OUT} ${WIDGET_DATADIR} + ) + add_custom_target(${POPULE_WIDGET_TARGET} DEPENDS ${WIDGET_HTTPDIR}) + add_dependencies(MAIN_POPULATE ${POPULE_WIDGET_TARGET}) + endif(${T} STREQUAL "BINDING") +# elseif(${CMAKE_BUILD_TYPE} MATCHES "[Dd][Ee][Bb][Uu][Gg]") +# MESSAGE(WARNING "This target, ${TARGET}, will be not be included in the package.") + endif() endforeach() endmacro(project_targets_populate) macro(project_package_build) - if("${PROJECT_TARGETS}" MATCHES "project_populate_") + if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_WGT_DIR}/config.xml.in OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_WGT_DIR}/${PROJECT_ICON}.in) + MESSAGE(FATAL_ERROR "Missing mandatory files: you need config.xml.in and ${PROJECT_ICON}.in files in ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_WGT_DIR} folder.") + endif() + if(NOT EXISTS ${WIDGET_DIR}/config.xml.in OR NOT EXISTS ${WIDGET_DIR}/${PROJECT_ICON}.in) configure_file(${PROJECT_WGT_DIR}/config.xml.in ${WIDGET_DIR}/config.xml) file(COPY ${PROJECT_WGT_DIR}/${PROJECT_ICON}.in DESTINATION ${WIDGET_DIR}/${PROJECT_ICON}) @@ -109,14 +118,19 @@ macro(project_package_build) endif(${PROJECT_CONF_FILES}) add_custom_command(OUTPUT ${PROJECT_NAME}.wgt - DEPENDS ${PROJECT_TARGETS} - COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${WIDGET_DIR} + DEPENDS ${PROJECT_TARGETS} + COMMAND wgtpkg-pack -f -o ${PROJECT_NAME}.wgt ${WIDGET_DIR} ) + add_custom_target(widget DEPENDS ${PROJECT_NAME}.wgt) + add_dependencies(widget MAIN_POPULATE) set(ADDITIONAL_MAKE_CLEAN_FILES, "${PROJECT_NAME}.wgt") - else() - MESSAGE(FATAL_ERROR "Widget tree empty, please populate it by calling populate_widget() macro with target you want to include into it.") - endif("${PROJECT_TARGETS}" MATCHES "project_populate_") + + if(WIDGET_MESSAGE) + add_custom_command(TARGET widget + POST_BUILD + COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${WIDGET_MESSAGE}") + endif() endmacro(project_package_build) macro(project_subdirs_add) @@ -233,13 +247,14 @@ if(EXTRA_DEPENDENCIES_ORDER) ) endif() -# Print developer helper message when everything is done +# Print developer helper message when build is done # ------------------------------------------------------- macro(project_closing_msg) - if(CLOSING_MESSAGE AND GLOBAL_TARGET_LIST) - add_custom_target(${PROJECT_NAME}_done ALL - DEPENDS ${DEPENDENCIES_TARGET} ${GLOBAL_TARGET_LIST} + if(CLOSING_MESSAGE AND PROJECT_TARGETS) + add_custom_target(${PROJECT_NAME}_build_done ALL COMMAND ${CMAKE_COMMAND} -E cmake_echo_color --cyan "++ ${CLOSING_MESSAGE}" ) + add_dependencies(${PROJECT_NAME}_build_done + ${DEPENDENCIES_TARGET} ${PROJECT_TARGETS}) endif() endmacro()