Merge pull request #2 from existedinnettw/feat/webots
feat: add source-built webots-controller Conan recipe
This commit is contained in:
commit
52af2e1f21
|
|
@ -0,0 +1,10 @@
|
||||||
|
sources:
|
||||||
|
"2023a":
|
||||||
|
git_url: "https://github.com/cyberbotics/webots.git"
|
||||||
|
ref: "R2023a"
|
||||||
|
"2023b":
|
||||||
|
git_url: "https://github.com/cyberbotics/webots.git"
|
||||||
|
ref: "R2023b"
|
||||||
|
"2025a":
|
||||||
|
git_url: "https://github.com/cyberbotics/webots.git"
|
||||||
|
ref: "R2025a"
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
from conan import ConanFile
|
||||||
|
from conan.errors import ConanInvalidConfiguration
|
||||||
|
from conan.tools.env import Environment
|
||||||
|
from conan.tools.files import chdir, copy, get
|
||||||
|
from conan.tools.scm import Git
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class WebotsControllerConan(ConanFile):
|
||||||
|
name = "webots-controller"
|
||||||
|
description = "Webots C/C++ robot controller libraries (Controller and CppController)"
|
||||||
|
license = "Apache-2.0"
|
||||||
|
url = "https://github.com/cyberbotics/webots"
|
||||||
|
homepage = "https://cyberbotics.com"
|
||||||
|
topics = ("robotics", "simulation", "webots", "controller")
|
||||||
|
package_type = "shared-library"
|
||||||
|
|
||||||
|
settings = "os", "arch", "compiler", "build_type"
|
||||||
|
options = {"fPIC": [True, False]}
|
||||||
|
default_options = {"fPIC": True}
|
||||||
|
|
||||||
|
exports_sources = (
|
||||||
|
"test_package/conanfile.py",
|
||||||
|
"test_package/CMakeLists.txt",
|
||||||
|
"test_package/test_package.cpp",
|
||||||
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def _source_subfolder(self):
|
||||||
|
return "source_subfolder"
|
||||||
|
|
||||||
|
def config_options(self):
|
||||||
|
if self.settings.os == "Windows":
|
||||||
|
self.options.rm_safe("fPIC")
|
||||||
|
|
||||||
|
def validate(self):
|
||||||
|
if str(self.settings.compiler) == "msvc":
|
||||||
|
raise ConanInvalidConfiguration("Webots controller libraries are built with GCC/Clang toolchains, not MSVC")
|
||||||
|
|
||||||
|
def source(self):
|
||||||
|
source_data = self.conan_data["sources"][self.version]
|
||||||
|
if "git_url" in source_data:
|
||||||
|
git = Git(self)
|
||||||
|
clone_args = [
|
||||||
|
"--depth",
|
||||||
|
"1",
|
||||||
|
]
|
||||||
|
if "ref" in source_data:
|
||||||
|
clone_args.extend(["--branch", source_data["ref"]])
|
||||||
|
git.clone(url=source_data["git_url"], target=self._source_subfolder, args=clone_args)
|
||||||
|
with chdir(self, os.path.join(self.source_folder, self._source_subfolder)):
|
||||||
|
if "ref" in source_data:
|
||||||
|
git.checkout(source_data["ref"])
|
||||||
|
git.run("submodule update --init --recursive --depth 1")
|
||||||
|
return
|
||||||
|
get(self, **source_data, strip_root=True, destination=self._source_subfolder)
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
build_env = Environment()
|
||||||
|
source_root = os.path.join(self.source_folder, self._source_subfolder)
|
||||||
|
build_env.define("WEBOTS_HOME", source_root)
|
||||||
|
with build_env.vars(self).apply():
|
||||||
|
with chdir(self, os.path.join(source_root, "src", "controller", "c")):
|
||||||
|
self.run("make release")
|
||||||
|
with chdir(self, os.path.join(source_root, "src", "controller", "cpp")):
|
||||||
|
self.run("make release")
|
||||||
|
|
||||||
|
def package(self):
|
||||||
|
source_root = os.path.join(self.source_folder, self._source_subfolder)
|
||||||
|
copy(self, "LICENSE", src=source_root, dst=os.path.join(self.package_folder, "licenses"))
|
||||||
|
|
||||||
|
copy(self, "*.h", src=os.path.join(source_root, "include", "controller", "c"), dst=os.path.join(self.package_folder, "include", "controller", "c"), keep_path=True)
|
||||||
|
copy(self, "*.hpp", src=os.path.join(source_root, "include", "controller", "cpp"), dst=os.path.join(self.package_folder, "include", "controller", "cpp"), keep_path=True)
|
||||||
|
|
||||||
|
lib_src = os.path.join(source_root, "lib", "controller")
|
||||||
|
copy(self, "*.so*", src=lib_src, dst=os.path.join(self.package_folder, "lib"), keep_path=False)
|
||||||
|
copy(self, "*.dylib*", src=lib_src, dst=os.path.join(self.package_folder, "lib"), keep_path=False)
|
||||||
|
copy(self, "*.dll", src=lib_src, dst=os.path.join(self.package_folder, "bin"), keep_path=False)
|
||||||
|
copy(self, "*.lib", src=lib_src, dst=os.path.join(self.package_folder, "lib"), keep_path=False)
|
||||||
|
|
||||||
|
def package_info(self):
|
||||||
|
self.cpp_info.set_property("cmake_file_name", "webots-controller")
|
||||||
|
|
||||||
|
self.cpp_info.components["controller"].libs = ["Controller"]
|
||||||
|
self.cpp_info.components["controller"].set_property("cmake_target_name", "Webots::Controller")
|
||||||
|
self.cpp_info.components["controller"].includedirs = ["include/controller/c"]
|
||||||
|
|
||||||
|
self.cpp_info.components["cpp_controller"].libs = ["CppController"]
|
||||||
|
self.cpp_info.components["cpp_controller"].set_property("cmake_target_name", "Webots::CppController")
|
||||||
|
self.cpp_info.components["cpp_controller"].requires = ["controller"]
|
||||||
|
self.cpp_info.components["cpp_controller"].includedirs = ["include/controller/cpp", "include/controller/c"]
|
||||||
|
|
||||||
|
if self.settings.os == "Linux":
|
||||||
|
self.cpp_info.components["controller"].system_libs = ["m", "pthread", "dl", "rt"]
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
cmake_minimum_required(VERSION 3.15)
|
||||||
|
project(test_package CXX)
|
||||||
|
|
||||||
|
find_package(webots-controller REQUIRED CONFIG)
|
||||||
|
|
||||||
|
add_executable(test_package test_package.cpp)
|
||||||
|
target_link_libraries(test_package PRIVATE Webots::CppController)
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
from conan import ConanFile
|
||||||
|
from conan.tools.build import can_run
|
||||||
|
from conan.tools.cmake import CMake, cmake_layout
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
class TestPackageConan(ConanFile):
|
||||||
|
test_type = "explicit"
|
||||||
|
settings = "os", "arch", "compiler", "build_type"
|
||||||
|
generators = "CMakeDeps", "CMakeToolchain"
|
||||||
|
|
||||||
|
def requirements(self):
|
||||||
|
self.requires(self.tested_reference_str)
|
||||||
|
|
||||||
|
def layout(self):
|
||||||
|
cmake_layout(self)
|
||||||
|
|
||||||
|
def build(self):
|
||||||
|
cmake = CMake(self)
|
||||||
|
cmake.configure()
|
||||||
|
cmake.build()
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
if can_run(self):
|
||||||
|
exe = os.path.join(self.cpp.build.bindirs[0], "test_package")
|
||||||
|
self.run(exe, env="conanrun")
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include <webots/Robot.hpp>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
webots::Robot *robot = nullptr;
|
||||||
|
(void)robot;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue