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.
71 lines
2.7 KiB
71 lines
2.7 KiB
From 0e95c51225b01f0ca79dafd607ae6a3e404db6be Mon Sep 17 00:00:00 2001 |
|
From: Peter Jones <pjones@redhat.com> |
|
Date: Tue, 28 Mar 2017 17:59:55 -0400 |
|
Subject: [PATCH 13/13] Call ar in deterministic mode. |
|
|
|
We need the x86_64 and i686 builds of .a's to be the same, and that |
|
means we need to not have timestamps. Also force the timestamps on disk |
|
just in case that doesn't work, because RHEL's ar /silently ignores -D/. |
|
|
|
v2: use "ar rvD" not "ar rv -D". |
|
|
|
It's a wonder anybody ever gets these command line options right, if |
|
"ar rv -D libfoo.a foo.o" doesn't use deterministic mode (or |
|
complain), but "ar rvD libfoo.a foo.o" does. |
|
|
|
v3: Add a bunch of junk to try to set timestamps to 0 manually |
|
|
|
For some reason I'm still getting timestamps in the .a even though ar seems to |
|
be invoked correctly. When I do "mock -r rhel-7-build --shell" and run make |
|
manually, they're fine. Very strange. |
|
|
|
v4: go back to v2, the problem isn't in the make process. |
|
|
|
"ar rDv" works just fine, but /usr/lib/rpm/redhat/brp-strip-static-archive is |
|
calling "%{__strip} -g $for_each.a", and it's rewriting our binary from |
|
ts/uid/gid of 0/0/0 to $epoch/$UID/$GID. Awesomely /usr/bin/strip it seems to |
|
have 3 modes of operation: |
|
-U: the default, which adds $epoch/$UID/$GID to your binary archive |
|
instead of just removing stuff. Clearly the Principle of Least |
|
Surprise is strong here. |
|
-p: preserve the timestamp from the original .a, but add UID and GID, |
|
because this is 1980 and people use ar(1) for archiving stuff they |
|
might want that out of. |
|
-D: Condescend at you in a command line error and explain that -D both |
|
is and is not a valid option: |
|
/usr/bin/strip: invalid option -- 'D' |
|
Usage: /usr/bin/strip <option(s)> in-file(s) |
|
Removes symbols and sections from files |
|
The options are: |
|
... |
|
-D --enable-deterministic-archives |
|
Produce deterministic output when stripping archives |
|
So I agree that it's invalid, but I think we may be pronouncing that |
|
second vowel differently. They say in-VAL-id, I say IN-vuh-lid. |
|
|
|
Nobody should ever have to run "strace -ttt -v -f -o make.strace make all", |
|
just to discover the problem isn't even in there. |
|
|
|
Related: rhbz#1310782 |
|
|
|
Signed-off-by: Peter Jones <pjones@redhat.com> |
|
--- |
|
Make.defaults | 2 +- |
|
1 files changed, 1 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/Make.defaults b/Make.defaults |
|
index aa15c73..8f36365 100755 |
|
--- a/Make.defaults |
|
+++ b/Make.defaults |
|
@@ -167,7 +167,7 @@ CFLAGS += $(ARCH3264) -g -O2 -Wall -Wextra -Werror \ |
|
$(if $(findstring clang,$(CC)),-Wno-unknown-pragmas,) |
|
endif |
|
|
|
-ARFLAGS += -U |
|
+ARFLAGS := rDv |
|
ASFLAGS += $(ARCH3264) |
|
LDFLAGS += -nostdlib --warn-common --no-undefined --fatal-warnings \ |
|
--build-id=sha1 |
|
-- |
|
2.9.3 |
|
|
|
|