aboutsummaryrefslogtreecommitdiffstats
path: root/.conan
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
commitbc524d70253a4ab2fe40c3ca3e5666e267c0a4d1 (patch)
tree1e629e7b46b1d9972a973bc93fd100bcebd395be /.conan
downloadnihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.gz
nihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.bz2
Diffstat (limited to '.conan')
-rw-r--r--.conan/build.py94
-rw-r--r--.conan/test_package/CMakeLists.txt8
-rw-r--r--.conan/test_package/conanfile.py40
-rw-r--r--.conan/test_package/test_package.cpp13
4 files changed, 155 insertions, 0 deletions
diff --git a/.conan/build.py b/.conan/build.py
new file mode 100644
index 0000000..e163d5f
--- /dev/null
+++ b/.conan/build.py
@@ -0,0 +1,94 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import re
+from cpt.packager import ConanMultiPackager
+from cpt.ci_manager import CIManager
+from cpt.printer import Printer
+
+
+class BuilderSettings(object):
+ @property
+ def username(self):
+ """ Set catchorg as package's owner
+ """
+ return os.getenv("CONAN_USERNAME", "catchorg")
+
+ @property
+ def login_username(self):
+ """ Set Bintray login username
+ """
+ return os.getenv("CONAN_LOGIN_USERNAME", "horenmar")
+
+ @property
+ def upload(self):
+ """ Set Catch2 repository to be used on upload.
+ The upload server address could be customized by env var
+ CONAN_UPLOAD. If not defined, the method will check the branch name.
+ Only devel or CONAN_STABLE_BRANCH_PATTERN will be accepted.
+ The devel branch will be pushed to testing channel, because it does
+ not match the stable pattern. Otherwise it will upload to stable
+ channel.
+ """
+ return os.getenv("CONAN_UPLOAD", "https://api.bintray.com/conan/catchorg/catch2")
+
+ @property
+ def upload_only_when_stable(self):
+ """ Force to upload when running over tag branch
+ """
+ return os.getenv("CONAN_UPLOAD_ONLY_WHEN_STABLE", "True").lower() in ["true", "1", "yes"]
+
+ @property
+ def stable_branch_pattern(self):
+ """ Only upload the package the branch name is like a tag
+ """
+ return os.getenv("CONAN_STABLE_BRANCH_PATTERN", r"v\d+\.\d+\.\d+")
+
+ @property
+ def reference(self):
+ """ Read project version from branch create Conan reference
+ """
+ return os.getenv("CONAN_REFERENCE", "catch2/{}".format(self._version))
+
+ @property
+ def channel(self):
+ """ Default Conan package channel when not stable
+ """
+ return os.getenv("CONAN_CHANNEL", "testing")
+
+ @property
+ def _version(self):
+ """ Get version name from cmake file
+ """
+ pattern = re.compile(r"project\(Catch2 LANGUAGES CXX VERSION (\d+\.\d+\.\d+)\)")
+ version = "latest"
+ with open("CMakeLists.txt") as file:
+ for line in file:
+ result = pattern.search(line)
+ if result:
+ version = result.group(1)
+ return version
+
+ @property
+ def _branch(self):
+ """ Get branch name from CI manager
+ """
+ printer = Printer(None)
+ ci_manager = CIManager(printer)
+ return ci_manager.get_branch()
+
+
+if __name__ == "__main__":
+ settings = BuilderSettings()
+ builder = ConanMultiPackager(
+ reference=settings.reference,
+ channel=settings.channel,
+ upload=settings.upload,
+ upload_only_when_stable=False,
+ stable_branch_pattern=settings.stable_branch_pattern,
+ login_username=settings.login_username,
+ username=settings.username,
+ test_folder=os.path.join(".conan", "test_package"))
+ builder.add()
+ builder.run()
diff --git a/.conan/test_package/CMakeLists.txt b/.conan/test_package/CMakeLists.txt
new file mode 100644
index 0000000..f067457
--- /dev/null
+++ b/.conan/test_package/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.16)
+project(PackageTest CXX)
+
+find_package(Catch2 CONFIG REQUIRED)
+
+add_executable(test_package test_package.cpp)
+target_link_libraries(test_package Catch2::Catch2WithMain)
+target_compile_features(test_package PRIVATE cxx_std_14)
diff --git a/.conan/test_package/conanfile.py b/.conan/test_package/conanfile.py
new file mode 100644
index 0000000..dc03876
--- /dev/null
+++ b/.conan/test_package/conanfile.py
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+from conan import ConanFile
+from conan.tools.cmake import CMake, cmake_layout
+from conan.tools.build import can_run
+from conan.tools.files import save, load
+import os
+
+
+class TestPackageConan(ConanFile):
+ settings = "os", "compiler", "build_type", "arch"
+ generators = "CMakeToolchain", "CMakeDeps", "VirtualRunEnv"
+ test_type = "explicit"
+
+ def requirements(self):
+ self.requires(self.tested_reference_str)
+
+ def layout(self):
+ cmake_layout(self)
+
+ def generate(self):
+ save(self, os.path.join(self.build_folder, "package_folder"),
+ self.dependencies[self.tested_reference_str].package_folder)
+ save(self, os.path.join(self.build_folder, "license"),
+ self.dependencies[self.tested_reference_str].license)
+
+ def build(self):
+ cmake = CMake(self)
+ cmake.configure()
+ cmake.build()
+
+ def test(self):
+ if can_run(self):
+ cmd = os.path.join(self.cpp.build.bindir, "test_package")
+ self.run(cmd, env="conanrun")
+
+ package_folder = load(self, os.path.join(self.build_folder, "package_folder"))
+ license = load(self, os.path.join(self.build_folder, "license"))
+ assert os.path.isfile(os.path.join(package_folder, "licenses", "LICENSE.txt"))
+ assert license == 'BSL-1.0'
diff --git a/.conan/test_package/test_package.cpp b/.conan/test_package/test_package.cpp
new file mode 100644
index 0000000..3c08090
--- /dev/null
+++ b/.conan/test_package/test_package.cpp
@@ -0,0 +1,13 @@
+#include <catch2/catch_test_macros.hpp>
+
+int Factorial( int number ) {
+ return number <= 1 ? 1 : Factorial( number - 1 ) * number;
+}
+
+TEST_CASE( "Factorial Tests", "[single-file]" ) {
+ REQUIRE( Factorial(0) == 1 );
+ REQUIRE( Factorial(1) == 1 );
+ REQUIRE( Factorial(2) == 2 );
+ REQUIRE( Factorial(3) == 6 );
+ REQUIRE( Factorial(10) == 3628800 );
+} \ No newline at end of file