Skip to content

Commit

Permalink
(#13973) polymorphic_value: conan v2 support
Browse files Browse the repository at this point in the history
* polymorphic_value: conan v2 support

done as part of @prince-chrismc's webinar

* apply review suggestions

* work around self.info being already cleared

see conan-io/conan#12210

* use conan.tools.build.can_run

* Revert "work around self.info being already cleared"

This reverts commit 84f85e4.

* Apply suggestions from code review

Co-authored-by: Uilian Ries <uilianries@gmail.com>

* align test package to templates

Co-authored-by: Uilian Ries <uilianries@gmail.com>
  • Loading branch information
dvirtz and uilianries authored Nov 28, 2022
1 parent 2b248ac commit 421f4fa
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 27 deletions.
46 changes: 26 additions & 20 deletions recipes/polymorphic_value/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,13 @@
from conans import ConanFile, tools
from conans.errors import ConanInvalidConfiguration
import os

required_conan_version = ">=1.43.0"
from conan import ConanFile
from conan.errors import ConanInvalidConfiguration
from conan.tools.build import check_min_cppstd
from conan.tools.files import copy, get
from conan.tools.layout import basic_layout
from conan.tools.scm import Version

required_conan_version = ">=1.50.0"


class PolymorphictValueConan(ConanFile):
Expand All @@ -14,10 +20,6 @@ class PolymorphictValueConan(ConanFile):
settings = "os", "arch", "compiler", "build_type"
no_copy_source = True

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

@property
def _minimum_cpp_standard(self):
return 17
Expand All @@ -32,16 +34,16 @@ def _minimum_compilers_version(self):
}

def validate(self):
if self.settings.compiler.get_safe("cppstd"):
tools.check_min_cppstd(self, self._minimum_cpp_standard)
if self.settings.get_safe("compiler.cppstd"):
check_min_cppstd(self, self._minimum_cpp_standard)
min_version = self._minimum_compilers_version.get(
str(self.settings.compiler))
if not min_version:
self.output.warn("{} recipe lacks information about the {} "
"compiler support.".format(
self.name, self.settings.compiler))
self.output.warning("{} recipe lacks information about the {} "
"compiler support.".format(
self.name, self.settings.compiler))
else:
if tools.Version(self.settings.compiler.version) < min_version:
if Version(self.settings.compiler.version) < min_version:
raise ConanInvalidConfiguration(
"{} requires C++{} support. "
"The current compiler {} {} does not support it.".format(
Expand All @@ -50,20 +52,24 @@ def validate(self):
self.settings.compiler.version))

def package_id(self):
self.info.header_only()
self.info.clear()

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

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

def package(self):
self.copy(pattern="polymorphic_value.*", dst="include",
src=self._source_subfolder)
self.copy("*LICENSE*", dst="licenses", keep_path=False)
copy(self, "polymorphic_value.*", self.source_folder,
os.path.join(self.package_folder, "include"))
copy(self, "*LICENSE*", self.source_folder,
os.path.join(self.package_folder, "licenses"), keep_path=False)

def package_info(self):
self.cpp_info.set_property("cmake_file_name", "polymorphic_value")
self.cpp_info.set_property("cmake_target_name", "polymorphic_value::polymorphic_value")
self.cpp_info.set_property(
"cmake_target_name", "polymorphic_value::polymorphic_value")

self.cpp_info.names["cmake_find_package"] = "polymorphic_value"
self.cpp_info.names["cmake_find_package_multi"] = "polymorphic_value"
3 changes: 0 additions & 3 deletions recipes/polymorphic_value/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
cmake_minimum_required(VERSION 3.12)
project(test_package CXX)

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

find_package(polymorphic_value REQUIRED CONFIG)

add_executable(${PROJECT_NAME} test_package.cpp)
Expand Down
19 changes: 15 additions & 4 deletions recipes/polymorphic_value/all/test_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
from conans import ConanFile, CMake, tools
import os

from conan import ConanFile
from conan.tools.build import can_run
from conan.tools.cmake import CMake, cmake_layout


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

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 not tools.cross_building(self):
self.run(os.path.join("bin", "test_package"), 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")
11 changes: 11 additions & 0 deletions recipes/polymorphic_value/all/test_v1_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.12)
project(test_package CXX)

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

find_package(polymorphic_value REQUIRED CONFIG)

add_executable(${PROJECT_NAME} ../test_package/test_package.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE polymorphic_value::polymorphic_value)
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_20)
20 changes: 20 additions & 0 deletions recipes/polymorphic_value/all/test_v1_package/conanfile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import os

from conan.tools.build import cross_building
from conans import CMake, ConanFile


# legacy validation with Conan 1.x
class TestPackageV1Conan(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 cross_building(self):
bin_path = os.path.join("bin", "test_package")
self.run(bin_path, run_environment=True)

0 comments on commit 421f4fa

Please sign in to comment.