diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..6313b56c57848efce05faa7aa7e901ccfc2886ea --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e0e6750c8a8a3043ec363eb3a88c4bd5918338fe --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +target +build +CMakeUserPresets.json diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..15f582e45a84d53ba6e66764c8475a694977e63c --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.15) +project (timiqlib) + +option(BUILD_SHARED_LIBS "Build using shared libraries" ON) + +find_package(cpptango CONFIG REQUIRED) +find_package(yat CONFIG REQUIRED) +find_package(curl CONFIG REQUIRED) + +add_compile_definitions( + PROJECT_NAME=${PROJECT_NAME} + PROJECT_VERSION=${PROJECT_VERSION} +) + +file(GLOB_RECURSE sources + src/*.cpp +) + +set(includedirs + src + include +) + +add_library(timiqlib ${sources}) +target_include_directories(timiqlib PRIVATE ${includedirs}) +target_link_libraries(timiqlib PRIVATE cpptango::cpptango) +target_link_libraries(timiqlib PRIVATE yat::yat) +target_link_libraries(timiqlib PRIVATE curl::curl) + +if(MAJOR_VERSION) + set_target_properties(timiqlib PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${MAJOR_VERSION}) +endif() + +install (DIRECTORY ${CMAKE_SOURCE_DIR}/include/timiq/ DESTINATION include + FILES_MATCHING PATTERN "*/*.h" PATTERN "*/*" +) +install (DIRECTORY ${CMAKE_SOURCE_DIR}/src/ DESTINATION include + FILES_MATCHING PATTERN "*/*.h" +) +install (DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include + FILES_MATCHING PATTERN "*/*.h" PATTERN "*/*" +) + +install(TARGETS timiqlib LIBRARY DESTINATION ${LIB_INSTALL_DIR}) + diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000000000000000000000000000000000..4d99c5acb5180eda25ab63523a0373733b4faebb --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1 @@ +conan.create(['el6-gcc44-x86-shared']) diff --git a/conanfile.py b/conanfile.py new file mode 100644 index 0000000000000000000000000000000000000000..6256f7b30495b4309d775c1e613ed18000996760 --- /dev/null +++ b/conanfile.py @@ -0,0 +1,64 @@ +from conan import ConanFile +from conan.tools.cmake import CMakeToolchain, CMake, cmake_layout, CMakeDeps + +class timiqlibRecipe(ConanFile): + name = "timiqlib" + version = "1.0.2" + package_type = "library" + user = "soleil" + + # Optional metadata + license = "GPL-2" + author = "Gouno", "Buteau" + url = "https://gitlab.synchrotron-soleil.fr/software-control-system/libraries/timiqlib" + description = "TimIQ library" + topics = ("utility", "control-system") + + # Binary configuration + settings = "os", "compiler", "build_type", "arch" + options = {"shared": [True, False], "fPIC": [True, False]} + default_options = {"shared": False, "fPIC": True} + + # Sources are located in the same place as this recipe, copy them to the recipe + exports_sources = "CMakeLists.txt", "src/**", "include/**" + + def requirements(self): + self.requires("cpptango/9.2.5@soleil/stable") + self.requires("yat/[>=1.0]@soleil/stable") + self.requires("curl/7.37.0@soleil/stable") + + def config_options(self): + if self.settings.os == "Windows": + self.options.rm_safe("fPIC") + + def configure(self): + if self.options.shared: + self.options.rm_safe("fPIC") + + def layout(self): + cmake_layout(self) + + def generate(self): + deps = CMakeDeps(self) + deps.generate() + tc = CMakeToolchain(self) + major, minor, patch = map(int, self.version.split('.')) + tc.variables["PROJECT_NAME"] = self.name + tc.variables["PROJECT_VERSION"] = self.version + tc.variables["MAJOR_VERSION"] = major + tc.variables["MINOR_VERSION"] = minor + tc.variables["PATCH_VERSION"] = patch + tc.generate() + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def package(self): + cmake = CMake(self) + cmake.install() + + def package_info(self): + self.cpp_info.libs = ["timiqlib"] + diff --git a/test_package/CMakeLists.txt b/test_package/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..797820c439a0a681a7c62a596c6bf3108e466ed7 --- /dev/null +++ b/test_package/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.15) +project(PackageTest CXX) + +find_package(timiqlib CONFIG REQUIRED) +find_package(cpptango CONFIG REQUIRED) +find_package(yat CONFIG REQUIRED) +find_package(curl CONFIG REQUIRED) + +add_executable(test_package src/test_package.cpp) +target_link_libraries(test_package timiqlib::timiqlib) +target_link_libraries(test_package yat::yat) +target_link_libraries(test_package cpptango::cpptango) +target_link_libraries(test_package curl::curl) + diff --git a/test_package/conanfile.py b/test_package/conanfile.py new file mode 100644 index 0000000000000000000000000000000000000000..f20df6146a262e9e913634c6daf119e42c940808 --- /dev/null +++ b/test_package/conanfile.py @@ -0,0 +1,28 @@ +import os + +from conan import ConanFile +from conan.tools.cmake import CMake, cmake_layout +from conan.tools.build import can_run + +class TestPackageConan(ConanFile): + settings = "os", "compiler", "build_type", "arch" + generators = "CMakeDeps", "CMakeToolchain" + + def requirements(self): + self.requires(self.tested_reference_str) + self.requires("cpptango/9.2.5@soleil/stable") + self.requires("yat/[>=1.0]@soleil/stable") + self.requires("curl/7.37.0@soleil/stable") + + def build(self): + cmake = CMake(self) + cmake.configure() + cmake.build() + + def layout(self): + cmake_layout(self) + + def test(self): + cmd = os.path.join(self.cpp.build.bindir, "test_package") + self.run(cmd, env="conanrun") + diff --git a/test_package/src/test_package.cpp b/test_package/src/test_package.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e7e1c6fbfdb62ea6e1bb30dbc88aadfbe0824d1f --- /dev/null +++ b/test_package/src/test_package.cpp @@ -0,0 +1,14 @@ +#include <iostream> + +#include <TIMIQLib.h> + +int main() +{ + TIMIQLib_ns::TIMIQLib t = TIMIQLib_ns::TIMIQLib(); + float a = 0.; + try { t.get_iValue(a); } + catch (...) { } + std::cout << a << '\n'; + + return 0; +}