Skip to content

roaring: conan v2 support #14228

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions recipes/roaring/all/CMakeLists.txt

This file was deleted.

86 changes: 39 additions & 47 deletions recipes/roaring/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
from conans import ConanFile, CMake, tools
from conans.errors import ConanInvalidConfiguration
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.build import check_min_cppstd
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
from conan.tools.files import copy, get, replace_in_file, rmdir
from conan.tools.scm import Version
import os
import functools

required_conan_version = ">=1.43.0"
required_conan_version = ">=1.53.0"


class RoaringConan(ConanFile):
name = "roaring"
Expand All @@ -27,18 +31,6 @@ class RoaringConan(ConanFile):
"with_neon": True,
"native_optimization": False,
}
generators = "cmake"

@property
def _source_subfolder(self):
return "source_subfolder"

@property
def _build_subfolder(self):
return "build_subfolder"

def export_sources(self):
self.copy("CMakeLists.txt")

def config_options(self):
if self.settings.os == "Windows":
Expand All @@ -50,50 +42,50 @@ def config_options(self):

def configure(self):
if self.options.shared:
del self.options.fPIC
self.options.rm_safe("fPIC")

def layout(self):
cmake_layout(self, src_folder="src")

def validate(self):
if self.settings.compiler.get_safe("cppstd"):
tools.check_min_cppstd(self, "11")
if tools.Version(self.version) >= "0.3.0":
if self.settings.compiler == "apple-clang" and tools.Version(self.settings.compiler.version) < "11":
raise ConanInvalidConfiguration("roaring >= 3.0.0 requires at least apple-clang 11 to support runtime dispatching.")
if self.info.settings.compiler.get_safe("cppstd"):
check_min_cppstd(self, "11")
if Version(self.version) >= "0.3.0":
if self.info.settings.compiler == "apple-clang" and Version(self.info.settings.compiler.version) < "11":
raise ConanInvalidConfiguration(
f"{self.ref} requires at least apple-clang 11 to support runtime dispatching.",
)

def source(self):
tools.get(**self.conan_data["sources"][self.version],
destination=self._source_subfolder, strip_root=True)
get(self, **self.conan_data["sources"][self.version],
destination=self.source_folder, strip_root=True)

@functools.lru_cache(1)
def _configure_cmake(self):
cmake = CMake(self)
cmake.definitions["ROARING_DISABLE_AVX"] = not self.options.get_safe("with_avx", False)
cmake.definitions["ROARING_DISABLE_NEON"] = not self.options.get_safe("with_neon", False)
cmake.definitions["ROARING_DISABLE_NATIVE"] = not self.options.native_optimization
cmake.definitions["ROARING_BUILD_STATIC"] = not self.options.shared
cmake.definitions["ENABLE_ROARING_TESTS"] = False
def generate(self):
tc = CMakeToolchain(self)
tc.variables["ROARING_DISABLE_AVX"] = not self.options.get_safe("with_avx", False)
tc.variables["ROARING_DISABLE_NEON"] = not self.options.get_safe("with_neon", False)
tc.variables["ROARING_DISABLE_NATIVE"] = not self.options.native_optimization
tc.variables["ROARING_BUILD_STATIC"] = not self.options.shared
tc.variables["ENABLE_ROARING_TESTS"] = False
# Relocatable shared lib on Macos
cmake.definitions["CMAKE_POLICY_DEFAULT_CMP0042"] = "NEW"
cmake.configure(build_folder=self._build_subfolder)
return cmake
tc.cache_variables["CMAKE_POLICY_DEFAULT_CMP0042"] = "NEW"
tc.generate()

def build(self):
tools.replace_in_file(os.path.join(self._source_subfolder, "CMakeLists.txt"), "set(CMAKE_MACOSX_RPATH OFF)", "")
cmake = self._configure_cmake()
replace_in_file(self, os.path.join(self.source_folder, "CMakeLists.txt"), "set(CMAKE_MACOSX_RPATH OFF)", "")
cmake = CMake(self)
cmake.configure()
cmake.build()

def package(self):
cmake = self._configure_cmake()
copy(self, "LICENSE", src=self.source_folder, dst=os.path.join(self.package_folder, "licenses"))
cmake = CMake(self)
cmake.install()
tools.rmdir(os.path.join(self.package_folder, "lib", "cmake"))
tools.rmdir(os.path.join(self.package_folder, "lib", "pkgconfig"))
self.copy("LICENSE", src=self._source_subfolder, dst="licenses")
rmdir(self, os.path.join(self.package_folder, "lib", "cmake"))
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))

def package_info(self):
self.cpp_info.libs = ["roaring"]

self.cpp_info.set_property("cmake_file_name", "roaring")
self.cpp_info.set_property("cmake_target_name", "roaring::roaring")
self.cpp_info.set_property("pkg_config_name", "roaring")

self.cpp_info.names["cmake_find_package"] = "roaring"
self.cpp_info.names["cmake_find_package_multi"] = "roaring"
self.cpp_info.names["pkg_config"] = "roaring"
self.cpp_info.libs = ["roaring"]
13 changes: 5 additions & 8 deletions recipes/roaring/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
cmake_minimum_required(VERSION 3.1)
project(test_package)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
cmake_minimum_required(VERSION 3.8)
project(test_package LANGUAGES CXX)

find_package(roaring REQUIRED CONFIG)

add_executable(${PROJECT_NAME} test_package.cpp)
target_link_libraries(${PROJECT_NAME} roaring::roaring)
set_property(TARGET ${PROJECT_NAME} PROPERTY CXX_STANDARD 11)
target_link_libraries(${PROJECT_NAME} PRIVATE roaring::roaring)
target_compile_features(${PROJECT_NAME} PRIVATE cxx_std_11)
if(roaring_VERSION VERSION_LESS "0.3.0")
target_compile_definitions(${PROJECT_NAME} PRIVATE "ROARING_NO_NAMESPACE")
target_compile_definitions(${PROJECT_NAME} PRIVATE "ROARING_NO_NAMESPACE")
endif()
21 changes: 15 additions & 6 deletions recipes/roaring/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,26 @@
from conans import ConanFile, CMake, tools
from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import CMake, cmake_layout
import os


class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type",
generators = "cmake", "cmake_find_package_multi"
settings = "os", "arch", "compiler", "build_type"
generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
test_type = "explicit"

def layout(self):
cmake_layout(self)

def requirements(self):
self.requires(self.tested_reference_str)

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def test(self):
if not tools.cross_building(self):
bin_path = os.path.join("bin", "test_package")
self.run(bin_path, run_environment=True)
if can_run(self):
bin_path = os.path.join(self.cpp.build.bindirs[0], "test_package")
self.run(bin_path, env="conanrun")
8 changes: 8 additions & 0 deletions recipes/roaring/all/test_v1_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.1)
project(test_package)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../test_package
${CMAKE_CURRENT_BINARY_DIR}/test_package)
17 changes: 17 additions & 0 deletions recipes/roaring/all/test_v1_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from conans import ConanFile, CMake, tools
import os


class TestPackageConan(ConanFile):
settings = "os", "arch", "compiler", "build_type",
generators = "cmake", "cmake_find_package_multi"

def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()

def test(self):
if not tools.cross_building(self):
bin_path = os.path.join("bin", "test_package")
self.run(bin_path, run_environment=True)