[syslinux:master] build: sort sources to build in a more deterministic way

syslinux-bot for Philippe Coval philippe.coval at open.eurogiciel.org
Mon Jan 5 17:48:16 PST 2015


Commit-ID:  be645d7a9848847388a662f6c0f7571d52ed7a05
Gitweb:     http://www.syslinux.org/commit/be645d7a9848847388a662f6c0f7571d52ed7a05
Author:     Philippe Coval <philippe.coval at open.eurogiciel.org>
AuthorDate: Wed, 17 Dec 2014 16:46:29 -0500
Committer:  Gene Cumm <gene.cumm at gmail.com>
CommitDate: Mon, 5 Jan 2015 20:43:13 -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 <philippe.coval at open.eurogiciel.org>

---
 codepage/Makefile              |  2 +-
 com32/cmenu/Makefile           |  6 +++---
 com32/gpllib/Makefile          |  2 +-
 com32/hdt/Makefile             |  2 +-
 com32/libupload/Makefile       |  2 +-
 com32/rosh/Makefile            |  2 +-
 com32/sysdump/Makefile         |  4 ++--
 core/Makefile                  | 10 +++++-----
 dos/Makefile                   |  2 +-
 gpxe/src/Makefile.housekeeping | 12 ++++++------
 lzo/Makefile                   |  2 +-
 memdisk/Makefile               |  2 +-
 mtools/Makefile                |  2 +-
 win32/Makefile                 |  2 +-
 win64/Makefile                 |  2 +-
 15 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/codepage/Makefile b/codepage/Makefile
index 18a590f..af5258a 100644
--- a/codepage/Makefile
+++ b/codepage/Makefile
@@ -1,6 +1,6 @@
 VPATH		= $(SRC)
 PERL		= perl
-CPSRC		= $(wildcard $(SRC)/*.txt)
+CPSRC		= $(sort $(wildcard $(SRC)/*.txt))
 CPOBJ		= $(notdir $(CPSRC))
 GENFILES	= $(patsubst %.txt,%.cp,$(CPOBJ))
 
diff --git a/com32/cmenu/Makefile b/com32/cmenu/Makefile
index 6bb5231..b81b68e 100644
--- a/com32/cmenu/Makefile
+++ b/com32/cmenu/Makefile
@@ -32,8 +32,8 @@ LIBMENU = libmenu/syslnx.o libmenu/com32io.o libmenu/tui.o \
 	libmenu/menu.o libmenu/passwords.o libmenu/des.o libmenu/help.o \
 	$(objdir)/com32/libutil/libutil.c32 $(objdir)/com32/lib/libcom32.c32
 
-CMENUS = $(patsubst %.c,%.c32,$(wildcard $(SRC)/*.c))
-IMENUS = $(patsubst %.menu,%.c32,$(wildcard $(SRC)/*.menu))
+CMENUS = $(patsubst %.c,%.c32,$(sort $(wildcard $(SRC)/*.c)))
+IMENUS = $(patsubst %.menu,%.c32,$(sort $(wildcard $(SRC)/*.menu)))
 
 MENUS = $(LIBS) $(subst $(SRC)/,,$(CMENUS) $(IMENUS))
 
@@ -62,7 +62,7 @@ clean: tidy menuclean
 	rm -f *.lss *.com
 
 menuclean:
-	rm -f $(patsubst %.menu,%.c,$(wildcard *.menu))
+	rm -f $(patsubst %.menu,%.c,$(sort $(wildcard *.menu)))
 
 spotless: clean libclean menuclean
 	rm -f *~ \#* *.c32
diff --git a/com32/gpllib/Makefile b/com32/gpllib/Makefile
index e3e30d7..1fec914 100644
--- a/com32/gpllib/Makefile
+++ b/com32/gpllib/Makefile
@@ -8,7 +8,7 @@ include $(MAKEDIR)/lib.mk
 REQFLAGS += -I$(SRC)/../gplinclude -I$(SRC)/../gplinclude/zzjson
 
 GPLDIRS := $(SRC) $(addprefix $(SRC)/,disk dmi vpd acpi zzjson)
-LIBOBJS := $(subst $(SRC)/,,$(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(wildcard $(dir)/*.c))))
+LIBOBJS := $(subst $(SRC)/,,$(foreach dir,$(GPLDIRS),$(patsubst %.c,%.o,$(sort $(wildcard $(dir)/*.c)))))
 
 BINDIR   = /usr/bin
 LIBDIR   = /usr/lib
diff --git a/com32/hdt/Makefile b/com32/hdt/Makefile
index 80f2d0a..61736d0 100644
--- a/com32/hdt/Makefile
+++ b/com32/hdt/Makefile
@@ -25,7 +25,7 @@ CFLAGS    += -I$(com32)/cmenu/libmenu -I$(com32)
 MODULES	  = hdt.c32
 TESTFILES =
 
-OBJS	  = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(wildcard $(SRC)/*.c)))
+OBJS	  = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(sort $(wildcard $(SRC)/*.c))))
 VERSION   = $(shell $(SED) -n 's/\#define VERSION \"\(.*\)\"/\1/p' hdt.h)
 CODENAME  = $(shell $(SED) -n 's/\#define CODENAME \"\(.*\)\"/\1/p' hdt.h)
 NODASH_VERSION = $(shell echo $(VERSION) | $(SED) -e 's/-/_/g' | $(SED) -e 's/\./_/g')
diff --git a/com32/libupload/Makefile b/com32/libupload/Makefile
index f9440c5..a779913 100644
--- a/com32/libupload/Makefile
+++ b/com32/libupload/Makefile
@@ -4,7 +4,7 @@ include $(MAKEDIR)/com32.mk
 
 REQFLAGS += -I$(SRC)
 
-LIBOBJS := $(notdir $(patsubst %.c,%.o,$(wildcard $(SRC)/*.c)))
+LIBOBJS := $(notdir $(patsubst %.c,%.o,$(sort $(wildcard $(SRC)/*.c))))
 
 BINDIR   = /usr/bin
 LIBDIR   = /usr/lib
diff --git a/com32/rosh/Makefile b/com32/rosh/Makefile
index 4d900f4..0d49eec 100644
--- a/com32/rosh/Makefile
+++ b/com32/rosh/Makefile
@@ -27,7 +27,7 @@ include $(MAKEDIR)/rosh.mk
 # 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))
diff --git a/com32/sysdump/Makefile b/com32/sysdump/Makefile
index 240edaa..ba9bcae 100644
--- a/com32/sysdump/Makefile
+++ b/com32/sysdump/Makefile
@@ -27,14 +27,14 @@ CFLAGS += -I$(com32) -I$(topdir)
 MODULES	  = sysdump.c32
 TESTFILES =
 
-SRCS = $(wildcard $(SRC)/*.c)
+SRCS = $(sort $(wildcard $(SRC)/*.c))
 OBJS = $(subst $(SRC)/,,$(patsubst %.c,%.o,$(SRCS)))
 
 # The DATE is set on the make command line when building binaries for
 # 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))
diff --git a/core/Makefile b/core/Makefile
index ad0acb5..26302fd 100644
--- a/core/Makefile
+++ b/core/Makefile
@@ -39,8 +39,8 @@ BTARGET  = kwdhash.gen \
 	   isolinux.bin isolinux-debug.bin pxelinux.0 lpxelinux.0
 
 # All primary source files for the main syslinux files
-NASMSRC	 := $(wildcard $(SRC)/*.asm)
-NASMHDR  := $(wildcard $(SRC)/*.inc)
+NASMSRC	 := $(sort $(wildcard $(SRC)/*.asm))
+NASMHDR  := $(sort $(wildcard $(SRC)/*.inc))
 CSRC	 := $(shell find $(SRC) -name '*.c' -print)
 SSRC	 := $(shell find $(SRC) -name '*.S' -print)
 CHDR	 := $(shell find $(SRC) -name '*.h' -print)
@@ -80,9 +80,9 @@ FILTER_OBJS = %rawcon.o %plaincon.o %pxelinux-c.o %ldlinux-c.o \
 ifdef EFI_BUILD
 # EFI is single-threaded, and doesn't use the LZO assembly decoder
 FILTER_OBJS += $(subst $(SRC)/,, \
-	$(patsubst %.S,%.o, $(wildcard $(SRC)/lzo/*.S)) \
-	$(patsubst %.c,%.o, $(wildcard $(SRC)/thread/*.c)) \
-	$(patsubst %.S,%.o, $(wildcard $(SRC)/thread/*.S)))
+	$(patsubst %.S,%.o, $(sort $(wildcard $(SRC)/lzo/*.S))) \
+	$(patsubst %.c,%.o, $(sort $(wildcard $(SRC)/thread/*.c))) \
+	$(patsubst %.S,%.o, $(sort $(wildcard $(SRC)/thread/*.S))))
 endif
 
 COBJS	 = $(filter-out $(FILTER_OBJS),$(COBJ))
diff --git a/dos/Makefile b/dos/Makefile
index b9c337d..4c930d1 100644
--- a/dos/Makefile
+++ b/dos/Makefile
@@ -34,7 +34,7 @@ SRCS     = syslinux.c \
 	   ../libinstaller/getopt/getopt_long.c \
 	   ../libinstaller/bootsect_bin.c \
 	   ../libinstaller/mbr_bin.c \
-           $(wildcard $(SRC)/../libfat/*.c)
+           $(sort $(wildcard $(SRC)/../libfat/*.c))
 OBJS	 = header.o crt0.o ldlinux.o \
 	   $(patsubst %.c,%.o,$(notdir $(SRCS)))
 LIBOBJS	 = int2526.o conio.o memcpy.o memset.o memmove.o skipatou.o atou.o \
diff --git a/gpxe/src/Makefile.housekeeping b/gpxe/src/Makefile.housekeeping
index 1f5e115..903ac53 100644
--- a/gpxe/src/Makefile.housekeeping
+++ b/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
 #
diff --git a/lzo/Makefile b/lzo/Makefile
index 0c5d296..29f1fa6 100644
--- a/lzo/Makefile
+++ b/lzo/Makefile
@@ -15,7 +15,7 @@ include $(MAKEDIR)/build.mk
 
 INCLUDES += -I$(SRC)/include
 
-LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(wildcard $(SRC)/src/*.c)))
+LIBOBJS = $(patsubst %.c,%.o,$(subst $(SRC)/,,$(sort $(wildcard $(SRC)/src/*.c))))
 LIB     = lzo.a
 BINS    = prepcore
 
diff --git a/memdisk/Makefile b/memdisk/Makefile
index e6557d8..42e56e0 100644
--- a/memdisk/Makefile
+++ b/memdisk/Makefile
@@ -23,7 +23,7 @@ NFLAGS   = -dDATE='"$(DATE)"'
 NINCLUDE = -I$(SRC)/
 
 VPATH = $(SRC)
-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
diff --git a/mtools/Makefile b/mtools/Makefile
index 70269ef..0d0b1b2 100755
--- a/mtools/Makefile
+++ b/mtools/Makefile
@@ -13,7 +13,7 @@ SRCS     = syslinux.c \
 	   ../libinstaller/bootsect_bin.c \
 	   ../libinstaller/ldlinux_bin.c \
 	   ../libinstaller/ldlinuxc32_bin.c \
-	   $(wildcard $(SRC)/../libfat/*.c)
+	   $(sort $(wildcard $(SRC)/../libfat/*.c))
 OBJS	 = $(patsubst %.c,%.o,$(notdir $(SRCS)))
 
 .SUFFIXES: .c .o .i .s .S
diff --git a/win32/Makefile b/win32/Makefile
index 437f954..c648530 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -59,7 +59,7 @@ LIBSRC   = ../libinstaller/fs.c \
 	   ../libinstaller/ldlinux_bin.c \
 	   ../libinstaller/ldlinuxc32_bin.c \
 	   ../libinstaller/mbr_bin.c \
-	   $(wildcard $(SRC)/../libfat/*.c)
+	   $(sort $(wildcard $(SRC)/../libfat/*.c))
 LIBOBJS  = $(patsubst %.c,%.obj,$(notdir $(LIBSRC)))
 
 LIB	 = syslinux.lib
diff --git a/win64/Makefile b/win64/Makefile
index ae47e2e..359d270 100644
--- a/win64/Makefile
+++ b/win64/Makefile
@@ -49,7 +49,7 @@ LIBSRC   = ../libinstaller/fs.c \
 	   ../libinstaller/ldlinux_bin.c \
 	   ../libinstaller/ldlinuxc32_bin.c \
 	   ../libinstaller/mbr_bin.c \
-	   $(wildcard $(SRC)/../libfat/*.c)
+	   $(sort $(wildcard $(SRC)/../libfat/*.c))
 LIBOBJS  = $(patsubst %.c,%.obj,$(notdir $(LIBSRC)))
 
 LIB	 = syslinux.lib


More information about the Syslinux-commits mailing list