Skip to content

Commit ba267fa

Browse files
authored
Conan 2 (#373)
* Update to Conan 2 and use new cmake-conan dependency provider * Fix warning about defining the CMakeDeps generator being mandatory in the future * Generate and log conan lock file * Document the update to Conan 2 * Bump CMake to 3.28.3, apart from on ubuntu-14.04 * Fix conan.io recipe link
1 parent d1ee2ca commit ba267fa

15 files changed

+792
-150
lines changed

.github/workflows/build-test.yml

+68-34
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,16 @@ jobs:
121121
- name: install conan
122122
if: matrix.use_conan == true
123123
run: |
124-
pip install conan~=1.47
125-
conan config set general.revisions_enabled=1
124+
pip install conan~=2.0.5
126125
127-
- name: install cmake
126+
- name: 'ubuntu-14.04: install cmake'
127+
if: matrix.os == 'ubuntu-14.04'
128128
uses: lukka/[email protected]
129129

130+
- name: install cmake
131+
if: matrix.os != 'ubuntu-14.04'
132+
uses: lukka/[email protected]
133+
130134
- name: setup bash path
131135
working-directory: ${{ env.GITHUB_WORKSPACE }}
132136
shell: bash
@@ -139,7 +143,7 @@ jobs:
139143
if: runner.os == 'Windows'
140144
run: |
141145
# set compiler to cl.exe to avoid building with gcc.
142-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
146+
echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
143147
# disable unused network interface
144148
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
145149
# get host IP address
@@ -269,13 +273,11 @@ jobs:
269273
cmake .. -DCMAKE_BUILD_TYPE:STRING="Release" -DWERROR:BOOL="0" -DBUILD_SAMPLES:BOOL="0" -DBUILD_TESTS:BOOL="0"
270274
make -j 2 && sudo make install
271275
272-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" >> $GITHUB_ENV
273-
274-
- name: disable conan
275-
if: matrix.use_conan == false
276-
shell: bash
277-
run: |
278-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_CONAN:BOOL=\"0\"" >> $GITHUB_ENV
276+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
277+
"-DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" \
278+
"-DNMOS_CPP_USE_SUPPLIED_JSON_SCHEMA_VALIDATOR:BOOL=\"1\"" \
279+
"-DNMOS_CPP_USE_SUPPLIED_JWT_CPP:BOOL=\"1\"" \
280+
>> $GITHUB_ENV
279281
280282
- name: ubuntu avahi setup
281283
if: runner.os == 'Linux' && matrix.install_mdns == false
@@ -292,10 +294,20 @@ jobs:
292294
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_AVAHI:BOOL=\"1\"" >> $GITHUB_ENV
293295
294296
- name: force cpprest asio
295-
if: matrix.force_cpprest_asio == true
297+
if: matrix.force_cpprest_asio == true && matrix.use_conan == true
296298
shell: bash
297299
run: |
298-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_CONAN_OPTIONS:STRING=\"cpprestsdk:http_client_impl=asio;cpprestsdk:http_listener_impl=asio\"" >> $GITHUB_ENV
300+
echo "CONAN_INSTALL_EXTRA_ARGS=--options\;cpprestsdk/*:http_client_impl=asio\;--options\;cpprestsdk/*:http_listener_impl=asio" >> $GITHUB_ENV
301+
302+
- name: enable conan
303+
if: matrix.use_conan == true
304+
shell: bash
305+
run: |
306+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
307+
"-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES:STRING=\"third_party/cmake/conan_provider.cmake\"" \
308+
"-DCONAN_INSTALL_ARGS:STRING=\"--build=missing\;${{ env.CONAN_INSTALL_EXTRA_ARGS }}\;--lockfile-out=conan.lock\"" \
309+
>> $GITHUB_ENV
310+
cat $GITHUB_ENV
299311
300312
- name: setup developer command prompt for Microsoft Visual C++
301313
if: runner.os == 'Windows'
@@ -307,7 +319,12 @@ jobs:
307319
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
308320
cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt'
309321
buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/'
310-
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_EXTRA_ARGS }}'
322+
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_COMPILER_ARGS }} ${{ env.CMAKE_EXTRA_ARGS }}'
323+
324+
- name: dump conan lockfile
325+
if: matrix.use_conan == true
326+
run: |
327+
cat ${{ env.RUNNER_WORKSPACE }}/build/conan.lock
311328
312329
- name: unit test
313330
run: |
@@ -344,10 +361,10 @@ jobs:
344361
cmakeAppendedArgs: '-GNinja
345362
-DCMAKE_BUILD_TYPE=Release
346363
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG="1"
347-
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build"
364+
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan"
348365
-DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install"
349-
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build"
350-
${{ env.CMAKE_EXTRA_ARGS }}'
366+
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan"
367+
${{ env.CMAKE_COMPILER_ARGS }}'
351368

352369
- name: install test log
353370
run: |
@@ -660,12 +677,16 @@ jobs:
660677
- name: install conan
661678
if: matrix.use_conan == true
662679
run: |
663-
pip install conan~=1.47
664-
conan config set general.revisions_enabled=1
680+
pip install conan~=2.0.5
665681
666-
- name: install cmake
682+
- name: 'ubuntu-14.04: install cmake'
683+
if: matrix.os == 'ubuntu-14.04'
667684
uses: lukka/[email protected]
668685

686+
- name: install cmake
687+
if: matrix.os != 'ubuntu-14.04'
688+
uses: lukka/[email protected]
689+
669690
- name: setup bash path
670691
working-directory: ${{ env.GITHUB_WORKSPACE }}
671692
shell: bash
@@ -678,7 +699,7 @@ jobs:
678699
if: runner.os == 'Windows'
679700
run: |
680701
# set compiler to cl.exe to avoid building with gcc.
681-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
702+
echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
682703
# disable unused network interface
683704
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
684705
# get host IP address
@@ -808,13 +829,11 @@ jobs:
808829
cmake .. -DCMAKE_BUILD_TYPE:STRING="Release" -DWERROR:BOOL="0" -DBUILD_SAMPLES:BOOL="0" -DBUILD_TESTS:BOOL="0"
809830
make -j 2 && sudo make install
810831
811-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" >> $GITHUB_ENV
812-
813-
- name: disable conan
814-
if: matrix.use_conan == false
815-
shell: bash
816-
run: |
817-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_CONAN:BOOL=\"0\"" >> $GITHUB_ENV
832+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
833+
"-DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" \
834+
"-DNMOS_CPP_USE_SUPPLIED_JSON_SCHEMA_VALIDATOR:BOOL=\"1\"" \
835+
"-DNMOS_CPP_USE_SUPPLIED_JWT_CPP:BOOL=\"1\"" \
836+
>> $GITHUB_ENV
818837
819838
- name: ubuntu avahi setup
820839
if: runner.os == 'Linux' && matrix.install_mdns == false
@@ -831,10 +850,20 @@ jobs:
831850
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_AVAHI:BOOL=\"1\"" >> $GITHUB_ENV
832851
833852
- name: force cpprest asio
834-
if: matrix.force_cpprest_asio == true
853+
if: matrix.force_cpprest_asio == true && matrix.use_conan == true
835854
shell: bash
836855
run: |
837-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_CONAN_OPTIONS:STRING=\"cpprestsdk:http_client_impl=asio;cpprestsdk:http_listener_impl=asio\"" >> $GITHUB_ENV
856+
echo "CONAN_INSTALL_EXTRA_ARGS=--options\;cpprestsdk/*:http_client_impl=asio\;--options\;cpprestsdk/*:http_listener_impl=asio" >> $GITHUB_ENV
857+
858+
- name: enable conan
859+
if: matrix.use_conan == true
860+
shell: bash
861+
run: |
862+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
863+
"-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES:STRING=\"third_party/cmake/conan_provider.cmake\"" \
864+
"-DCONAN_INSTALL_ARGS:STRING=\"--build=missing\;${{ env.CONAN_INSTALL_EXTRA_ARGS }}\;--lockfile-out=conan.lock\"" \
865+
>> $GITHUB_ENV
866+
cat $GITHUB_ENV
838867
839868
- name: setup developer command prompt for Microsoft Visual C++
840869
if: runner.os == 'Windows'
@@ -846,7 +875,12 @@ jobs:
846875
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
847876
cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt'
848877
buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/'
849-
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_EXTRA_ARGS }}'
878+
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_COMPILER_ARGS }} ${{ env.CMAKE_EXTRA_ARGS }}'
879+
880+
- name: dump conan lockfile
881+
if: matrix.use_conan == true
882+
run: |
883+
cat ${{ env.RUNNER_WORKSPACE }}/build/conan.lock
850884
851885
- name: unit test
852886
run: |
@@ -883,10 +917,10 @@ jobs:
883917
cmakeAppendedArgs: '-GNinja
884918
-DCMAKE_BUILD_TYPE=Release
885919
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG="1"
886-
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build"
920+
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan"
887921
-DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install"
888-
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build"
889-
${{ env.CMAKE_EXTRA_ARGS }}'
922+
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan"
923+
${{ env.CMAKE_COMPILER_ARGS }}'
890924

891925
- name: install test log
892926
run: |

.github/workflows/src/build-setup.yml

+25-13
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
- name: install conan
22
if: matrix.use_conan == true
33
run: |
4-
pip install conan~=1.47
5-
conan config set general.revisions_enabled=1
4+
pip install conan~=2.0.5
65
7-
- name: install cmake
6+
- name: 'ubuntu-14.04: install cmake'
7+
if: matrix.os == 'ubuntu-14.04'
88
uses: lukka/[email protected]
99

10+
- name: install cmake
11+
if: matrix.os != 'ubuntu-14.04'
12+
uses: lukka/[email protected]
13+
1014
- name: setup bash path
1115
working-directory: ${{ env.GITHUB_WORKSPACE }}
1216
shell: bash
@@ -19,7 +23,7 @@
1923
if: runner.os == 'Windows'
2024
run: |
2125
# set compiler to cl.exe to avoid building with gcc.
22-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
26+
echo "CMAKE_COMPILER_ARGS=-DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe" >> $env:GITHUB_ENV
2327
# disable unused network interface
2428
netsh interface set interface name="vEthernet (nat)" admin=DISABLED
2529
# get host IP address
@@ -149,13 +153,11 @@
149153
cmake .. -DCMAKE_BUILD_TYPE:STRING="Release" -DWERROR:BOOL="0" -DBUILD_SAMPLES:BOOL="0" -DBUILD_TESTS:BOOL="0"
150154
make -j 2 && sudo make install
151155
152-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" >> $GITHUB_ENV
153-
154-
- name: disable conan
155-
if: matrix.use_conan == false
156-
shell: bash
157-
run: |
158-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_CONAN:BOOL=\"0\"" >> $GITHUB_ENV
156+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
157+
"-DWEBSOCKETPP_INCLUDE_DIR:PATH=\"${{ env.RUNNER_WORKSPACE }}/cpprestsdk/Release/libs/websocketpp\"" \
158+
"-DNMOS_CPP_USE_SUPPLIED_JSON_SCHEMA_VALIDATOR:BOOL=\"1\"" \
159+
"-DNMOS_CPP_USE_SUPPLIED_JWT_CPP:BOOL=\"1\"" \
160+
>> $GITHUB_ENV
159161
160162
- name: ubuntu avahi setup
161163
if: runner.os == 'Linux' && matrix.install_mdns == false
@@ -172,7 +174,17 @@
172174
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_USE_AVAHI:BOOL=\"1\"" >> $GITHUB_ENV
173175
174176
- name: force cpprest asio
175-
if: matrix.force_cpprest_asio == true
177+
if: matrix.force_cpprest_asio == true && matrix.use_conan == true
178+
shell: bash
179+
run: |
180+
echo "CONAN_INSTALL_EXTRA_ARGS=--options\;cpprestsdk/*:http_client_impl=asio\;--options\;cpprestsdk/*:http_listener_impl=asio" >> $GITHUB_ENV
181+
182+
- name: enable conan
183+
if: matrix.use_conan == true
176184
shell: bash
177185
run: |
178-
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }} -DNMOS_CPP_CONAN_OPTIONS:STRING=\"cpprestsdk:http_client_impl=asio;cpprestsdk:http_listener_impl=asio\"" >> $GITHUB_ENV
186+
echo "CMAKE_EXTRA_ARGS=${{ env.CMAKE_EXTRA_ARGS }}" \
187+
"-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES:STRING=\"third_party/cmake/conan_provider.cmake\"" \
188+
"-DCONAN_INSTALL_ARGS:STRING=\"--build=missing\;${{ env.CONAN_INSTALL_EXTRA_ARGS }}\;--lockfile-out=conan.lock\"" \
189+
>> $GITHUB_ENV
190+
cat $GITHUB_ENV

.github/workflows/src/build.yml

+6-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,9 @@
88
cmakeListsOrSettingsJson: CMakeListsTxtAdvanced
99
cmakeListsTxtPath: '${{ env.GITHUB_WORKSPACE }}/Development/CMakeLists.txt'
1010
buildDirectory: '${{ env.RUNNER_WORKSPACE }}/build/'
11-
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_EXTRA_ARGS }}'
11+
cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="${{ env.RUNNER_WORKSPACE }}/install" ${{ env.CMAKE_COMPILER_ARGS }} ${{ env.CMAKE_EXTRA_ARGS }}'
12+
13+
- name: dump conan lockfile
14+
if: matrix.use_conan == true
15+
run: |
16+
cat ${{ env.RUNNER_WORKSPACE }}/build/conan.lock

.github/workflows/src/install-test.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
cmakeAppendedArgs: '-GNinja
1414
-DCMAKE_BUILD_TYPE=Release
1515
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG="1"
16-
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build"
16+
-DCMAKE_MODULE_PATH="${{ env.CMAKE_WORKSPACE }}/build/conan"
1717
-DCMAKE_PREFIX_PATH="${{ env.CMAKE_WORKSPACE }}/install"
18-
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build"
19-
${{ env.CMAKE_EXTRA_ARGS }}'
18+
-DCMAKE_INSTALL_PREFIX="${{ env.CMAKE_WORKSPACE }}/build/conan"
19+
${{ env.CMAKE_COMPILER_ARGS }}'
2020

2121
- name: install test log
2222
run: |

Development/cmake/NmosCppCommon.cmake

+3-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
set(NMOS_CPP_USE_CONAN ON CACHE BOOL "Use Conan to acquire dependencies")
2-
mark_as_advanced(FORCE NMOS_CPP_USE_CONAN)
3-
4-
if(NMOS_CPP_USE_CONAN)
5-
include(cmake/NmosCppConan.cmake)
6-
endif()
1+
# since moving to Conan 2 and CMake 3.24 or higher, the injection point is used to configure conan
2+
# see https://cmake.org/cmake/help/v3.24/variable/CMAKE_PROJECT_TOP_LEVEL_INCLUDES.html
3+
unset(NMOS_CPP_USE_CONAN CACHE)
74

85
include(GNUInstallDirs)
96

Development/cmake/NmosCppConan.cmake

-56
This file was deleted.

0 commit comments

Comments
 (0)