diff options
-rw-r--r-- | .github/workflows/http3-linux.yml | 2 | ||||
-rw-r--r-- | .github/workflows/linux-old.yml | 3 | ||||
-rw-r--r-- | .github/workflows/linux.yml | 2 | ||||
-rw-r--r-- | .github/workflows/macos.yml | 4 | ||||
-rw-r--r-- | .github/workflows/non-native.yml | 10 | ||||
-rw-r--r-- | .github/workflows/windows.yml | 10 | ||||
-rw-r--r-- | appveyor.sh | 2 | ||||
-rw-r--r-- | docs/examples/CMakeLists.txt | 36 |
8 files changed, 51 insertions, 18 deletions
diff --git a/.github/workflows/http3-linux.yml b/.github/workflows/http3-linux.yml index 3dab2b56c..3fec31519 100644 --- a/.github/workflows/http3-linux.yml +++ b/.github/workflows/http3-linux.yml @@ -546,7 +546,7 @@ jobs: - name: 'build examples' run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --verbose --target curl-examples + cmake --build bld --verbose --target curl-examples-build else make -C bld V=1 examples fi diff --git a/.github/workflows/linux-old.yml b/.github/workflows/linux-old.yml index 5b8f92f03..736a3cc10 100644 --- a/.github/workflows/linux-old.yml +++ b/.github/workflows/linux-old.yml @@ -123,6 +123,9 @@ jobs: - name: 'cmake run tests' run: make -C bld-cares test-ci + - name: 'cmake build examples' + run: make -C bld-cares curl-examples-build + - name: 'autoreconf' run: autoreconf -if diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b293a140f..7c64a2355 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -698,7 +698,7 @@ jobs: if: ${{ matrix.build.make-custom-target != 'tidy' }} run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - ${MATRIX_MAKE_PREFIX} cmake --build bld --verbose --target curl-examples + ${MATRIX_MAKE_PREFIX} cmake --build bld --verbose --target curl-examples-build else ${MATRIX_MAKE_PREFIX} make -C bld V=1 examples fi diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 04c30a75c..90d04fab1 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -199,7 +199,7 @@ jobs: - name: 'build examples' run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld ${MATRIX_OPTIONS} --parallel 4 --target curl-examples --verbose + cmake --build bld ${MATRIX_OPTIONS} --parallel 4 --target curl-examples-build --verbose else make -C bld examples V=1 fi @@ -520,7 +520,7 @@ jobs: if: ${{ contains(matrix.build.name, '+examples') }} run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --verbose --target curl-examples + cmake --build bld --verbose --target curl-examples-build else make -C bld examples V=1 fi diff --git a/.github/workflows/non-native.yml b/.github/workflows/non-native.yml index 9a9280421..e8a105e39 100644 --- a/.github/workflows/non-native.yml +++ b/.github/workflows/non-native.yml @@ -83,7 +83,7 @@ jobs: time cmake --build bld --target test-ci fi echo '::group::build examples' - time cmake --build bld --target curl-examples + time cmake --build bld --target curl-examples-build echo '::endgroup::' openbsd: @@ -128,7 +128,7 @@ jobs: time cmake --build bld --target test-ci fi echo '::group::build examples' - time cmake --build bld --target curl-examples + time cmake --build bld --target curl-examples-build echo '::endgroup::' freebsd: @@ -232,7 +232,7 @@ jobs: if [ "${MATRIX_DESC#*!examples*}" = "${MATRIX_DESC}" ]; then echo '::group::build examples' if [ "${MATRIX_BUILD}" = 'cmake' ]; then - time cmake --build bld --target curl-examples + time cmake --build bld --target curl-examples-build else time make -C bld examples fi @@ -361,7 +361,7 @@ jobs: - name: 'build examples' run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --target curl-examples + cmake --build bld --target curl-examples-build else make -C bld examples fi @@ -473,7 +473,7 @@ jobs: if: ${{ matrix.build == 'cmake' }} # skip for autotools to save time run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --target curl-examples + cmake --build bld --target curl-examples-build else make -C bld examples fi diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d0e1157f7..5d9aac713 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -177,7 +177,7 @@ jobs: run: | PATH=/usr/bin if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --verbose --target curl-examples + cmake --build bld --verbose --target curl-examples-build else make -C bld V=1 examples fi @@ -404,7 +404,7 @@ jobs: timeout-minutes: 5 run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --verbose --target curl-examples + cmake --build bld --verbose --target curl-examples-build else make -C bld V=1 examples fi @@ -589,7 +589,7 @@ jobs: timeout-minutes: 5 run: | PATH="/d/my-cache/${MATRIX_DIR}/bin:$PATH" - cmake --build bld --target curl-examples + cmake --build bld --target curl-examples-build - name: 'disk space used' run: du -sh .; echo; du -sh -t 250KB ./*; echo; du -h -t 250KB bld @@ -687,7 +687,7 @@ jobs: if: ${{ matrix.compiler != 'clang-tidy' }} # Save time by skipping this for clang-tidy run: | if [ "${MATRIX_BUILD}" = 'cmake' ]; then - cmake --build bld --target curl-examples + cmake --build bld --target curl-examples-build else make -C bld examples fi @@ -935,7 +935,7 @@ jobs: - name: 'build examples' timeout-minutes: 5 if: ${{ contains(matrix.name, '+examples') }} - run: cmake --build bld --config "${MATRIX_TYPE}" --parallel 5 --target curl-examples + run: cmake --build bld --config "${MATRIX_TYPE}" --parallel 5 --target curl-examples-build - name: 'disk space used' run: du -sh .; echo; du -sh -t 250KB ./*; echo; du -h -t 250KB bld diff --git a/appveyor.sh b/appveyor.sh index 225d577f8..e9871415e 100644 --- a/appveyor.sh +++ b/appveyor.sh @@ -163,7 +163,7 @@ fi if [ "${EXAMPLES}" = 'ON' ] && \ [ "${BUILD_SYSTEM}" = 'CMake' ]; then - time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples + time cmake --build _bld --config "${PRJ_CFG}" --parallel 2 --target curl-examples-build fi # disk space used diff --git a/docs/examples/CMakeLists.txt b/docs/examples/CMakeLists.txt index f69445fbf..cb1d98389 100644 --- a/docs/examples/CMakeLists.txt +++ b/docs/examples/CMakeLists.txt @@ -28,10 +28,40 @@ add_custom_target(curl-examples) curl_transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") -foreach(_target IN LISTS check_PROGRAMS) +set(_all_canary "") +set(_all "all") +foreach(_target IN LISTS check_PROGRAMS _all) # keep '_all' last set(_target_name "curl-example-${_target}") - add_executable(${_target_name} EXCLUDE_FROM_ALL "${_target}.c") - add_dependencies(curl-examples ${_target_name}) + if(_target STREQUAL "all") + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.12) + set(_examples_c "${check_PROGRAMS}") + list(TRANSFORM _examples_c APPEND ".c") + add_library(${_target_name} OBJECT EXCLUDE_FROM_ALL ${_examples_c}) + if(MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Clang") + # CMake generates a static library for the OBJECT target. Silence these 'lib.exe' warnings: + # warning LNK4006: main already defined in ....obj; second definition ignored + # warning LNK4221: This object file does not define any previously undefined public symbols, + # so it will not be used by any link operation that consumes this library + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13) + set_target_properties(${_target_name} PROPERTIES STATIC_LIBRARY_OPTIONS "-ignore:4006;-ignore:4221") + else() + set_target_properties(${_target_name} PROPERTIES STATIC_LIBRARY_FLAGS "-ignore:4006 -ignore:4221") + endif() + endif() + else() + set(_examples_c "") + foreach(_src IN LISTS check_PROGRAMS) + list(APPEND _examples_c "${_src}.c") + endforeach() + add_library(${_target_name} STATIC EXCLUDE_FROM_ALL ${_examples_c}) + endif() + add_custom_target(curl-examples-build) # Special target to compile all tests quickly and build a single test to probe linkage + add_dependencies(curl-examples-build ${_target_name} ${_all_canary}) # Include a full build of a single test + else() + set(_all_canary ${_target_name}) # Save the last test for the curl-examples-build target + add_executable(${_target_name} EXCLUDE_FROM_ALL "${_target}.c") + add_dependencies(curl-examples ${_target_name}) + endif() target_link_libraries(${_target_name} ${LIB_SELECTED} ${CURL_NETWORK_AND_TIME_LIBS}) target_compile_definitions(${_target_name} PRIVATE "CURL_NO_OLDIES" "$<$<BOOL:${WIN32}>:WIN32_LEAN_AND_MEAN>" "$<$<BOOL:${MSVC}>:_CRT_SECURE_NO_DEPRECATE>") |