Skip to content

Commit 5846278

Browse files
Merge branch 'scikit_build' of https://github.com/NOAA-ORR-ERD/py_gd into scikit_build
2 parents c1e209e + a11b38c commit 5846278

4 files changed

Lines changed: 59 additions & 17 deletions

File tree

CMakeLists.txt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,37 @@
1-
cmake_minimum_required(VERSION 3.20...4.0)
1+
cmake_minimum_required(VERSION 3.24...4.0)
22
project(${SKBUILD_PROJECT_NAME} LANGUAGES C)
33

4+
option(BUILD_DEPS OFF)
5+
46
find_package(
57
Python
68
COMPONENTS Interpreter Development.Module NumPy
79
REQUIRED)
810

911
include(UseCython)
12+
include(GNUInstallDirs)
13+
14+
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
1015

11-
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
12-
find_package(GD MODULE REQUIRED)
16+
if(ENV{VCPKG_ROOT})
17+
set(CMAKE_TOOLCHAIN_FILE "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake")
18+
endif()
19+
20+
# We do not use FetchContent because the CMakeLists of GD is terrible
21+
if(BUILD_DEPS)
22+
include(BuildGD)
23+
else()
24+
find_package(GD MODULE REQUIRED)
25+
endif()
1326

1427
cython_transpile(py_gd/py_gd.pyx LANGUAGE C OUTPUT_VARIABLE py_gd_c)
1528
python_add_library(py_gd MODULE "${py_gd_c}" WITH_SOABI)
1629
target_link_libraries(py_gd PUBLIC GD::GD Python::NumPy)
1730
install(TARGETS py_gd DESTINATION py_gd)
1831

32+
get_filename_component(GD_LIBRARY_DIR "${GD_LIBRARIES}" DIRECTORY)
33+
set_target_properties(py_gd PROPERTIES INSTALL_RPATH "${GD_LIBRARY_DIR}")
34+
1935
cython_transpile(py_gd/spline.pyx LANGUAGE C OUTPUT_VARIABLE spline_c)
2036
python_add_library(spline MODULE "${spline_c}" WITH_SOABI)
2137
target_link_libraries(spline PUBLIC Python::NumPy)

cmake/BuildGD.cmake

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
include_guard(GLOBAL)
2+
3+
include(ExternalProject)
4+
5+
set(DEP_INSTALL_DIR ${CMAKE_BINARY_DIR}/_deps/install)
6+
ExternalProject_Add(
7+
libpng_ep
8+
URL http://prdownloads.sourceforge.net/libpng/libpng-1.6.50.tar.gz?download
9+
URL_HASH SHA256=708f4398f996325819936d447f982e0db90b6b8212b7507e7672ea232210949a
10+
CMAKE_ARGS
11+
"-DCMAKE_INSTALL_PREFIX=${DEP_INSTALL_DIR}"
12+
)
13+
14+
set(GD_LIBRARIES "${DEP_INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libgd${CMAKE_SHARED_LIBRARY_SUFFIX}")
15+
set(GD_INCLUDE_DIR "${DEP_INSTALL_DIR}/include")
16+
17+
ExternalProject_Add(
18+
GD_ep
19+
GIT_REPOSITORY https://github.com/libgd/libgd.git
20+
GIT_TAG gd-2.3.3
21+
BUILD_BYPRODUCTS
22+
"${GD_LIBRARIES}"
23+
"${GD_INCLUDE_DIR}"
24+
CMAKE_ARGS
25+
"-DCMAKE_INSTALL_PREFIX=${DEP_INSTALL_DIR}"
26+
-DENABLE_PNG=1
27+
)
28+
add_library(GD::GD SHARED IMPORTED GLOBAL)
29+
file(MAKE_DIRECTORY "${GD_INCLUDE_DIR}")
30+
set_target_properties(GD::GD PROPERTIES
31+
IMPORTED_LOCATION "${GD_LIBRARIES}"
32+
INTERFACE_INCLUDE_DIRECTORIES "${GD_INCLUDE_DIR}"
33+
)
34+
add_dependencies(GD_ep libpng_ep)
35+
add_dependencies(GD::GD GD_ep)

cmake/FindGD.cmake

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,15 @@ endif()
66
find_path(GD_INCLUDE_DIR
77
NAMES gd.h
88
HINTS "${PC_GD_INCLUDE_DIRS}"
9-
REQUIRED
109
)
1110

1211
find_library(GD_LIBRARY
1312
NAMES gd
1413
HINTS "${PC_GD_INCLUDE_DIRS}"
15-
REQUIRED
1614
)
1715

1816
cmake_path(ABSOLUTE_PATH GD_LIBRARY)
1917
cmake_path(ABSOLUTE_PATH GD_INCLUDE_DIR)
20-
get_filename_component(GD_LIBRARY_DIR "${GD_LIBRARIES}" DIRECTORY)
21-
22-
message (STATUS "libgd found at ${GD_LIBRARY}, ${GD_INCLUDE_DIR}")
2318

2419
include(FindPackageHandleStandardArgs)
2520
find_package_handle_standard_args(GD
@@ -41,7 +36,6 @@ if(GD_FOUND AND NOT TARGET GD::GD)
4136
IMPORTED_LOCATION "${GD_LIBRARY}"
4237
INTERFACE_COMPILE_OPTIONS "${PC_GD_CFLAGS_OTHER}"
4338
INTERFACE_INCLUDE_DIRECTORIES "${GD_INCLUDE_DIR}"
44-
INTERFACE_LINK_DIRECTORIES "${GD_LIBRARY_DIR}"
4539
)
4640
endif()
4741

pyproject.toml

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ test = ["pytest"]
3838
build = ["scikit-build-core", "cython", "numpy", "cython-cmake"]
3939
dev = [{ include-group = "test" }, { include-group = "build"}, "build"]
4040

41+
[tool.scikit-build]
42+
build-dir = "build"
43+
4144
[tool.scikit-build.metadata.version]
4245
provider = "scikit_build_core.metadata.regex"
4346
input = "py_gd/__init__.py"
@@ -51,14 +54,8 @@ linux.before-all = [
5154
"dnf install -y gd-devel",
5255
]
5356
windows.before-all = [
54-
"vcpkg install libgd pkgconf",
55-
]
56-
macos.before-all = [
57-
"git clone https://github.com/libgd/libgd.git --branch gd-2.3.3 --depth 1",
58-
"cmake -Slibgd -Bbuild-libgd -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=./install",
59-
"cmake --build build-libgd",
60-
"cmake --install build-libgd",
57+
"vcpkg install libgd",
6158
]
62-
macos.config-settings = { "cmake.define.GD_ROOT" = "./install"}
59+
macos.config-settings = { "cmake.define.BUILD_DEPS" = "ON"}
6360

6461

0 commit comments

Comments
 (0)