On Wed, Jan 13, 2016 at 10:13 PM, Amos Jeffries <squ...@treenet.co.nz> wrote: > On 14/01/2016 2:12 a.m., Kinkie wrote: >> >> About build dependencies from src/ : while refactoring some helpers I >> came across a recipe which seems reasonably clean and maintainable, >> and I submit it for consideration until a more structured approach >> (such as lifting helpers/ into src/) can be chosen: >> >> In each helper's Makefile.am, the following clauses must be added: >> >> IMPORTED_FILES = <list of files including paths relative to src/ to be >> imported into the helper's directory from src> >> nodist_<target>_SOURCES = $(IMPORTED_FILES) >> <target>_DEPENDENCIES = $(IMPORTED_FILES) >> CLEANFILES += $(IMPORTED_FILES) > > Okay on the above. "Nooooo..." on the below bit. > >> >> $(IMPORTED_FILES): $(top_srcdir)/src/$@ >> test -d $(dir $@)|| mkdir -p $(dir $@) >> cp $(top_srcdir)/src/$@ $@ >> > > ... doing it like that will make dozens of .am snippets of code that > have to be maintained in-sync forever. > > Like I said on IRC this part needs to be in a src/ImportedFiles.am that > gets included wherever its needed. Not copy-pasted everywhere. > See how we use doc/manuals/Substitute.am if you want an example.
My bad, I thought your suggestion was to factor out the whole recipe, and that wouldn't work. This snippet alone will. > All that the various Makefile.am should contain is the X=Y variable > definitions followed by a "include src/ImportedFiles.am" statement. > > > And for the love of all thats holy, avoid *_DEPENDENCIES variables. Won't work without, unfortunately. Without _DEPENDENCIES, the generated Makefile will copy the .cc files, but not the .h files. > When DEPENDENCIES is *absent*, automake will take the SOURCES list and > add dependency for each file listed, plus (compiler version dependent) a > sub-dependency recursively for each file #include'd by those. It will > also take the LDADD list and for all local tree objects will add a > dependency. It is smart enough to filter out flags and system libraries > nowdays (AFAICT that was the reason DEPENDENCIES was used to begin with > back in Y2K). > > When DEPENDENCIES is present only objects explicitly listed in that > variable are dependencies. *all* of the existing ones are broken and > breaking Squid builds. I hadn't understood htis, however I don't know how to force automake to copy the .h files without :( Any idea? >> <target> must be replaced with the executable's name. The need for >> this replacement unfortunately means that this recipe must be copied >> to each helper, and can't be factored out. > > The important part to factor away duplication of is: > >> $(IMPORTED_FILES): $(top_srcdir)/src/$@ >> test -d $(dir $@)|| mkdir -p $(dir $@) >> cp $(top_srcdir)/src/$@ $@ >> > > which does not contain the "target" bit. Agreed. Thanks! -- Francesco _______________________________________________ squid-dev mailing list squid-dev@lists.squid-cache.org http://lists.squid-cache.org/listinfo/squid-dev