rust/hgcli/build.rs
branchstable
changeset 44729 26ce8e751503
parent 43818 ce088b38f92b
parent 44638 af739894a4c1
child 45620 426294d06ddc
--- a/rust/hgcli/build.rs	Mon Apr 13 16:30:13 2020 +0300
+++ b/rust/hgcli/build.rs	Thu Apr 16 22:51:09 2020 +0530
@@ -1,126 +1,16 @@
-// build.rs -- Configure build environment for `hgcli` Rust package.
-//
-// Copyright 2017 Gregory Szorc <gregory.szorc@gmail.com>
-//
-// This software may be used and distributed according to the terms of the
-// GNU General Public License version 2 or any later version.
-
-use std::collections::HashMap;
-use std::env;
-use std::path::Path;
-use std::process::Command;
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at https://mozilla.org/MPL/2.0/.
 
-struct PythonConfig {
-    python: String,
-    config: HashMap<String, String>,
-}
-
-fn get_python_config() -> PythonConfig {
-    // The python27-sys crate exports a Cargo variable defining the full
-    // path to the interpreter being used.
-    let python = env::var("DEP_PYTHON27_PYTHON_INTERPRETER")
-        .expect("Missing DEP_PYTHON27_PYTHON_INTERPRETER; bad python27-sys crate?");
-
-    if !Path::new(&python).exists() {
-        panic!(
-            "Python interpreter {} does not exist; this should never happen",
-            python
-        );
-    }
+/*! Build script to integrate PyOxidizer. */
 
-    // This is a bit hacky but it gets the job done.
-    let separator = "SEPARATOR STRING";
-
-    let script = "import sysconfig; \
-                  c = sysconfig.get_config_vars(); \
-                  print('SEPARATOR STRING'.join('%s=%s' % i for i in c.items()))";
-
-    let mut command = Command::new(&python);
-    command.arg("-c").arg(script);
-
-    let out = command.output().unwrap();
-
-    if !out.status.success() {
-        panic!(
-            "python script failed: {}",
-            String::from_utf8_lossy(&out.stderr)
+fn main() {
+    if let Ok(config_rs) = std::env::var("DEP_PYTHONXY_DEFAULT_PYTHON_CONFIG_RS") {
+        println!(
+            "cargo:rustc-env=PYOXIDIZER_DEFAULT_PYTHON_CONFIG_RS={}",
+            config_rs
         );
-    }
-
-    let stdout = String::from_utf8_lossy(&out.stdout);
-    let mut m = HashMap::new();
-
-    for entry in stdout.split(separator) {
-        let mut parts = entry.splitn(2, "=");
-        let key = parts.next().unwrap();
-        let value = parts.next().unwrap();
-        m.insert(String::from(key), String::from(value));
-    }
-
-    PythonConfig {
-        python: python,
-        config: m,
+    } else {
+        panic!("unable to find build artifacts generated by pyembed crate");
     }
 }
-
-#[cfg(not(target_os = "windows"))]
-fn have_shared(config: &PythonConfig) -> bool {
-    match config.config.get("Py_ENABLE_SHARED") {
-        Some(value) => value == "1",
-        None => false,
-    }
-}
-
-#[cfg(target_os = "windows")]
-fn have_shared(config: &PythonConfig) -> bool {
-    use std::path::PathBuf;
-
-    // python27.dll should exist next to python2.7.exe.
-    let mut dll = PathBuf::from(&config.python);
-    dll.pop();
-    dll.push("python27.dll");
-
-    return dll.exists();
-}
-
-const REQUIRED_CONFIG_FLAGS: [&str; 2] = ["Py_USING_UNICODE", "WITH_THREAD"];
-
-fn main() {
-    let config = get_python_config();
-
-    println!("Using Python: {}", config.python);
-    println!("cargo:rustc-env=PYTHON_INTERPRETER={}", config.python);
-
-    let prefix = config.config.get("prefix").unwrap();
-
-    println!("Prefix: {}", prefix);
-
-    // TODO Windows builds don't expose these config flags. Figure out another
-    // way.
-    #[cfg(not(target_os = "windows"))]
-    for key in REQUIRED_CONFIG_FLAGS.iter() {
-        let result = match config.config.get(*key) {
-            Some(value) => value == "1",
-            None => false,
-        };
-
-        if !result {
-            panic!("Detected Python requires feature {}", key);
-        }
-    }
-
-    // We need a Python shared library.
-    if !have_shared(&config) {
-        panic!("Detected Python lacks a shared library, which is required");
-    }
-
-    let ucs4 = match config.config.get("Py_UNICODE_SIZE") {
-        Some(value) => value == "4",
-        None => false,
-    };
-
-    if !ucs4 {
-        #[cfg(not(target_os = "windows"))]
-        panic!("Detected Python doesn't support UCS-4 code points");
-    }
-}