@@ -140,26 +140,53 @@ if (LINK_STATIC AND BUILD_STATIC_LIB)
140140
141141 add_library (pulsarStaticWithDeps STATIC ${PULSAR_SOURCES} )
142142 target_include_directories (pulsarStaticWithDeps PRIVATE ${dlfcn-win32_INCLUDE_DIRS} )
143- if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
144- remove_libtype ("${COMMON_LIBS} " "optimized" STATIC_LIBS )
145- else ()
146- remove_libtype ("${COMMON_LIBS} " "debug" STATIC_LIBS )
147- endif ()
148- # lib.exe (STATIC_LIBRARY_OPTIONS) cannot resolve CMake imported target names.
149- # Replace each CMake target with $<TARGET_FILE:...>; keep only static archives
150- # (skip system import libs that have no absolute path and non-archive targets).
151- set (RESOLVED_STATIC_LIBS "" )
152- foreach (LIB IN LISTS STATIC_LIBS)
153- if (TARGET ${LIB} )
154- get_target_property (_LIB_TYPE ${LIB} TYPE)
155- if (_LIB_TYPE STREQUAL "STATIC_LIBRARY" OR _LIB_TYPE STREQUAL "UNKNOWN_LIBRARY" )
156- list (APPEND RESOLVED_STATIC_LIBS "$<TARGET_FILE :${LIB} >" )
143+ if (VCPKG_TRIPLET)
144+ # Collect ALL vcpkg-installed static archives so every transitive dependency
145+ # (protobuf, abseil, curl, zlib, etc.) is merged into the fat lib without
146+ # requiring manual enumeration of individual targets.
147+ set (_vcpkg_dir "${PROJECT_SOURCE_DIR } /vcpkg_installed/${VCPKG_TRIPLET} " )
148+ file (GLOB _release_libs "${_vcpkg_dir} /lib/*.lib" )
149+ file (GLOB _debug_libs "${_vcpkg_dir} /debug/lib/*.lib" )
150+ # Exclude the protobuf compiler tool and lite runtime (not needed at runtime)
151+ foreach (_excl "libprotoc" "libprotobuf-lite" )
152+ list (FILTER _release_libs EXCLUDE REGEX "/${_excl} \\ .lib$" )
153+ list (FILTER _debug_libs EXCLUDE REGEX "/${_excl} \\ .lib$" )
154+ endforeach ()
155+ # Build per-lib generator expressions to select debug vs release archive
156+ # for multi-config generators (Visual Studio).
157+ set (_vcpkg_static_libs "" )
158+ foreach (_rlib IN LISTS _release_libs)
159+ get_filename_component (_libname "${_rlib} " NAME )
160+ set (_dlib "${_vcpkg_dir} /debug/lib/${_libname} " )
161+ if (EXISTS "${_dlib} " )
162+ list (APPEND _vcpkg_static_libs "$<IF :$<CONFIG :Debug >,${_dlib} ,${_rlib} >" )
163+ else ()
164+ list (APPEND _vcpkg_static_libs "${_rlib} " )
157165 endif ()
158- elseif (IS_ABSOLUTE "${LIB} " AND LIB MATCHES "\\ .(lib|a)$" )
159- list (APPEND RESOLVED_STATIC_LIBS "${LIB} " )
166+ endforeach ()
167+ set_property (TARGET pulsarStaticWithDeps PROPERTY STATIC_LIBRARY_OPTIONS ${_vcpkg_static_libs} )
168+ else ()
169+ # Non-vcpkg MSVC static build: resolve COMMON_LIBS entries for lib.exe.
170+ # CMake imported target names cannot be passed to lib.exe directly; replace
171+ # them with $<TARGET_FILE:...> generator expressions.
172+ if (CMAKE_BUILD_TYPE STREQUAL "Debug" )
173+ remove_libtype ("${COMMON_LIBS} " "optimized" STATIC_LIBS )
174+ else ()
175+ remove_libtype ("${COMMON_LIBS} " "debug" STATIC_LIBS )
160176 endif ()
161- endforeach ()
162- set_property (TARGET pulsarStaticWithDeps PROPERTY STATIC_LIBRARY_OPTIONS ${RESOLVED_STATIC_LIBS} )
177+ set (RESOLVED_STATIC_LIBS "" )
178+ foreach (LIB IN LISTS STATIC_LIBS)
179+ if (TARGET ${LIB} )
180+ get_target_property (_LIB_TYPE ${LIB} TYPE)
181+ if (_LIB_TYPE STREQUAL "STATIC_LIBRARY" OR _LIB_TYPE STREQUAL "UNKNOWN_LIBRARY" )
182+ list (APPEND RESOLVED_STATIC_LIBS "$<TARGET_FILE :${LIB} >" )
183+ endif ()
184+ elseif (IS_ABSOLUTE "${LIB} " AND LIB MATCHES "\\ .(lib|a)$" )
185+ list (APPEND RESOLVED_STATIC_LIBS "${LIB} " )
186+ endif ()
187+ endforeach ()
188+ set_property (TARGET pulsarStaticWithDeps PROPERTY STATIC_LIBRARY_OPTIONS ${RESOLVED_STATIC_LIBS} )
189+ endif ()
163190 set_property (TARGET pulsarStaticWithDeps PROPERTY OUTPUT_NAME ${LIB_NAME} WithDeps)
164191 set_property (TARGET pulsarStaticWithDeps PROPERTY VERSION ${LIBRARY_VERSION} )
165192 install (TARGETS pulsarStaticWithDeps DESTINATION lib)
0 commit comments