Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[AIX] Port test case run-make/reproducible-build #135174

Merged
merged 1 commit into from
Jan 7, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 44 additions & 3 deletions tests/run-make/reproducible-build/rmake.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
// Tracking Issue: https://github.com/rust-lang/rust/issues/129080

use run_make_support::{
bin_name, cwd, diff, is_darwin, is_windows, rfs, run_in_tmpdir, rust_lib_name, rustc,
bin_name, cwd, diff, is_darwin, is_windows, regex, rfs, run_in_tmpdir, rust_lib_name, rustc,
};

fn main() {
Expand Down Expand Up @@ -117,7 +117,34 @@ fn smoke_test(flag: Option<SmokeFlag>) {
.input("reproducible-build.rs")
.linker(&cwd().join(bin_name("linker")).display().to_string())
.run();
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();

#[cfg(not(target_os = "aix"))]
{
diff().actual_file("linker-arguments1").expected_file("linker-arguments2").run();
}
#[cfg(target_os = "aix")]
{
// The AIX link command includes an additional argument
// that specifies the file containing exported symbols, e.g.,
// -bE:/tmp/rustcO6hxkY/list.exp. In this example, the part of the
// directory name "rustcO6hxkY" is randomly generated to ensure that
// different linking processes do not collide. For the purpose
// of comparing link arguments, the randomly generated part is
// replaced with a placeholder.
let content1 =
std::fs::read_to_string("linker-arguments1").expect("Failed to read file");
let content2 =
std::fs::read_to_string("linker-arguments2").expect("Failed to read file");

// Define the regex for the directory name containing the random substring.
let re = regex::Regex::new(r"rustc[a-zA-Z0-9]{6}/list\.exp").expect("Invalid regex");

// Compare link commands with random strings replaced by placeholders.
assert!(
re.replace_all(&content1, "rustcXXXXXX/list.exp").to_string()
== re.replace_all(&content2, "rustcXXXXXX/list.exp").to_string()
);
}
});
}

Expand Down Expand Up @@ -207,7 +234,21 @@ fn diff_dir_test(crate_type: CrateType, remap_type: RemapType) {
std::env::set_current_dir(&base_dir).unwrap();
match crate_type {
CrateType::Bin => {
assert!(rfs::read(bin_name("reproducible-build")) == rfs::read(bin_name("foo")));
#[cfg(not(target_os = "aix"))]
{
assert!(
rfs::read(bin_name("reproducible-build")) == rfs::read(bin_name("foo"))
);
}
#[cfg(target_os = "aix")]
{
// At the 4th-byte offset, the AIX XCOFF file header defines a
// 4-byte timestamp. Nullify the timestamp before performing a
// binary comparison.
let mut file1 = rfs::read(bin_name("reproducible-build"));
let mut file2 = rfs::read(bin_name("foo"));
assert!(file1[4..8].fill(0x00) == file2[4..8].fill(0x00));
};
}
CrateType::Rlib => {
assert!(
Expand Down
Loading