11from conan import ConanFile
22from conan .tools .cmake import CMake , CMakeDeps , CMakeToolchain , cmake_layout
33from conan .tools .files import load
4+ from conan .tools .apple import is_apple_os
5+ import os
46import re
57
68class ViamCppSdkRecipe (ConanFile ):
@@ -81,9 +83,10 @@ def package(self):
8183
8284 def package_info (self ):
8385 self .cpp_info .components ["viam_rust_utils" ].libs = ["viam_rust_utils" ]
86+
87+ self .cpp_info .components ["viamsdk" ].libs = ["viamsdk" ]
8488
8589 for component in ["viamsdk" , "viamapi" ]:
86- self .cpp_info .components [component ].libs = [component ]
8790 self .cpp_info .components [component ].set_property ("cmake_target_name" , "viam-cpp-sdk::{}" .format (component ))
8891 self .cpp_info .components [component ].set_property ("pkg_config_name" , "viam-cpp-sdk-lib{}" .format (component ))
8992 self .cpp_info .components [component ].requires = ["grpc::grpc++" , "protobuf::libprotobuf" ]
@@ -95,6 +98,18 @@ def package_info(self):
9598
9699 self .cpp_info .components ["viamapi" ].includedirs .append ("include/viam/api" )
97100
101+ if self .options .shared :
102+ self .cpp_info .components ["viamapi" ].libs = ["viamapi" ]
103+ else :
104+ lib_folder = os .path .join (self .package_folder , "lib" )
105+ lib_fullpath = os .path .join (lib_folder , "libviamapi.a" )
106+ if is_apple_os (self ):
107+ whole_archive = f"-Wl,-force_load,{ lib_fullpath } "
108+ else :
109+ whole_archive = f"-Wl,--push-state,--whole-archive,{ lib_fullpath } ,--pop-state"
110+ self .cpp_info .components ["viamapi" ].exelinkflags .append (whole_archive )
111+ self .cpp_info .components ["viamapi" ].sharedlinkflags .append (whole_archive )
112+
98113 self .cpp_info .components ["viamsdk" ].requires .extend ([
99114 "viamapi" ,
100115 "boost::headers" ,
0 commit comments