conda-build/src/lib.rs

changeset 1
a4137aedcb3a
child 3
c3a4f4bb87f7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/conda-build/src/lib.rs	Thu Feb 26 09:32:12 2026 -0500
@@ -0,0 +1,77 @@
+//use anyhow::bail;
+//use regex::Regex;
+pub use python_config::{Error as PyCError, PythonConfig};
+use std::env;
+use std::ffi::OsString;
+use std::path::PathBuf;
+//use std::process::Command;
+
+/// Adds CONDA_PREFIX/lib/pkgconfig/ to PKG_CONFIG_PATH
+pub fn pkgconfig_conda() -> Result<Option<PathBuf>, anyhow::Error> {
+    if let Some(conda_root_) = option_env!("CONDA_PREFIX") {
+        let conda_root = PathBuf::from(conda_root_);
+        let conda_pkgconfig = conda_root.join("lib/pkgconfig/");
+
+        // Prepend CONDA_PREFIX to any existing PKG_CONFIG_PATH
+        let new_path = match option_env!("PKG_CONFIG_PATH") {
+            Some(path) => {
+                let mut paths = env::split_paths(&path).collect::<Vec<_>>();
+                paths.insert(0, conda_pkgconfig);
+                env::join_paths(paths)?
+            }
+            None => conda_pkgconfig.into(),
+        };
+
+        // Set the environment variable
+        unsafe {
+            env::set_var("PKG_CONFIG_PATH", &new_path);
+        }
+
+        Ok(Some(conda_root))
+    } else {
+        Ok(None)
+    }
+}
+
+/// Looks up conda Python
+pub fn python_conda() -> Option<OsString> {
+    option_env!("CONDA_PREFIX").and_then(|conda_prefix| {
+        /* This does not point to the right place.
+        option_env!("CONDA_PYTHON_EXE")
+            .map(OsString::from)
+            .or_else(|| { */
+        let py = PathBuf::from(conda_prefix).join("bin/python");
+        if py.exists() {
+            Some(py.into())
+        } else {
+            None
+        }
+        /* })*/
+    })
+}
+
+/// Returns a the python configuration and indication whether it's from Conda
+pub fn python_config() -> (Result<PythonConfig, PyCError>, bool) {
+    if let Some(py) = python_conda() {
+        (PythonConfig::interpreter(py), true)
+    } else {
+        (Ok(PythonConfig::new()), false)
+    }
+}
+
+/*
+/// Looks up python includes given executable
+pub fn python_includes(mut py: OsString) -> Result<Vec<String>, anyhow::Error> {
+    py.push("3-config");
+    let output = Command::new(&py).args(["--includes"]).output()?;
+    if !output.status.success() {
+        bail!("Failed to run {}.", py.display())
+    }
+    let re = Regex::new(r"\w+-I\w*").unwrap();
+    let includes = re
+        .split(format!(" {}", String::from_utf8(output.stdout)?).as_str())
+        .map(String::from)
+        .collect();
+    Ok(includes)
+}
+*/

mercurial