11import os
22import re
3- from conans import ConanFile , CMake , tools
3+ from conan import ConanFile
4+ from conan .tools .cmake import CMakeToolchain , CMake , cmake_layout , CMakeDeps
5+ from conan .tools .files import collect_libs , load
6+ from conan .tools .scm import Git
47
5- from pprint import pformat
68
7-
8- class OusterSDKConan (ConanFile ):
9+ class ousterSdkRecipe (ConanFile ):
910 name = "ouster_sdk"
11+ package_type = "library"
1012 license = "BSD 3-Clause License"
1113 author = "Ouster, Inc."
1214 url = "https://github.com/ouster-lidar/ouster_example"
@@ -33,7 +35,6 @@ class OusterSDKConan(ConanFile):
3335 "eigen_max_align_bytes" : False ,
3436 }
3537
36- generators = "cmake_paths" , "cmake_find_package"
3738 exports_sources = [
3839 "cmake/*" ,
3940 "conan/*" ,
@@ -49,27 +50,34 @@ class OusterSDKConan(ConanFile):
4950 "README.rst"
5051 ]
5152
52- # https://docs.conan.io/en/1.51/howtos/capture_version .html#how-to-capture-package-version-from-text-or-build-files
53+ # https://docs.conan.io/2/reference/conanfile/methods/set_version .html
5354 def set_version (self ):
54- content = tools . load (os .path .join (self .recipe_folder , "CMakeLists.txt" ))
55- version = re .search (r "set\(OusterSDK_VERSION_STRING (.*)\)" , content ).group (1 )
55+ content = load (self , os .path .join (self .recipe_folder , "CMakeLists.txt" ))
56+ version = re .search ("set\(OusterSDK_VERSION_STRING (.*)\)" , content ).group (1 )
5657 self .version = version .strip ()
5758
5859 def config_options (self ):
5960 if self .settings .os == "Windows" :
60- del self .options .fPIC
61+ self .options .rm_safe ("fPIC" )
62+
63+ def configure (self ):
64+ if self .options .shared :
65+ self .options .rm_safe ("fPIC" )
6166
6267 def requirements (self ):
63- # not required directly here but because boost and openssl pulling
64- # slightly different versions of zlib we need to set it
65- # here explicitly
68+ # not required directly here but because boost and openssl pulling
69+ # slightly different versions of zlib we need to set it
70+ # here explicitly
6671 self .requires ("zlib/1.3" )
6772
68- self .requires ("eigen/3.4.0" )
73+ # Since Eigen is a header only library, and the SDK includes Eigen
74+ # headers in its headers, we must set transitive_headers=True so that
75+ # packages consuming the SDK will also have access to the Eigen headers.
76+ self .requires ("eigen/3.4.0" , transitive_headers = True )
6977 self .requires ("jsoncpp/1.9.5" )
70- self .requires ("spdlog/1.11 .0" )
71- self .requires ("fmt/9.1.0" )
72- self .requires ("libcurl/7.84 .0" )
78+ self .requires ("spdlog/1.12 .0" )
79+ self .requires ("fmt/9.1.0" , override = True )
80+ self .requires ("libcurl/7.86 .0" )
7381
7482 if self .options .build_pcap :
7583 self .requires ("libtins/4.3" )
@@ -86,41 +94,45 @@ def requirements(self):
8694 # maybe needed for cpp examples, but not for the lib
8795 # self.requires("tclap/1.2.4")
8896
89- def configure_cmake (self ):
90- cmake = CMake (self )
91- cmake .definitions ["BUILD_VIZ" ] = self .options .build_viz
92- cmake .definitions ["BUILD_PCAP" ] = self .options .build_pcap
93- cmake .definitions ["BUILD_OSF" ] = self .options .build_osf
94- cmake .definitions ["OUSTER_USE_EIGEN_MAX_ALIGN_BYTES_32" ] = self .options .eigen_max_align_bytes
95- # alt way, but we use CMAKE_TOOLCHAIN_FILE in other pipeline so avoid overwrite
96- # cmake.definitions["CMAKE_TOOLCHAIN_FILE"] = os.path.join(self.build_folder, "conan_paths.cmake")
97- cmake .definitions [
98- "CMAKE_PROJECT_ouster_example_INCLUDE" ] = os .path .join (
99- self .build_folder , "conan_paths.cmake" )
100- cmake .definitions ["BUILD_SHARED_LIBS" ] = True if self .options .shared else False
101- cmake .definitions ["CMAKE_POSITION_INDEPENDENT_CODE" ] = (
97+ def build_requirements (self ):
98+ if self .options .build_osf :
99+ self .build_requires ("flatbuffers/<host_version>" )
100+
101+ def layout (self ):
102+ cmake_layout (self )
103+
104+ def generate (self ):
105+ deps = CMakeDeps (self )
106+ deps .generate ()
107+ tc = CMakeToolchain (self )
108+ tc .variables ["BUILD_VIZ" ] = self .options .build_viz
109+ tc .variables ["BUILD_PCAP" ] = self .options .build_pcap
110+ tc .variables ["BUILD_OSF" ] = self .options .build_osf
111+ tc .variables [
112+ "OUSTER_USE_EIGEN_MAX_ALIGN_BYTES_32"
113+ ] = self .options .eigen_max_align_bytes
114+ tc .variables ["BUILD_SHARED_LIBS" ] = True if self .options .shared else False
115+ tc .variables ["CMAKE_POSITION_INDEPENDENT_CODE" ] = (
102116 True if "fPIC" in self .options and self .options .fPIC else False
103117 )
104118
105119 # we use this option until we remove nonstd::optional from SDK codebase (soon)
106120 if self .options .ensure_cpp17 :
107- cmake . definitions ["CMAKE_CXX_STANDARD" ] = 17
121+ tc . variables ["CMAKE_CXX_STANDARD" ] = 17
108122
109- self .output .info ("Cmake definitions: " )
110- self .output .info (pformat (cmake .definitions ))
111- cmake .configure ()
112- return cmake
123+ tc .generate ()
113124
114125 def build (self ):
115- cmake = self .configure_cmake ()
126+ cmake = CMake (self )
127+ cmake .configure ()
116128 cmake .build ()
117129
118130 def package (self ):
119- cmake = self . configure_cmake ( )
131+ cmake = CMake ( self )
120132 cmake .install ()
121133
122134 def package_info (self ):
123- self .cpp_info .libs = tools . collect_libs (self )
135+ self .cpp_info .libs = collect_libs (self )
124136 self .cpp_info .includedirs = [
125137 "include" ,
126138 "include/optional-lite"
@@ -129,8 +141,14 @@ def package_info(self):
129141 "lib/cmake/OusterSDK/OusterSDKConfig.cmake"
130142 )
131143
144+ self .cpp_info .set_property (
145+ "cmake_build_modules" ,
146+ [os .path .join ("lib" , "cmake" , "OusterSDK" , "OusterSDKConfig.cmake" )],
147+ )
132148 self .cpp_info .set_property ("cmake_file_name" , "OusterSDK" )
149+ self .cpp_info .set_property ("cmake_target_name" , "OusterSDK" )
133150
151+ # TODO: to remove in conan v2 once cmake_find_package* generators removed
134152 self .cpp_info .filenames ["cmake_find_package" ] = "OusterSDK"
135153 self .cpp_info .filenames ["cmake_find_package_multi" ] = "OusterSDK"
136154 self .cpp_info .names ["cmake_find_package" ] = "OusterSDK"
0 commit comments