Skip to content

Commit

Permalink
removed unecessary stuff in conanfile.py + improved test_package
Browse files Browse the repository at this point in the history
  • Loading branch information
fhamonic committed Sep 12, 2024
1 parent 299f5d3 commit 7ee12be
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 58 deletions.
40 changes: 2 additions & 38 deletions recipes/melon/all/conanfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,18 @@
class PackageConan(ConanFile):
name = "melon"
description = "A modern and efficient graph library using C++20 ranges and concepts."
# Use short name only, conform to SPDX License List: https://spdx.org/licenses/
# In case it's not listed there, use "LicenseRef-<license-file-name>"
license = "BSL-1.0"
url = "https://github.com/conan-io/conan-center-index"
homepage = "https://github.com/fhamonic/melon"
# Do not put "conan" nor the project name in topics. Use topics from the upstream listed on GH
# Keep 'header-only' as topic
topics = ("graph", "algorithm", "ranges", "c++20", "header-only")
package_type = "header-library"
# Keep these or explain why it's not required for this particular case
settings = "os", "arch", "compiler", "build_type"
# Do not copy sources to build folder for header only projects, unless you need to apply patches
no_copy_source = True

@property
def _min_cppstd(self):
return 20

# In case the project requires C++14/17/20/... the minimum compiler version should be listed
@property
def _compilers_minimum_version(self):
return {
Expand All @@ -41,49 +34,36 @@ def _compilers_minimum_version(self):
"Visual Studio": "17",
}

# Use the export_sources(self) method instead of the exports_sources attribute.
# This allows finer grain exportation of patches per version
def export_sources(self):
export_conandata_patches(self)

def layout(self):
# src_folder must use the same source folder name than the project
basic_layout(self, src_folder="src")

def requirements(self):
# Prefer self.requires method instead of requires attribute
# Direct dependencies of header only libs are always transitive since they are included in public headers
self.requires("range-v3/[>=0.11.0]", transitive_headers=True)
self.requires("fmt/[>=10.0.0]", transitive_headers=True)
self.requires("range-v3/[>=0.11.0]")
self.requires("fmt/[>=10.0.0]")

# same package ID for any package
def package_id(self):
self.info.clear()

def validate(self):
if self.settings.compiler.get_safe("cppstd"):
# Validate the minimum cpp standard supported when installing the package. For C++ projects only
check_min_cppstd(self, self._min_cppstd)
minimum_version = self._compilers_minimum_version.get(str(self.settings.compiler), False)
if minimum_version and Version(self.settings.compiler.version) < minimum_version:
raise ConanInvalidConfiguration(
f"{self.ref} requires C++{self._min_cppstd}, which your compiler does not support."
)

# In case this library does not work in some another configuration, it should be validated here too
if self.settings.os == "Windows":
raise ConanInvalidConfiguration(f"{self.ref} can not be used on Windows.")

def source(self):
# Download source package and extract to source folder
get(self, **self.conan_data["sources"][self.version], strip_root=True)

# Not mandatory when there is no patch, but will suppress warning message about missing build() method
def build(self):
# The attribute no_copy_source should not be used when applying patches in build
apply_conandata_patches(self)

# Copy all files to the package folder
def package(self):
copy(self, "LICENSE", self.source_folder, os.path.join(self.package_folder, "licenses"))
copy(
Expand All @@ -94,24 +74,8 @@ def package(self):
)

def package_info(self):
# Folders not used for header-only
self.cpp_info.bindirs = []
self.cpp_info.libdirs = []

# Set these to the appropriate values if the package has an official FindPACKAGE.cmake
# listed in https://cmake.org/cmake/help/latest/manual/cmake-modules.7.html#find-modules
# examples: bzip2, freetype, gdal, icu, libcurl, libjpeg, libpng, libtiff, openssl, sqlite3, zlib...
# self.cpp_info.set_property("cmake_module_file_name", "melon")
# self.cpp_info.set_property("cmake_module_target_name", "melon::melon")

# Set these to the appropriate values if package provides a CMake config file
# (package-config.cmake or packageConfig.cmake, with package::package target, usually installed in <prefix>/lib/cmake/<package>/)
# self.cpp_info.set_property("cmake_file_name", "melon")
# self.cpp_info.set_property("cmake_target_name", "melon::melon")
# Set this to the appropriate value if the package provides a pkgconfig file
# (package.pc, usually installed in <prefix>/lib/pkgconfig/)
# self.cpp_info.set_property("pkg_config_name", "melon")

# Add m, pthread and dl if needed in Linux/FreeBSD
if self.settings.os in ["Linux", "FreeBSD"]:
self.cpp_info.system_libs.extend(["pthread"])
53 changes: 33 additions & 20 deletions recipes/melon/all/test_package/test_package.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,31 +4,44 @@

using namespace fhamonic::melon;

int main(int argc, char * argv[]) {
// test_package with bidirectional dijkstra because it condenses range-v3 uses
// shown to overwhelm some compilers

int main(int argc, char *argv[])
{
static_digraph_builder<static_digraph, int> builder(6);

builder.add_arc(0u, 1u, 7);
builder.add_arc(0u, 2u, 9);
builder.add_arc(0u, 5u, 14);
builder.add_arc(1u, 0u, 7);
builder.add_arc(1u, 2u, 10);
builder.add_arc(1u, 3u, 15);
builder.add_arc(2u, 0u, 9);
builder.add_arc(2u, 1u, 10);
builder.add_arc(2u, 3u, 12);
builder.add_arc(2u, 5u, 2);
builder.add_arc(3u, 1u, 15);
builder.add_arc(3u, 2u, 12);
builder.add_arc(3u, 4u, 6);
builder.add_arc(4u, 3u, 6);
builder.add_arc(4u, 5u, 9);
builder.add_arc(5u, 0u, 14);
builder.add_arc(5u, 2u, 2);
builder.add_arc(5u, 4u, 9);
builder.add_arc(0u, 1u, 7); // 0
builder.add_arc(0u, 2u, 9); // 1
builder.add_arc(0u, 5u, 14); // 2
builder.add_arc(1u, 0u, 7); // 3
builder.add_arc(1u, 2u, 10); // 4
builder.add_arc(1u, 3u, 15); // 5
builder.add_arc(2u, 0u, 9); // 6
builder.add_arc(2u, 1u, 10); // 7
builder.add_arc(2u, 3u, 12); // 8
builder.add_arc(2u, 5u, 2); // 9
builder.add_arc(3u, 1u, 15); // 10
builder.add_arc(3u, 2u, 12); // 11
builder.add_arc(3u, 4u, 6); // 12
builder.add_arc(4u, 3u, 6); // 13
builder.add_arc(4u, 5u, 9); // 14
builder.add_arc(5u, 0u, 14); // 15
builder.add_arc(5u, 2u, 2); // 16
builder.add_arc(5u, 4u, 9); // 17

auto [graph, length_map] = builder.build();

bidirectional_dijkstra alg(graph, length_map, 0u, 3u);

return alg.run() == 21 ? EXIT_SUCCESS : EXIT_FAILURE;
int dist = alg.run();
if (dist != 21) return EXIT_FAILURE;

if (!alg.path_found()) return EXIT_FAILURE;
auto path = alg.path();
if (std::ranges::distance(path) != 2) return EXIT_FAILURE;
if (std::ranges::find(path, 1u) == path.end()) return EXIT_FAILURE;
if (std::ranges::find(path, 8u) == path.end()) return EXIT_FAILURE;

return EXIT_SUCCESS;
}

0 comments on commit 7ee12be

Please sign in to comment.