瀏覽代碼

[Build] Set up tvision as build feature

Slava Barinov 4 年之前
父節點
當前提交
a79b4cdaf7
共有 4 個文件被更改,包括 60 次插入41 次删除
  1. 3 0
      Cargo.toml
  2. 48 40
      build.rs
  3. 5 1
      src/main.rs
  4. 4 0
      src/ui.rs

+ 3 - 0
Cargo.toml

@@ -19,3 +19,6 @@ libc = "0.2"
 [build-dependencies]
 cc = "1.0"
 pkg-config = "0.3"
+
+[features]
+tv = []

+ 48 - 40
build.rs

@@ -1,48 +1,56 @@
+#[cfg(feature = "tv")]
 use cc::Build;
+#[cfg(feature = "tv")]
 use pkg_config::Config;
+#[cfg(feature = "tv")]
 use std::env;
+#[cfg(feature = "tv")]
 use std::process::Command;
 
 fn main() {
     println!("cargo:rerun-if-changed=build.rs");
-    println!("cargo:rerun-if-changed=extern/ui.cpp");
-    println!("cargo:rerun-if-changed=extern/tvision");
-
-    Command::new("cmake")
-        .args(&[
-            "extern/tvision",
-            "-B",
-            "extern/tvision/build",
-            "-DCMAKE_C_FLAGS=-fPIC",
-            "-DCMAKE_CXX_FLAGS=-fPIC",
-            "-DCMAKE_BUILD_TYPE=RelWithDebInfo",
-            "-DTV_BUILD_EXAMPLES=off",
-        ])
-        .status()
-        .unwrap();
-
-    let jobs = env::var("NUM_JOBS").unwrap();
-
-    Command::new("cmake")
-        .args(&["--build", "extern/tvision/build", "--parallel", &jobs])
-        .status()
-        .unwrap();
-
-    println!("cargo:rustc-link-search=extern/tvision/build");
-
-    Build::new()
-        .cpp(true)
-        .file("extern/ui.cpp")
-        .flag("-Wno-unknown-pragmas")
-        .flag("-Wno-reorder")
-        .include("extern/tvision/include")
-        .compile("libui.a");
-
-    println!("cargo:rustc-link-lib=tvision");
-    println!("cargo:rustc-link-lib=gpm");
-    Config::new()
-        .atleast_version("5.9")
-        .statik(true)
-        .probe("ncurses")
-        .unwrap();
+
+    #[cfg(feature = "tv")]
+    {
+        println!("cargo:rerun-if-changed=extern/ui.cpp");
+        println!("cargo:rerun-if-changed=extern/tvision");
+
+        Command::new("cmake")
+            .args(&[
+                "extern/tvision",
+                "-B",
+                "extern/tvision/build",
+                "-DCMAKE_C_FLAGS=-fPIC",
+                "-DCMAKE_CXX_FLAGS=-fPIC",
+                "-DCMAKE_BUILD_TYPE=RelWithDebInfo",
+                "-DTV_BUILD_EXAMPLES=off",
+            ])
+            .status()
+            .unwrap();
+
+        let jobs = env::var("NUM_JOBS").unwrap();
+
+        Command::new("cmake")
+            .args(&["--build", "extern/tvision/build", "--parallel", &jobs])
+            .status()
+            .unwrap();
+
+        println!("cargo:rustc-link-search=extern/tvision/build");
+
+        Build::new()
+            .cpp(true)
+            .file("extern/ui.cpp")
+            .flag("-Wno-unknown-pragmas")
+            .flag("-Wno-reorder")
+            .include("extern/tvision/include")
+            .compile("libui.a");
+
+        println!("cargo:rustc-link-lib=tvision");
+        println!("cargo:rustc-link-lib=gpm");
+        Config::new()
+            .atleast_version("5.9")
+            .statik(true)
+            .probe("ncurses")
+            .unwrap();
+    }
 }

+ 5 - 1
src/main.rs

@@ -142,5 +142,9 @@ fn main() {
 
     db.set("catmap", &catmap).unwrap();
     db.dump().unwrap();
-    ui::run_tv();
+
+    #[cfg(feature = "tv")]
+    {
+        ui::run_tv();
+    }
 }

+ 4 - 0
src/ui.rs

@@ -1,11 +1,15 @@
+#[cfg(feature = "tv")]
 use std::ffi::CString;
 use std::io::{stdin, stdout, Write};
+#[cfg(feature = "tv")]
 use std::os::raw::c_char;
 
+#[cfg(feature = "tv")]
 extern "C" {
     fn ui_main(line: *const c_char);
 }
 
+#[cfg(feature = "tv")]
 #[cfg_attr(tarpaulin, ignore)]
 pub fn run_tv() {
     let line = CString::new("I'm calling TV!").expect("Failed to create string");