Index: syslinux-4.04/core/Makefile =================================================================== --- syslinux-4.04.orig/core/Makefile +++ syslinux-4.04/core/Makefile @@ -63,7 +63,7 @@ PREPCORE = ../lzo/prepcore # 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) ../now.pl $(SRCS)) +HEXDATE := $(shell $(PERL) ../now.pl $(ALLSRC)) endif ifndef DATE DATE := $(shell sh ../gen-id.sh $(VERSION) $(HEXDATE)) Index: syslinux-4.04/libinstaller/bin2c.pl =================================================================== --- syslinux-4.04.orig/libinstaller/bin2c.pl +++ syslinux-4.04/libinstaller/bin2c.pl @@ -71,8 +71,4 @@ if ($align != 0) { printf "\n};\n\nconst unsigned int %s_len = %u;\n", $table_name, $total_len; -@st = stat STDIN; - -printf "\nconst int %s_mtime = %d;\n", $table_name, $st[9]; - exit 0; Index: syslinux-4.04/libinstaller/syslinux.h =================================================================== --- syslinux-4.04.orig/libinstaller/syslinux.h +++ syslinux-4.04/libinstaller/syslinux.h @@ -20,11 +20,9 @@ /* The standard boot sector and ldlinux image */ extern unsigned char syslinux_bootsect[]; extern const unsigned int syslinux_bootsect_len; -extern const int syslinux_bootsect_mtime; extern unsigned char syslinux_ldlinux[]; extern const unsigned int syslinux_ldlinux_len; -extern const int syslinux_ldlinux_mtime; #define boot_sector syslinux_bootsect #define boot_sector_len syslinux_bootsect_len @@ -33,7 +31,6 @@ extern const int syslinux_ldlinux_mtime; extern unsigned char syslinux_mbr[]; extern const unsigned int syslinux_mbr_len; -extern const int syslinux_mbr_mtime; /* Sector size assumptions... */ #define SECTOR_SHIFT 9 Index: syslinux-4.04/now.pl =================================================================== --- syslinux-4.04.orig/now.pl +++ syslinux-4.04/now.pl @@ -1,21 +1,22 @@ -#!/usr/bin/perl -# -# Print the time (possibly the mtime of a file) as a hexadecimal integer -# If more than one file, print the mtime of the *newest* file. -# - -undef $now; - -foreach $file ( @ARGV ) { - ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime, - $ctime,$blksize,$blocks) = stat($file); - if ( !defined($now) || $now < $mtime ) { - $now = $mtime; - } -} +#! /usr/bin/perl + +# Use checksum over all sources and source file names to create some unique id. + +use Digest::SHA; + +use strict; -if ( !defined($now) ) { - $now = time; +my $digest = Digest::SHA->new(256); + +# print STDERR "now.pl: ", join(" ", @ARGV) , "\n"; + +for (sort @ARGV) { + $digest->add($_); + $digest->addfile($_); } -printf "0x%08x\n", $now; +my $val = substr($digest->hexdigest, 0, 8); + +# printf STDERR "now.pl: = 0x$val\n"; + +print "0x$val\n";