diff --git a/cmake/VERSION b/cmake/VERSION index ff313b8c..0cbfaed0 100644 --- a/cmake/VERSION +++ b/cmake/VERSION @@ -1 +1 @@ -3.8.4 +3.8.5 diff --git a/cmake/ecbuild_add_library.cmake b/cmake/ecbuild_add_library.cmake index 03552bed..eeb6a95e 100644 --- a/cmake/ecbuild_add_library.cmake +++ b/cmake/ecbuild_add_library.cmake @@ -360,11 +360,15 @@ function( ecbuild_add_library_impl ) if( "${_p_TYPE}" STREQUAL LIBS ) target_link_libraries( ${_PAR_TARGET} ${_p_INTF} ${deps} ) ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): linking with [${deps}] ${_p_INTF}") - ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): [${skipped_deps}] not found - not linking ${_p_INTF}") + if( skipped_deps ) + ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): [${skipped_deps}] not found - not linking ${_p_INTF}") + endif() else() target_include_directories( ${_PAR_TARGET} ${_p_INTF} ${deps} ) ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): add [${deps}] to include_directories ${_p_INTF}") - ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): [${skipped_deps}] not found - not adding to include_directories ${_p_INTF}") + if( skipped_deps ) + ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): [${skipped_deps}] not found - not adding to include_directories ${_p_INTF}") + endif() endif() endfunction() @@ -581,8 +585,8 @@ function( ecbuild_add_library_impl ) # add definitions to compilation if( DEFINED _PAR_PUBLIC_DEFINITIONS ) - target_compile_definitions(${_PAR_TARGET} PUBLIC ${_PAR_PUBLIC_DEFINITIONS}) - ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): adding PUBLIC definitions ${_PAR_PUBLIC_DEFINITIONS}") + target_compile_definitions(${_PAR_TARGET} ${_PUBLIC_INTF} ${_PAR_PUBLIC_DEFINITIONS}) + ecbuild_debug("ecbuild_add_library(${_PAR_TARGET}): adding ${_PUBLIC_INTF} definitions ${_PAR_PUBLIC_DEFINITIONS}") endif() if( DEFINED _PAR_PRIVATE_DEFINITIONS ) target_compile_definitions(${_PAR_TARGET} PRIVATE ${_PAR_PRIVATE_DEFINITIONS}) @@ -590,7 +594,7 @@ function( ecbuild_add_library_impl ) endif() if( DEFINED _PAR_DEFINITIONS ) if( _PAR_TYPE MATCHES "INTERFACE" ) - target_compile_definitions(${_PAR_TARGET} PUBLIC ${_PAR_DEFINITIONS}) + target_compile_definitions(${_PAR_TARGET} INTERFACE ${_PAR_DEFINITIONS}) else() target_compile_definitions(${_PAR_TARGET} PRIVATE ${_PAR_DEFINITIONS}) endif() diff --git a/cmake/ecbuild_policies.cmake b/cmake/ecbuild_policies.cmake index 4e835859..41f57bf1 100644 --- a/cmake/ecbuild_policies.cmake +++ b/cmake/ecbuild_policies.cmake @@ -43,4 +43,9 @@ if( POLICY CMP0074 ) cmake_policy( SET CMP0074 NEW ) endif() +# Detect invalid indices in the ``list()`` command, new in version 3.21 +if( POLICY CMP0121 ) + cmake_policy( SET CMP0121 NEW ) +endif() + endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 91b72e52..472c97c3 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -9,3 +9,4 @@ add_subdirectory( ecbuild_add_flags ) add_subdirectory( find_ecbuild ) add_subdirectory( project_import ) add_subdirectory( ecbuild_shared_libs ) +add_subdirectory( interface_library ) diff --git a/tests/ecbuild_add_option/test_project/CMakeLists.txt b/tests/ecbuild_add_option/test_project/CMakeLists.txt index 388e0c39..32e13518 100644 --- a/tests/ecbuild_add_option/test_project/CMakeLists.txt +++ b/tests/ecbuild_add_option/test_project/CMakeLists.txt @@ -3,8 +3,6 @@ cmake_minimum_required(VERSION 3.11 FATAL_ERROR) find_package( ecbuild REQUIRED ) project( test_add_option VERSION 0.1.0 LANGUAGES NONE ) -list(INSERT 0 CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - ecbuild_add_option(FEATURE TEST_A) # should default to ON ecbuild_add_option(FEATURE TEST_B DEFAULT ON) ecbuild_add_option(FEATURE TEST_C DEFAULT OFF) diff --git a/tests/interface_library/.gitignore b/tests/interface_library/.gitignore new file mode 100644 index 00000000..a7ff190f --- /dev/null +++ b/tests/interface_library/.gitignore @@ -0,0 +1,2 @@ +build_test_interface_library +install_test_interface_library diff --git a/tests/interface_library/CMakeLists.txt b/tests/interface_library/CMakeLists.txt new file mode 100644 index 00000000..37d6e123 --- /dev/null +++ b/tests/interface_library/CMakeLists.txt @@ -0,0 +1,7 @@ + +ecbuild_add_test( + TARGET test_ecbuild_interface_library + TYPE SCRIPT + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/build-and-run.sh + ENVIRONMENT CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/tests/interface_library/build-and-run.sh b/tests/interface_library/build-and-run.sh new file mode 100755 index 00000000..fd4a7172 --- /dev/null +++ b/tests/interface_library/build-and-run.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -e + +HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"} +SOURCE=${CMAKE_CURRENT_SOURCE_DIR:-$HERE} + +# Add ecbuild to path +export PATH=$SOURCE/../../bin:$PATH +echo $PATH +echo $SOURCE + +run_test() { + + local tname=$1 + local exp_sts=$2 + shift 2 + + local bdir=$HERE/build_$tname + local idir=$HERE/install_$tname + local logf=$HERE/$tname.log + + mkdir -p $bdir && cd $bdir + local sts=0 + echo "Running test '$tname'" + ecbuild --prefix=$idir -- -Wno-deprecated $* $SOURCE/test_project >$logf 2>&1 || sts=$? + + make install + + if [[ $sts -ne $exp_sts ]] ; then + echo "Test '$tname': expected exit code $exp_sts, got $sts" + cat $logf + exit 1 + fi +} + +# --------------------- cleanup ------------------------ +$SOURCE/clean.sh + +# ---------------------- tests ------------------------- +run_test test_interface_library 0 diff --git a/tests/interface_library/clean.sh b/tests/interface_library/clean.sh new file mode 100755 index 00000000..fb48fcf8 --- /dev/null +++ b/tests/interface_library/clean.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +set -e + +HERE=${CMAKE_CURRENT_BINARY_DIR:-"$( cd $( dirname "${BASH_SOURCE[0]}" ) && pwd -P )"} + +# --------------------- cleanup ------------------------ +echo "cleaning $HERE" +rm -rf $HERE/build_* $HERE/*.log diff --git a/tests/interface_library/test_project/CMakeLists.txt b/tests/interface_library/test_project/CMakeLists.txt new file mode 100644 index 00000000..83b77515 --- /dev/null +++ b/tests/interface_library/test_project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.17 FATAL_ERROR) + +find_package( ecbuild REQUIRED ) +project( test_interface_library VERSION 0.1.0 LANGUAGES C ) + +ecbuild_add_library( TARGET intfb_lib TYPE INTERFACE + PUBLIC_INCLUDES + $ + $ENV{HOME} + PUBLIC_LIBS some_lib + PUBLIC_DEFINITIONS MYDEF=1 + ) +ecbuild_install_project( NAME test_interface_library )