Skip to content

Commit

Permalink
bootstrap: add the dist.compression-formats option
Browse files Browse the repository at this point in the history
The option allows to add or remove compression formats used while
producing dist tarballs.
  • Loading branch information
pietroalbini committed Dec 29, 2020
1 parent c482ffd commit 0a2034d
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 1 deletion.
4 changes: 4 additions & 0 deletions config.toml.example
Expand Up @@ -669,3 +669,7 @@ changelog-seen = 2

# Whether to allow failures when building tools
#missing-tools = false

# List of compression formats to use when generating dist tarballs. The list of
# formats is provided to rust-installer, which must support all of them.
#compression-formats = ["gz", "xz"]
3 changes: 3 additions & 0 deletions src/bootstrap/config.rs
Expand Up @@ -148,6 +148,7 @@ pub struct Config {
pub dist_sign_folder: Option<PathBuf>,
pub dist_upload_addr: Option<String>,
pub dist_gpg_password_file: Option<PathBuf>,
pub dist_compression_formats: Option<Vec<String>>,

// libstd features
pub backtrace: bool, // support for RUST_BACKTRACE
Expand Down Expand Up @@ -438,6 +439,7 @@ struct Dist {
upload_addr: Option<String>,
src_tarball: Option<bool>,
missing_tools: Option<bool>,
compression_formats: Option<Vec<String>>,
}

#[derive(Deserialize)]
Expand Down Expand Up @@ -936,6 +938,7 @@ impl Config {
config.dist_sign_folder = t.sign_folder.map(PathBuf::from);
config.dist_gpg_password_file = t.gpg_password_file.map(PathBuf::from);
config.dist_upload_addr = t.upload_addr;
config.dist_compression_formats = t.compression_formats;
set(&mut config.rust_dist_src, t.src_tarball);
set(&mut config.missing_tools, t.missing_tools);
}
Expand Down
4 changes: 4 additions & 0 deletions src/bootstrap/configure.py
Expand Up @@ -147,6 +147,8 @@ def v(*args):
"experimental LLVM targets to build")
v("release-channel", "rust.channel", "the name of the release channel to build")
v("release-description", "rust.description", "optional descriptive string for version output")
v("dist-compression-formats", None,
"comma-separated list of compression formats to use")

# Used on systems where "cc" is unavailable
v("default-linker", "rust.default-linker", "the default linker")
Expand Down Expand Up @@ -349,6 +351,8 @@ def set(key, value):
elif option.name == 'option-checking':
# this was handled above
pass
elif option.name == 'dist-compression-formats':
set('dist.compression-formats', value.split(','))
else:
raise RuntimeError("unhandled option {}".format(option.name))

Expand Down
16 changes: 15 additions & 1 deletion src/bootstrap/tarball.rs
Expand Up @@ -288,11 +288,25 @@ impl<'a> Tarball<'a> {

build_cli(&self, &mut cmd);
cmd.arg("--work-dir").arg(&self.temp_dir);
if let Some(formats) = &self.builder.config.dist_compression_formats {
assert!(!formats.is_empty(), "dist.compression-formats can't be empty");
cmd.arg("--compression-formats").arg(formats.join(","));
}
self.builder.run(&mut cmd);
if self.delete_temp_dir {
t!(std::fs::remove_dir_all(&self.temp_dir));
}

crate::dist::distdir(self.builder).join(format!("{}.tar.gz", package_name))
// Use either the first compression format defined, or "gz" as the default.
let ext = self
.builder
.config
.dist_compression_formats
.as_ref()
.and_then(|formats| formats.get(0))
.map(|s| s.as_str())
.unwrap_or("gz");

crate::dist::distdir(self.builder).join(format!("{}.tar.{}", package_name, ext))
}
}

0 comments on commit 0a2034d

Please sign in to comment.