diff --git a/syslinux-4.04-reproducible.patch b/syslinux-4.04-reproducible.patch new file mode 100644 index 0000000..54de2e4 --- /dev/null +++ b/syslinux-4.04-reproducible.patch @@ -0,0 +1,224 @@ +commit be645d7a9848847388a662f6c0f7571d52ed7a05 +Author: Philippe Coval +Date: Wed Dec 17 16:46:29 2014 -0500 + + build: sort sources to build in a more deterministic way + + It has been observed that binaries contents + are depending on the order of linked objects. + + This order is caused by GNU make's wildcard function + and the position of sources on filesystem. + + This change tries to prevent this kind of randomness. + + Also consider building using -j1 flag + to make it even more reproductible. + + Change-Id: Ie8eee7f336e6f1fa2863c4150d967afd15519f1d + Bug: http://bugzilla.syslinux.org/show_bug.cgi?id=57#related + Signed-off-by: Philippe Coval + +Index: syslinux-4.04/com32/cmenu/Makefile +=================================================================== +--- syslinux-4.04.orig/com32/cmenu/Makefile ++++ syslinux-4.04/com32/cmenu/Makefile +@@ -28,7 +28,7 @@ CFLAGS += -I./libmenu + LIBMENU = libmenu/syslnx.o libmenu/com32io.o libmenu/tui.o \ + libmenu/menu.o libmenu/passwords.o libmenu/des.o libmenu/help.o + +-CMENUS = $(patsubst %.c,%.c32,$(wildcard *.c)) ++CMENUS = $(sort $(patsubst %.c,%.c32,$(wildcard *.c))) + IMENUS = $(patsubst %.menu,%.c32,$(wildcard *.menu)) + + MENUS = $(CMENUS) $(IMENUS) +@@ -56,7 +56,7 @@ clean: tidy menuclean libclean + rm -f *.lss *.c32 *.com + + menuclean: +- rm -f $(patsubst %.menu,%.c,$(wildcard *.menu)) ++ rm -f $(patsubst %.menu,%.c,$(sort $(wildcard *.menu))) + + spotless: clean libclean menuclean + rm -f *~ \#* +Index: syslinux-4.04/com32/rosh/Makefile +=================================================================== +--- syslinux-4.04.orig/com32/rosh/Makefile ++++ syslinux-4.04/com32/rosh/Makefile +@@ -24,7 +24,7 @@ include MCONFIG + # official release. Otherwise, substitute a hex string that is pretty much + # guaranteed to be unique to be unique from build to build. + ifndef HEXDATE +-HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(wildcard *.h)) ++HEXDATE := $(shell $(PERL) $(topdir)/now.pl $(SRCS) $(sort $(wildcard *.h))) + endif + ifndef DATE + DATE := $(shell sh $(topdir)/gen-id.sh $(VERSION) $(HEXDATE)) +Index: syslinux-4.04/core/Makefile +=================================================================== +--- syslinux-4.04.orig/core/Makefile ++++ syslinux-4.04/core/Makefile +@@ -37,10 +37,10 @@ BTARGET = kwdhash.gen \ + isolinux.bin isolinux-debug.bin pxelinux.0 + + # All primary source files for the main syslinux files +-NASMSRC := $(wildcard *.asm) +-NASMHDR := $(wildcard *.inc) +-CSRC := $(wildcard *.c */*.c */*/*.c) +-SSRC := $(wildcard *.S */*.S */*/*.S) ++NASMSRC := $(sort $(wildcard *.asm)) ++NASMHDR := $(sort $(wildcard *.inc)) ++CSRC := $(sort $(wildcard *.c */*.c */*/*.c)) ++SSRC := $(sort $(wildcard *.S */*.S */*/*.S)) + CHDR := $(wildcard *.h) + OTHERSRC := keywords + ALLSRC = $(NASMSRC) $(NASMHDR) $(CSRC) $(SSRC) $(CHDR) $(OTHERSRC) +Index: syslinux-4.04/gpxe/src/Makefile.housekeeping +=================================================================== +--- syslinux-4.04.orig/gpxe/src/Makefile.housekeeping ++++ syslinux-4.04/gpxe/src/Makefile.housekeeping +@@ -246,9 +246,9 @@ endif + # + # BIN has the form bin[-[arch-]platform] + +-ARCHS := $(patsubst arch/%,%,$(wildcard arch/*)) ++ARCHS := $(patsubst arch/%,%,$(sort $(wildcard arch/*))) + PLATFORMS := $(patsubst config/defaults/%.h,%,\ +- $(wildcard config/defaults/*.h)) ++ $(sort $(wildcard config/defaults/*.h))) + archs : + @$(ECHO) $(ARCHS) + +@@ -307,8 +307,8 @@ srcdirs : + + # SRCS lists all .c or .S files found in any SRCDIR + # +-SRCS += $(wildcard $(patsubst %,%/*.c,$(SRCDIRS))) +-SRCS += $(wildcard $(patsubst %,%/*.S,$(SRCDIRS))) ++SRCS += $(sort $(wildcard $(patsubst %,%/*.c,$(SRCDIRS)))) ++SRCS += $(sort $(wildcard $(patsubst %,%/*.S,$(SRCDIRS)))) + srcs : + @$(ECHO) $(SRCS) + +@@ -677,7 +677,7 @@ endef + $(BIN)/%.objs : $(BIN)/%.tmp + $(Q)$(ECHO) $(call objs_list,$<) + $(BIN)/%.sizes : $(BIN)/%.tmp +- $(Q)$(SIZE) -t $(foreach OBJ,$(call objs_list,$<),$(wildcard $(BIN)/$(subst _,?,$(OBJ)).o)) | \ ++ $(Q)$(SIZE) -t $(foreach OBJ,$(call objs_list,$<),$(sort $(wildcard $(BIN)/$(subst _,?,$(OBJ)).o))) | \ + sort -g + + # Get dependency list for the specified target +@@ -807,7 +807,7 @@ $(BIN)/%.o : payload/%.img + $(Q)$(LD) -b binary -r -o $@ $< --undefined obj_payload \ + --defsym obj_$*=0 + +-BOBJS += $(patsubst payload/%.img,$(BIN)/%.o,$(wildcard payload/*.img)) ++BOBJS += $(patsubst payload/%.img,$(BIN)/%.o,$(sort $(wildcard payload/*.img))) + + # The "allXXXs" targets for each suffix + # +Index: syslinux-4.04/lzo/Makefile +=================================================================== +--- syslinux-4.04.orig/lzo/Makefile ++++ syslinux-4.04/lzo/Makefile +@@ -15,7 +15,7 @@ include $(topdir)/MCONFIG.build + + INCLUDES += -I./include + +-LIBOBJS = $(patsubst %.c,%.o,$(wildcard src/*.c)) ++LIBOBJS = $(sort $(patsubst %.c,%.o,$(wildcard src/*.c))) + LIB = lzo.a + BINS = prepcore + +Index: syslinux-4.04/mtools/Makefile +=================================================================== +--- syslinux-4.04.orig/mtools/Makefile ++++ syslinux-4.04/mtools/Makefile +@@ -13,7 +13,7 @@ SRCS = syslinux.c \ + ../libinstaller/setadv.c \ + ../libinstaller/bootsect_bin.c \ + ../libinstaller/ldlinux_bin.c \ +- $(wildcard ../libfat/*.c) ++ $(sort $(wildcard ../libfat/*.c)) + OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS))) + + .SUFFIXES: .c .o .i .s .S +Index: syslinux-4.04/com32/gpllib/Makefile +=================================================================== +--- syslinux-4.04.orig/com32/gpllib/Makefile ++++ syslinux-4.04/com32/gpllib/Makefile +@@ -9,7 +9,7 @@ include ../lib/MCONFIG + REQFLAGS += -I../gplinclude + + GPLDIRS := . disk dmi vpd acpi +-LIBOBJS := $(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c))) ++LIBOBJS := $(sort $(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c)))) + + BINDIR = /usr/bin + LIBDIR = /usr/lib +Index: syslinux-4.04/com32/hdt/Makefile +=================================================================== +--- syslinux-4.04.orig/com32/hdt/Makefile ++++ syslinux-4.04/com32/hdt/Makefile +@@ -25,7 +25,7 @@ CFLAGS += -I$(com32)/cmenu/libmenu + MODULES = hdt.c32 + TESTFILES = + +-OBJS = $(patsubst %.c,%.o,$(wildcard *.c)) ++OBJS = $(sort $(patsubst %.c,%.o,$(wildcard *.c))) + VERSION = $(shell $(SED) -n 's/\#define VERSION \"\(.*\)\"/\1/p' hdt.h) + CODENAME = $(shell $(SED) -n 's/\#define CODENAME \"\(.*\)\"/\1/p' hdt.h) + VERSION_C32 = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g') +Index: syslinux-4.04/com32/sysdump/Makefile +=================================================================== +--- syslinux-4.04.orig/com32/sysdump/Makefile ++++ syslinux-4.04/com32/sysdump/Makefile +@@ -25,7 +25,7 @@ LNXLIBS = ../libutil/libutil_lnx.a + MODULES = sysdump.c32 + TESTFILES = + +-SRCS = $(wildcard *.c) ++SRCS = $(sort $(wildcard *.c)) + OBJS = $(patsubst %.c,%.o,$(SRCS)) + + # The DATE is set on the make command line when building binaries for +Index: syslinux-4.04/memdisk/Makefile +=================================================================== +--- syslinux-4.04.orig/memdisk/Makefile ++++ syslinux-4.04/memdisk/Makefile +@@ -23,7 +23,7 @@ NASMOPT = -O9999 + NFLAGS = -dDATE='"$(DATE)"' + NINCLUDE = + +-SRCS = $(wildcard *.asm *.c *.h) ++SRCS = $(sort $(wildcard *.asm *.c *.h)) + + # The DATE is set on the make command line when building binaries for + # official release. Otherwise, substitute a hex string that is pretty much +Index: syslinux-4.04/win32/Makefile +=================================================================== +--- syslinux-4.04.orig/win32/Makefile ++++ syslinux-4.04/win32/Makefile +@@ -57,7 +57,7 @@ LIBSRC = ../libinstaller/fat.c \ + ../libinstaller/bootsect_bin.c \ + ../libinstaller/ldlinux_bin.c \ + ../libinstaller/mbr_bin.c \ +- $(wildcard ../libfat/*.c) ++ $(sort $(wildcard ../libfat/*.c)) + LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC))) + + LIB = syslinux.lib +Index: syslinux-4.04/win64/Makefile +=================================================================== +--- syslinux-4.04.orig/win64/Makefile ++++ syslinux-4.04/win64/Makefile +@@ -47,7 +47,7 @@ LIBSRC = ../libinstaller/fat.c \ + ../libinstaller/bootsect_bin.c \ + ../libinstaller/ldlinux_bin.c \ + ../libinstaller/mbr_bin.c \ +- $(wildcard ../libfat/*.c) ++ $(sort $(wildcard ../libfat/*.c)) + LIBOBJS = $(patsubst %.c,%.obj,$(notdir $(LIBSRC))) + + LIB = syslinux.lib diff --git a/syslinux.changes b/syslinux.changes index 2395fe7..4ffcabd 100644 --- a/syslinux.changes +++ b/syslinux.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Jul 20 12:06:49 UTC 2017 - bwiedemann@suse.com + +- Add syslinux-4.04-reproducible.patch to sort file lists + to fix build-compare (boo#1041090) + ------------------------------------------------------------------- Fri Jun 3 10:50:47 CEST 2016 - snwint@suse.de diff --git a/syslinux.spec b/syslinux.spec index 9eff31e..2485a9f 100644 --- a/syslinux.spec +++ b/syslinux.spec @@ -56,6 +56,8 @@ Patch15: %{name}-%{version}-cache_fix.diff Patch16: %{name}-%{version}-mtime.diff Patch17: %{name}-%{version}-miniacc.diff Patch18: %{name}-%{version}-align.diff +# PATCH-FIX-UPSTREAM -- make package build reproducible +Patch19: syslinux-4.04-reproducible.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -90,6 +92,7 @@ Authors: %patch16 -p1 %patch17 %patch18 +%patch19 -p1 %build cp %{SOURCE2} .