Error out early on empty targets
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Wed, 11 Apr 2018 22:04:58 +0000 (00:04 +0200)
committerDirkjan Ochtman <dirkjan@ochtman.nl>
Wed, 11 Apr 2018 22:07:23 +0000 (00:07 +0200)
src/cargo/ops/cargo_clean.rs
src/cargo/ops/cargo_compile.rs
src/cargo/ops/cargo_rustc/layout.rs
src/cargo/ops/cargo_rustc/mod.rs

index 035999de2f1931708af6e585c5a68679571ccffe..cf1923ae7ed28e8c69c0083f6eb5591249f34cc5 100644 (file)
@@ -83,7 +83,7 @@ pub fn clean(ws: &Workspace, opts: &CleanOptions) -> CargoResult<()> {
         }
     }
 
-    let mut build_config = BuildConfig::new(&opts.config.rustc()?.host, &opts.target);
+    let mut build_config = BuildConfig::new(&opts.config.rustc()?.host, &opts.target)?;
     build_config.release = opts.release;
     let mut cx = Context::new(
         ws,
index 83a303b065a23b77547d368cf448c3c5ffda7c25..e5b0f8132b5d7b1cbe35471511126442d894df7f 100644 (file)
@@ -857,7 +857,7 @@ fn scrape_build_config(
     let jobs = jobs.or(cfg_jobs).unwrap_or(::num_cpus::get() as u32);
     let cfg_target = config.get_string("build.target")?.map(|s| s.val);
     let target = target.or(cfg_target);
-    let mut base = ops::BuildConfig::new(&config.rustc()?.host, &target);
+    let mut base = ops::BuildConfig::new(&config.rustc()?.host, &target)?;
     base.jobs = jobs;
     base.host = scrape_target_config(config, &base.host_triple)?;
     base.target = match target.as_ref() {
index 52af1defad9aa12f4f59fe4c2ed9244f3c3f5ade..c29b55768d6152e5adb22f94a7a241ae5565094e 100644 (file)
@@ -92,7 +92,7 @@ impl Layout {
         if let Some(triple) = triple {
             path.push(Path::new(triple)
                 .file_stem()
-                .ok_or_else(|| format_err!("target was empty"))?);
+                .ok_or_else(|| format_err!("invalid target"))?);
         }
         path.push(dest);
         Layout::at(ws.config(), path)
index 6e47859821dea6da3379a284c9cdb0f00bbd70fc..02efdde7023ee3b6d0c705491644d30e1797c817 100644 (file)
@@ -77,13 +77,18 @@ pub struct BuildConfig {
 }
 
 impl BuildConfig {
-    pub fn new(host_triple: &str, requested_target: &Option<String>) -> BuildConfig {
-        BuildConfig {
+    pub fn new(host_triple: &str, requested_target: &Option<String>) -> CargoResult<BuildConfig> {
+        if let Some(ref s) = *requested_target {
+            if s.trim().is_empty() {
+                bail!("target was empty")
+            }
+        }
+        Ok(BuildConfig {
             host_triple: host_triple.to_string(),
             requested_target: (*requested_target).clone(),
             jobs: 1,
             ..Default::default()
-        }
+        })
     }
 }