From d89f8f2ed29bb8355a8aff8da3ff78b9ed1b5604 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Thu, 5 Mar 2026 16:06:27 +0100 Subject: [PATCH 1/3] Add a `build.rs` to automatically install the OOP C++ header --- .github/workflows/capi.yaml | 1 + examples/object-oriented-cpp/dyaa.cpp | 4 ++-- pineappl_capi/build.rs | 21 +++++++++++++++++++ .../src/include}/PineAPPL.hpp | 0 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 pineappl_capi/build.rs rename {examples/object-oriented-cpp => pineappl_capi/src/include}/PineAPPL.hpp (100%) diff --git a/.github/workflows/capi.yaml b/.github/workflows/capi.yaml index 518c143e..9fe83f55 100644 --- a/.github/workflows/capi.yaml +++ b/.github/workflows/capi.yaml @@ -26,6 +26,7 @@ jobs: RUSTFLAGS: '-Cinstrument-coverage -Clink-dead-code' run: | cd pineappl_capi + export PINEAPPL_C_INSTALL_PREFIX=/usr/local cargo cinstall --verbose --prefix=/usr/local/ --libdir=/usr/local/lib ldconfig diff --git a/examples/object-oriented-cpp/dyaa.cpp b/examples/object-oriented-cpp/dyaa.cpp index bdffc142..58ceceac 100644 --- a/examples/object-oriented-cpp/dyaa.cpp +++ b/examples/object-oriented-cpp/dyaa.cpp @@ -8,8 +8,8 @@ #include #include -#include "PineAPPL.hpp" -#include "pineappl_capi.h" +#include +#include double int_photo(double s, double t, double u) { double alpha0 = 1.0 / 137.03599911; diff --git a/pineappl_capi/build.rs b/pineappl_capi/build.rs new file mode 100644 index 00000000..c39e6025 --- /dev/null +++ b/pineappl_capi/build.rs @@ -0,0 +1,21 @@ +//! A build script to install the OOP C++ interface to `PineAPPL`. + +use std::env; +use std::fs; +use std::path::PathBuf; + +fn main() { + println!("cargo:rerun-if-changed=src/include/PineAPPL.hpp"); + + if let Ok(prefix) = env::var("PINEAPPL_C_INSTALL_PREFIX") { + let prefix_path = PathBuf::from(prefix); + let include_path = prefix_path.join("include").join("pineappl_capi"); + + fs::create_dir_all(&include_path).expect("Failed to create include directory."); + + let source_header = PathBuf::from("src/include/PineAPPL.hpp"); + let dest_header = include_path.join("PineAPPL.hpp"); + + fs::copy(&source_header, &dest_header).expect("Failed to copy header file."); + } +} diff --git a/examples/object-oriented-cpp/PineAPPL.hpp b/pineappl_capi/src/include/PineAPPL.hpp similarity index 100% rename from examples/object-oriented-cpp/PineAPPL.hpp rename to pineappl_capi/src/include/PineAPPL.hpp From 29f23eec511dcd13cadbc2ec8f6a13ed4325de34 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Thu, 5 Mar 2026 16:09:57 +0100 Subject: [PATCH 2/3] Adjust the C/C++-API release --- .github/workflows/release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b6e15609..d36bdb7f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,6 +36,7 @@ jobs: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --target=${{ matrix.target }} cargo install --locked cargo-c cd pineappl_capi + export PINEAPPL_C_INSTALL_PREFIX=$(pwd)/prefix cargo cinstall --destdir=prefix --libdir=lib --library-type=cdylib --locked --prefix=/ --target=${{ matrix.target }} --verbose cd prefix tar czf ../../pineappl_capi-${{ matrix.target }}.tar.gz . @@ -105,6 +106,7 @@ jobs: - name: Compile library run: | cd pineappl_capi + export PINEAPPL_C_INSTALL_PREFIX=$(pwd)/prefix cargo cinstall --destdir=prefix --libdir=lib --library-type=cdylib --locked --prefix=/ --target=${{ matrix.target }} --verbose cd prefix tar czf ../../pineappl_capi-${{ matrix.target }}.tar.gz . From 69096fdf23b070e24877cf3be4df772ef8fde406 Mon Sep 17 00:00:00 2001 From: Radonirinaunimi Date: Fri, 6 Mar 2026 13:54:18 +0100 Subject: [PATCH 3/3] Document `PINEAPPL_C_INSTALL_PREFIX` --- docs/installation.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/installation.md b/docs/installation.md index 7d2f303a..e20f1838 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -75,6 +75,7 @@ If you want to build the CAPI from its sources instead, you first need to 3. Now install `pineappl_capi`, PineAPPL's C API: cd pineappl_capi + export PINEAPPL_C_INSTALL_PREFIX=${prefix} # To copy the OOP C++ header cargo cinstall --release --prefix=${prefix} --libdir=${prefix}/lib cd ..