On Mon, 2010-10-04 at 11:10 -0400, Aaron M. Ucko wrote: > Adam C Powell IV <hazel...@debian.org> writes: > > Aaron, do you have any advice on avoiding race conditions in generated > > code? I tried having the omniidl targets include touching a stamp file > > after finishing code generation, but couldn't get that to work. > > The problem appears to be that they run the same command: > > .idlSK.cc: > $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< > .idl.hh: > $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< > > As such, make inadvertantly clobbers one SK.cc file in the course of > (re)generating the corresponding .hh file for the other source file. :-/
Ah, that makes a lot of sense, and explains why there were so often compilation errors in the SK.cc files. > If my analysis is correct, you can work around the bug by having the .hh > file claim to depend on the SK.cc file: > > %.hh: %SK.cc > %SK.cc: %.idl > $(OMNIORB_IDL) $(IDLCXXFLAGS) $(OMNIORB_IDLCXXFLAGS) $< Very strange, that fails with: make[2]: Entering directory `/home/hazelsct/repositories/salome/build-salome/GEOM_SRC_5.1.3/idl' Makefile:907: warning: overriding commands for target `mostlyclean-local' Makefile:880: warning: ignoring old commands for target `mostlyclean-local' /usr/bin/omniidl -bcxx -Wba -nf -I/usr/idl -I../idl/salome -I/home/hazelsct/repositories/salome/debian/salome/usr/idl/salome -Wba -nf -I/usr/idl ../../../GEOM_SRC_5.1.3/idl/GEOM_Gen.idl /usr/bin/omniidl -bcxx -Wba -nf -I/usr/idl -I../idl/salome -I/home/hazelsct/repositories/salome/debian/salome/usr/idl/salome -Wba -nf -I/usr/idl ../../../GEOM_SRC_5.1.3/idl/GEOM_Superv.idl make[2]: *** No rule to make target `GEOM_Gen.hh', needed by `all-am'. Stop. make[2]: *** Waiting for unfinished jobs.... Maybe because the SK.cc file timestamp is after the .hh? > (The .idl -> SK.cc rule could continue to use the traditional syntax, > but I consider modern %-style pattern rules a better choice for two > reasons: > - The somewhat artificial SK.cc -> .hh rule would otherwise need a dummy > command. I wonder if it needs a dummy command anyway. Yup, sticking in a dummy command worked, without .NOTPARALLEL: . > - They are clearer, particularly in the face of suffixes not starting > with dots.) I agree completely. -Adam -- GPG fingerprint: D54D 1AEE B11C CE9B A02B C5DD 526F 01E8 564E E4B6 Engineering consulting with open source tools http://www.opennovation.com/
signature.asc
Description: This is a digitally signed message part