diff --git a/recipes/pinocchio/all/conandata.yml b/recipes/pinocchio/all/conandata.yml new file mode 100644 index 0000000000000..b0d04097918ea --- /dev/null +++ b/recipes/pinocchio/all/conandata.yml @@ -0,0 +1,4 @@ +sources: + "3.7.0": + url: "https://github.com/stack-of-tasks/pinocchio/releases/download/v3.7.0/pinocchio-3.7.0.tar.gz" + sha256: "c14c2ac9e5943af9acca9730c31d66c59b57a9407960d5b66d200f50b39a70a1" diff --git a/recipes/pinocchio/all/conanfile.py b/recipes/pinocchio/all/conanfile.py new file mode 100644 index 0000000000000..9615ba040d4bb --- /dev/null +++ b/recipes/pinocchio/all/conanfile.py @@ -0,0 +1,97 @@ +import os + +from conan import ConanFile +from conan.errors import ConanInvalidConfiguration +from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps +from conan.tools.files import get, rmdir, copy + +required_conan_version = ">=2" + +class PinocchioConan(ConanFile): + name = "pinocchio" + package_type = "library" + license = ("BSD 2-Clause") + url = "https://github.com/conan-io/conan-center-index" + description = ( + "Pinocchio instantiates the state-of-the-art Rigid Body Algorithms for poly-articulated " + "systems based on revisited Roy Featherstone's algorithms. Besides, Pinocchio provides " + "the analytical derivatives of the main Rigid-Body Algorithms, such as the Recursive " + "Newton-Euler Algorithm or the Articulated-Body Algorithm." + ) + topics = ( + "robotics", "kinematics", "dynamics", "automatic-differentiation", + "motion-planning", "ros", "rigid-body-dynamics", "analytical-derivatives", + ) + + settings = "os", "compiler", "build_type", "arch" + options = { + "shared": [True, False], + "fPIC": [True, False], + } + default_options = { + "shared": False, + "fPIC": True + } + + implements = ["auto_shared_fpic"] + + def layout(self): + cmake_layout(self, src_folder="src") + + def requirements(self): + self.requires("eigen/3.4.0", transitive_headers=True) + self.requires("urdfdom_headers/1.1.1") + self.requires("urdfdom/4.0.0") + self.requires("boost/1.87.0", transitive_headers=True) + + def build_requirements(self): + self.tool_requires("cmake/[>=3.22 <4]") + + def validate(self): + if self.settings.compiler == "msvc": + raise ConanInvalidConfiguration("MSVC is not supported") + + def source(self): + get(self, **self.conan_data["sources"][self.version], strip_root=True) + + def generate(self): + deps = CMakeDeps(self) + deps.generate() + tc = CMakeToolchain(self) + # To enable building Python interfaces, it is necessary to either ensure the installation + # of dependencies using self.tool_requires("cpython/X.Y.Z") or implement support for working + # with a virtual environment (e.g., https://github.com/conan-io/conan/pull/11601) + tc.cache_variables["BUILD_PYTHON_INTERFACE"] = False + tc.cache_variables["BUILD_TESTING"] = False + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + copy(self, "LICENSE*", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses")) + cmake = CMake(self) + cmake.install() + + rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig")) + rmdir(self, os.path.join(self.package_folder, "lib", "cmake")) + rmdir(self, os.path.join(self.package_folder, "share")) + + def package_info(self): + self.cpp_info.set_property("cmake_file_name", "pinocchio") + self.cpp_info.set_property("cmake_target_name", "pinocchio::pinocchio") + + self.cpp_info.components["pinocchio_headers"].includedirs = ["include"] + self.cpp_info.components["pinocchio_headers"].requires = ["eigen::eigen", "boost::boost"] + + self.cpp_info.components["pinocchio_default"].libs = ["pinocchio_default"] + self.cpp_info.components["pinocchio_default"].requires = ["pinocchio_headers"] + + self.cpp_info.components["pinocchio_visualizers"].libs = ["pinocchio_visualizers"] + self.cpp_info.components["pinocchio_visualizers"].requires = ["pinocchio_headers", "pinocchio_default"] + + self.cpp_info.components["pinocchio_parsers"].libs = ["pinocchio_parsers"] + self.cpp_info.components["pinocchio_parsers"].requires = ["pinocchio_headers", "pinocchio_default", "boost::filesystem", "urdfdom::urdfdom", "urdfdom_headers::urdfdom_headers"] + self.cpp_info.components["pinocchio_parsers"].defines = ["PINOCCHIO_WITH_URDFDOM"] diff --git a/recipes/pinocchio/all/test_package/CMakeLists.txt b/recipes/pinocchio/all/test_package/CMakeLists.txt new file mode 100644 index 0000000000000..ef9f8d51137d9 --- /dev/null +++ b/recipes/pinocchio/all/test_package/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.15) + +project(test_package CXX) + +find_package(pinocchio REQUIRED) + +add_executable(${PROJECT_NAME} src/test_package.cpp) +target_link_libraries(${PROJECT_NAME} pinocchio::pinocchio) diff --git a/recipes/pinocchio/all/test_package/conanfile.py b/recipes/pinocchio/all/test_package/conanfile.py new file mode 100644 index 0000000000000..62733ce87ce6c --- /dev/null +++ b/recipes/pinocchio/all/test_package/conanfile.py @@ -0,0 +1,26 @@ +import os + +from conan import ConanFile +from conan.tools.cmake import CMake, cmake_layout +from conan.tools.build import can_run + + +class PinocchioTestConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps", "CMakeToolchain" + + def requirements(self): + self.requires(self.tested_reference_str) + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def layout(self): + cmake_layout(self) + + def test(self): + if can_run(self): + cmd = os.path.join(self.cpp.build.bindir, "test_package") + self.run(cmd, env="conanrun") diff --git a/recipes/pinocchio/all/test_package/src/test_package.cpp b/recipes/pinocchio/all/test_package/src/test_package.cpp new file mode 100644 index 0000000000000..51fdf55097205 --- /dev/null +++ b/recipes/pinocchio/all/test_package/src/test_package.cpp @@ -0,0 +1,10 @@ +#include +#include +#include "pinocchio/utils/file-explorer.hpp" + +int main() +{ + std::vector paths; + pinocchio::extractPathFromEnvVar("CONAN_PINOCCHIO_TEST_PACKAGE_UNUSED_VAR", + paths, ";"); +} diff --git a/recipes/pinocchio/config.yml b/recipes/pinocchio/config.yml new file mode 100644 index 0000000000000..20ddf579e6d44 --- /dev/null +++ b/recipes/pinocchio/config.yml @@ -0,0 +1,3 @@ +versions: + "3.7.0": + folder: all