diff --git a/ANNOUNCE b/ANNOUNCE index 848b76e4e..16f21dbe2 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,5 +1,5 @@ -Libpng 1.6.0alpha01 - December 5, 2011 +Libpng 1.6.0alpha01 - December 8, 2011 This is not intended to be a public release. It will be replaced within a few weeks by a public version or by another test version. @@ -107,7 +107,7 @@ Version 1.5.7beta05 [(PENDING RELEASE)] Added MINGW support to CMakeLists.txt Reject invalid compression flag or method when reading the iTXt chunk. -Version 1.6.0alpha01 [December 5, 2011] +Version 1.6.0alpha01 [December 8, 2011] Removed machine-generated configure files from the GIT repository (they will continue to appear in the tarball distributions). Restored the new 'simplified' API, which was deleted from libpng-1.5.7. @@ -135,6 +135,12 @@ Version 1.6.0alpha01 [December 5, 2011] as in libpng-1.5.4. Put CRLF line endings in the owatcom project files. Fixed minor memset/sizeof errors in pngvalid.c. + Fixed race conditions in parallel make builds. With higher degress of + parallelism during 'make' the use of the same temporary file names such + as 'dfn*' can result in a race where a temporary file from one arm of the + build is deleted or overwritten in another arm. This changes the + temporary files for suffix rules to always use $* and ensures that the + non-suffix rules use unique file names. Send comments/corrections/commendations to png-mng-implement at lists.sf.net: (subscription required; visit diff --git a/CHANGES b/CHANGES index 18ad18a7a..3f5ef314d 100644 --- a/CHANGES +++ b/CHANGES @@ -3752,7 +3752,7 @@ Version 1.5.7beta05 [(PENDING RELEASE)] Added MINGW support to CMakeLists.txt Reject invalid compression flag or method when reading the iTXt chunk. -Version 1.6.0alpha01 [December 5, 2011] +Version 1.6.0alpha01 [December 8, 2011] Removed machine-generated configure files from the GIT repository (they will continue to appear in the tarball distributions). Restored the new 'simplified' API, which was deleted from libpng-1.5.7. @@ -3780,6 +3780,12 @@ Version 1.6.0alpha01 [December 5, 2011] as in libpng-1.5.4. Put CRLF line endings in the owatcom project files. Fixed minor memset/sizeof errors in pngvalid.c. + Fixed race conditions in parallel make builds. With higher degress of + parallelism during 'make' the use of the same temporary file names such + as 'dfn*' can result in a race where a temporary file from one arm of the + build is deleted or overwritten in another arm. This changes the + temporary files for suffix rules to always use $* and ensures that the + non-suffix rules use unique file names. Send comments/corrections/commendations to png-mng-implement at lists.sf.net (subscription required; visit diff --git a/Makefile.am b/Makefile.am index 3b83e74a1..f15eb7b45 100644 --- a/Makefile.am +++ b/Makefile.am @@ -88,7 +88,7 @@ EXTRA_DIST= \ SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn -CLEANFILES= dfn.c dfn?.out pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \ +CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \ check.new pnglibconf.* symbols.new pngtest-log.txt \ $(SCRIPT_CLEANFILES) @@ -143,47 +143,49 @@ SYMBOL_CFLAGS = -DPNGLIB_LIBNAME='PNG@PNGLIB_MAJOR@@PNGLIB_MINOR@_0'\ -DPNG_NO_USE_READ_MACROS -DPNG_BUILDING_SYMBOL_TABLE .dfn.out: - rm -f $@ dfn.c dfn?.out + rm -f $@ $*.c $*.tf[123] test -d scripts || mkdir scripts - echo '#include "$<"' >dfn.c + echo '#include "$<"' >$*.c $(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) @LIBPNG_DEFINES@\ - $(CPPFLAGS) $(SYMBOL_CFLAGS) dfn.c > dfn1.out + $(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1 $(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\ - dfn1.out >dfn2.out - $(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' dfn2.out >dfn3.out - rm -f dfn.c dfn[12].out - mv dfn3.out $@ + $*.tf1 >$*.tf2 + $(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' $*.tf2 >$*.tf3 + rm -f $*.c $*.tf[12] + mv $*.tf3 $@ # The .dfn file for pnglibconf.h is machine generated pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h - rm -f $@ dfn?.out - $(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out version=search\ + rm -f $@ $*.tf[45] + $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\ ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ $(DFA_XTRA) 1>&2 - $(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2 - rm dfn1.out - mv dfn2.out $@ + $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2 + rm $*.tf4 + mv $*.tf5 $@ # Symbol checks (.def and .out files should match) scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.out + .out.chk: - rm -f $@ symbols.new + rm -f $@ $*.new $(AWK) -f ${srcdir}/scripts/checksym.awk ${srcdir}/scripts/${*F}.def\ - $< >&2 - mv symbols.new $@ + of="$*.new" $< >&2 + mv $*.new $@ # used on demand to regenerate the standard header, CPPFLAGS should # be empty - no non-standard defines scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h - rm -f $@ dfn?.out + rm -f $@ pnglibconf.tf[67] test -z "$(CPPFLAGS)" echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\ - $(AWK) -f ${srcdir}/scripts/options.awk out=dfn1.out logunsupported=1 - version=search ${srcdir}/pngconf.h -\ - ${srcdir}/scripts/pnglibconf.dfa 1>&2 - $(AWK) -f ${srcdir}/scripts/options.awk out=dfn2.out dfn1.out 1>&2 - rm dfn1.out - mv dfn2.out $@ + $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\ + logunsupported=1 version=search ${srcdir}/pngconf.h -\ + ${srcdir}/scripts/pnglibconf.dfa 1>&2 + $(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf7\ + pnglibconf.tf6 1>&2 + rm pnglibconf.tf6 + mv pnglibconf.tf7 $@ $(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \ pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h diff --git a/scripts/checksym.awk b/scripts/checksym.awk index ba4c99b56..6857dff1c 100755 --- a/scripts/checksym.awk +++ b/scripts/checksym.awk @@ -5,8 +5,9 @@ # awk -f checksym.awk official-def list-to-check # # Output is a file in the current directory called 'symbols.new', -# stdout holds error messages. Error code indicates success or -# failure. +# the value of the awk variable "of" (which can be changed on the +# command line if required.) stdout holds error messages. Error +# code indicates success or failure. # # NOTE: this is a pure, old fashioned, awk script. It will # work with any awk @@ -21,6 +22,7 @@ BEGIN{ mastero = 0 # highest ordinal in master file symbolo = 0 # highest ordinal in png.h missing = "error"# log an error on missing symbols + of="symbols.new" # default to a fixed name } # Read existing definitions from the master file (the first @@ -151,11 +153,11 @@ END{ # Finally generate symbols.new if (symbol[o] != "") - print " " symbol[o], "@" o > "symbols.new" + print " " symbol[o], "@" o > of } if (err != 0) { - print "*** A new list is in symbols.new ***" + print "*** A new list is in", of, "***" exit 1 } }