Skip to content
9 changes: 3 additions & 6 deletions recipes/ogdf/all/conandata.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
sources:
"2023.09":
url: "https://github.com/ogdf/ogdf/archive/refs/tags/elderberry-202309.tar.gz"
sha256: "3438205d3a6ff69d24c3a6db748d2a5a78688605baf3092456073901a2b623f3"
"2022.02":
url: "https://github.com/ogdf/ogdf/archive/refs/tags/dogwood-202202.tar.gz"
sha256: "308cc2749c6a63520f7979bac86a04066dfea2fb9d3a5e89831318db404bfbf5"
"2025.10":
url: "https://github.com/ogdf/ogdf/archive/refs/tags/foxglove-202510.tar.gz"
sha256: "e0496c2ac53f5bef3639ebac0f6110323bdd938b7d29ea5da79aced4a28f99b5"
51 changes: 35 additions & 16 deletions recipes/ogdf/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from conan import ConanFile
from conan.tools.apple import fix_apple_shared_install_name
from conan.tools.build import check_min_cppstd, cross_building
from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
from conan.tools.files import copy, get, replace_in_file, rmdir
from os.path import join
Expand All @@ -24,6 +24,20 @@ class OGDFConan(ConanFile):
"fPIC": True,
}

@property
def _min_cppstd(self):
return 17

def validate(self):
if self.settings.compiler.cppstd:
check_min_cppstd(self, self._min_cppstd)
if cross_building(self):
raise ConanInvalidConfiguration(
f"Cross-building is not supported: "
f"build={self.settings_build.os}/{self.settings_build.arch}, "
f"host={self.settings.os}/{self.settings.arch}"
)

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

Expand All @@ -37,7 +51,8 @@ def configure(self):

def requirements(self):
self.requires("coin-clp/1.17.7")
self.requires("pugixml/1.14")
self.requires("pugixml/1.15")
self.requires("earcut/2.2.4")

def layout(self):
cmake_layout(self, src_folder="src")
Expand All @@ -57,17 +72,26 @@ def _patch_sources(self):
rmdir(self, join(self.source_folder, "include", "ogdf", "lib", "backward"))
rmdir(self, join(self.source_folder, "src", "ogdf", "lib", "pugixml"))
rmdir(self, join(self.source_folder, "include", "ogdf", "lib", "pugixml"))
rmdir(self, join(self.source_folder, "include", "ogdf", "lib", "mapbox"))
# do not set C++ standard
replace_in_file(self, join(self.source_folder, "CMakeLists.txt"), "set(CMAKE_CXX_STANDARD ", "## set(CMAKE_CXX_STANDARD ")
# use cci packages where available
replace_in_file(self, join(self.source_folder, "CMakeLists.txt"), "include(coin)", "find_package(coin-clp REQUIRED CONFIG)\nfind_package(pugixml REQUIRED CONFIG)")
replace_in_file(self, join(self.source_folder, "cmake", "ogdf.cmake"), "target_link_libraries(OGDF PUBLIC COIN)", "target_link_libraries(OGDF PUBLIC coin-clp::coin-clp pugixml::pugixml)")
replace_in_file(self, join(self.source_folder, "CMakeLists.txt"), "include(coin)", "find_package(coin-clp REQUIRED CONFIG)\nfind_package(pugixml REQUIRED CONFIG)\nfind_package(earcut_hpp REQUIRED CONFIG)")
replace_in_file(self, join(self.source_folder, "cmake", "ogdf.cmake"), "target_link_libraries(OGDF PUBLIC COIN)", "target_link_libraries(OGDF PUBLIC coin-clp::coin-clp pugixml::pugixml earcut_hpp::earcut_hpp)")
# replace pugixml copy in repo by conan dependency
for dir_name, file_name in [("include", "GexfParser.h"),
("include", "GraphMLParser.h"),
("include", "SvgPrinter.h"),
("include", "TsplibXmlParser.h"),
("src", "GraphIO_graphml.cpp"),
("src", "GraphIO_gexf.cpp")]:
("src", "GraphIO_gexf.cpp"),
("src", "GexfParser.cpp"),
("src", "SvgPrinter.cpp"),
("src", "GraphMLParser.cpp"),
("src", "TsplibXmlParser.cpp")]:
replace_in_file(self, join(self.source_folder, dir_name, "ogdf", "fileformats", file_name), "ogdf/lib/pugixml/pugixml.h", "pugixml.hpp")
# replace earcut
replace_in_file(self, join(self.source_folder, "include", "ogdf", "geometric", "cr_min", "geometry", "algorithm", "MapBoxTriangulation.h"), "ogdf/lib/mapbox/mapbox_earcut.h", "mapbox/mapbox_earcut.h")

def build(self):
self._patch_sources()
Expand All @@ -76,17 +100,12 @@ def build(self):
cmake.build(target="OGDF")

def package(self):
copy(self, pattern="LICENSE*.txt", src=self.source_folder, dst=join(self.package_folder, "licenses"))
copy(self, pattern="*.h", src=join(self.source_folder, "include"), dst=join(self.package_folder, "include"))
copy(self, pattern="*.h", src=join(self.build_folder, "include"), dst=join(self.package_folder, "include"))
copy(self, pattern="*.lib", src=self.build_folder, dst=join(self.package_folder, "lib"), keep_path=False)
if self.options.shared:
copy(self, pattern="*.so*", src=self.build_folder, dst=join(self.package_folder, "lib"))
copy(self, pattern="*.dylib*", src=self.build_folder, dst=join(self.package_folder, "lib"))
copy(self, pattern="*.dll", src=self.build_folder, dst=join(self.package_folder, "bin"), keep_path=False)
else:
copy(self, pattern="*.a", src=self.build_folder, dst=join(self.package_folder, "lib"))
fix_apple_shared_install_name(self)
cmake = CMake(self)
cmake.install()
copy(self, pattern="*.h", src=join(self.package_folder, "include", "ogdf-release", "ogdf"), dst=join(self.package_folder, "include", "ogdf"))
rmdir(self, join(self.package_folder, "include", "ogdf-release"))
copy(self, pattern="*.h", src=join(self.package_folder, "include", "ogdf-debug", "ogdf"), dst=join(self.package_folder, "include", "ogdf"))
rmdir(self, join(self.package_folder, "include", "ogdf-debug"))

def package_info(self):
self.cpp_info.libs = ["OGDF"]
Expand Down
2 changes: 1 addition & 1 deletion recipes/ogdf/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.15)
project(test_package CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

find_package(ogdf REQUIRED CONFIG)
add_executable(${PROJECT_NAME} main.cpp)
Expand Down
4 changes: 1 addition & 3 deletions recipes/ogdf/config.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
versions:
"2023.09":
folder: all
"2022.02":
"2025.10":
folder: all