From d99508b29ed7cf34efc243a104486ba8afbd4eb1 Mon Sep 17 00:00:00 2001 From: insleker Date: Fri, 18 Jul 2025 10:59:50 +0800 Subject: [PATCH] chore: support windows static lib build Cherry-picked from: marcoesposito1988/kdl_parser@472f8bf --- kdl_parser/CMakeLists.txt | 1 + kdl_parser/conanfile.py | 8 ++++---- kdl_parser/include/kdl_parser/visibility_control.hpp | 8 ++++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/kdl_parser/CMakeLists.txt b/kdl_parser/CMakeLists.txt index 475a892..8e01129 100644 --- a/kdl_parser/CMakeLists.txt +++ b/kdl_parser/CMakeLists.txt @@ -99,6 +99,7 @@ else() find_package(tinyxml REQUIRED CONFIG) find_package(tinyxml2 REQUIRED CONFIG) add_library(${PROJECT_NAME} src/kdl_parser.cpp) + if(WIN32) set(BUILD_SHARED_LIBS ON) target_compile_definitions(${PROJECT_NAME} PUBLIC "KDL_PARSER_BUILDING_DLL") diff --git a/kdl_parser/conanfile.py b/kdl_parser/conanfile.py index 005f21e..2d36ba3 100644 --- a/kdl_parser/conanfile.py +++ b/kdl_parser/conanfile.py @@ -45,10 +45,6 @@ class kdl_parserRecipe(ConanFile): self.options.rm_safe("fPIC") def configure(self): - if self.settings.os == "Windows" and not self.options.shared: - raise ConanInvalidConfiguration( - "Static libraries are not supported on Windows. Please set option 'shared=True'." - ) if self.options.shared: self.options.rm_safe("fPIC") @@ -59,6 +55,8 @@ class kdl_parserRecipe(ConanFile): deps = CMakeDeps(self) deps.generate() tc = CMakeToolchain(self) + if(not self.options.shared): + tc.preprocessor_definitions["KDL_PARSER_STATIC"] = "" tc.generate() def build(self): @@ -75,3 +73,5 @@ class kdl_parserRecipe(ConanFile): def package_info(self): self.cpp_info.libs = ["kdl_parser"] + if not self.options.shared: + self.cpp_info.defines = ["KDL_PARSER_STATIC"] \ No newline at end of file diff --git a/kdl_parser/include/kdl_parser/visibility_control.hpp b/kdl_parser/include/kdl_parser/visibility_control.hpp index 03e099a..f248903 100644 --- a/kdl_parser/include/kdl_parser/visibility_control.hpp +++ b/kdl_parser/include/kdl_parser/visibility_control.hpp @@ -46,6 +46,13 @@ // https://gcc.gnu.org/wiki/Visibility #if defined _WIN32 || defined __CYGWIN__ +#ifdef KDL_PARSER_STATIC + #define KDL_PARSER_EXPORT + #define KDL_PARSER_IMPORT + #define KDL_PARSER_PUBLIC + #define KDL_PARSER_LOCAL + #define KDL_PARSER_DEPRECATED(msg) __declspec(deprecated(msg)) +#else #ifdef __GNUC__ #define KDL_PARSER_EXPORT __attribute__ ((dllexport)) #define KDL_PARSER_IMPORT __attribute__ ((dllimport)) @@ -62,6 +69,7 @@ #endif #define KDL_PARSER_PUBLIC_TYPE KDL_PARSER_PUBLIC #define KDL_PARSER_LOCAL +#endif #else #define KDL_PARSER_EXPORT __attribute__ ((visibility("default"))) #define KDL_PARSER_IMPORT