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"
49 changes: 24 additions & 25 deletions recipes/ogdf/all/conanfile.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from conan import ConanFile
from conan.tools.apple import fix_apple_shared_install_name
from conan.tools.apple import is_apple_os
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 +25,18 @@ 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) and is_apple_os(self):
# FIXME: https://github.com/ogdf/ogdf/issues/214
# error: unknown target CPU 'apple-m2'
raise ConanInvalidConfiguration("Cross-building is not support on Mac yet. See https://github.com/ogdf/ogdf/issues/214.")

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

Expand All @@ -37,7 +50,6 @@ def configure(self):

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

def layout(self):
cmake_layout(self, src_folder="src")
Expand All @@ -55,19 +67,11 @@ def _patch_sources(self):
rmdir(self, join(self.source_folder, "src", "coin"))
rmdir(self, join(self.source_folder, "include", "coin"))
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"))
# 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 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")]:
replace_in_file(self, join(self.source_folder, dir_name, "ogdf", "fileformats", file_name), "ogdf/lib/pugixml/pugixml.h", "pugixml.hpp")
replace_in_file(self, join(self.source_folder, "CMakeLists.txt"), "include(coin)", "find_package(coin-clp 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)")

def build(self):
self._patch_sources()
Expand All @@ -76,17 +80,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
1 change: 0 additions & 1 deletion recipes/ogdf/all/test_package/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
cmake_minimum_required(VERSION 3.15)
project(test_package CXX)
set(CMAKE_CXX_STANDARD 11)

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