You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
rust-lzma-sys/0001-build-unconditionally-...

128 lines
3.9 KiB

From 8a87f94f09c98f2c503da541239b819d2fe0178c Mon Sep 17 00:00:00 2001
From: Fabio Valentini <decathorpe@gmail.com>
Date: Mon, 12 Dec 2022 23:28:52 +0100
Subject: [PATCH] build: unconditionally link against system liblzma
---
build.rs | 107 ++-----------------------------------------------------
1 file changed, 2 insertions(+), 105 deletions(-)
diff --git a/build.rs b/build.rs
index 6bec545..22ab405 100644
--- a/build.rs
+++ b/build.rs
@@ -1,108 +1,5 @@
-use std::env;
-use std::fs;
-use std::path::PathBuf;
-
-const SKIP_FILENAMES: &[&str] = &["crc32_small", "crc64_small"];
-
fn main() {
- let target = env::var("TARGET").unwrap();
-
println!("cargo:rerun-if-changed=build.rs");
- println!("cargo:rerun-if-env-changed=LZMA_API_STATIC");
- let want_static = cfg!(feature = "static") || env::var("LZMA_API_STATIC").is_ok();
- let msvc = target.contains("msvc");
-
- // If a static link is desired, we compile from source.
- // If we're compiling for MSVC, pkg-config runs a risk of picking up MinGW
- // libraries by accident, so disable it.
- //
- // Otherwise check the system to see if it has an lzma library already
- // installed that we can use.
- if !want_static && !msvc && pkg_config::probe_library("liblzma").is_ok() {
- return;
- }
-
- let out_dir = env::var("OUT_DIR").unwrap();
- println!("cargo:root={}", out_dir);
- let include_dir = env::current_dir().unwrap().join("xz-5.2/src/liblzma/api");
- println!("cargo:include={}", include_dir.display());
-
- let mut src_files = [
- "xz-5.2/src/liblzma/common",
- "xz-5.2/src/liblzma/lzma",
- "xz-5.2/src/liblzma/lz",
- "xz-5.2/src/liblzma/check",
- "xz-5.2/src/liblzma/delta",
- "xz-5.2/src/liblzma/rangecoder",
- "xz-5.2/src/liblzma/simple",
- ]
- .iter()
- .flat_map(|dir| read_dir_files(dir))
- .chain(vec![
- "xz-5.2/src/common/tuklib_cpucores.c".into(),
- "xz-5.2/src/common/tuklib_physmem.c".into(),
- ])
- .collect::<Vec<_>>();
-
- // sort to make build reproducible.
- src_files.sort();
-
- let mut build = cc::Build::new();
-
- build
- .files(src_files)
- // all C preproc defines are in `./config.h`
- .define("HAVE_CONFIG_H", "1")
- .include("xz-5.2/src/liblzma/api")
- .include("xz-5.2/src/liblzma/lzma")
- .include("xz-5.2/src/liblzma/lz")
- .include("xz-5.2/src/liblzma/check")
- .include("xz-5.2/src/liblzma/simple")
- .include("xz-5.2/src/liblzma/delta")
- .include("xz-5.2/src/liblzma/common")
- .include("xz-5.2/src/liblzma/rangecoder")
- .include("xz-5.2/src/common")
- .include(env::current_dir().unwrap());
-
- if !target.ends_with("msvc") {
- build.flag("-std=c99").flag("-pthread");
- }
-
- if let Ok(s) = env::var("CARGO_CFG_TARGET_ENDIAN") {
- if s == "big" {
- build.define("WORDS_BIGENDIAN", None);
- }
- }
-
- build.compile("liblzma.a");
-}
-
-fn read_dir_files(dir: &str) -> impl Iterator<Item = PathBuf> {
- fs::read_dir(dir)
- .expect(&format!("failed to read dir {}", dir))
- .filter_map(|ent| {
- let ent = ent.expect("failed to read entry");
-
- if ent.file_type().unwrap().is_dir() {
- return None;
- }
-
- let path = ent.path();
-
- if path.extension().unwrap() != "c" {
- return None;
- }
-
- {
- let file_stem = path.file_stem().unwrap().to_str().unwrap();
- if SKIP_FILENAMES.contains(&file_stem) {
- return None;
- }
- if file_stem.ends_with("tablegen") {
- return None;
- }
- }
-
- Some(path)
- })
+ pkg_config::probe_library("liblzma").unwrap();
+ return;
}
--
2.38.1