I need a dependency in a Makefile that fires if a URL has been updated since the file that depends on it. The situation is a bit complicated:
- URL 1 points to a download page. I want the rule to be dependent upon the last modified date of this page.
- The page contents of URL 1 have an embedded URL pointing to the actual file I want to download (call that URL 2).
I've written a Python script (lastmod) that will create (by calling "touch") a file with the same modification date as a URL. So the
Makefile now looks something like this:
output_file: .input_url source_file wc -l source_file > $@ source_file: .input_url wget -q -O $@ --no-use-server-timestamps `cat .input_url` .input_url: .input_modified wget -q -O - $(DOWNLOAD_URL) | \ sed -n '1,/current version/d;\ /Previous versions/,$$d; s/.*href="\\([^"]*\\):,*/\\1/p' > $@ lastmod -t $@ $(DOWNLOAD_URL) .input_modified: FORCE lastmod -t $@ $(DOWNLOAD_URL) FORCE:
where DOWNLOAD_URL is set to the download page. The gist is that I want .input_url to be generated only if the download page has been modified since it was created. To do that, I need to always regenerate .input_modified, but have .input_url generated only if the (newly generated) .input_modified has a later mod time. I'm not seeing how to separate the notions of "run this rule" from "tell things that depend on this rule to run". If I leave out "FORCE", then the rule for .input_modified doesn't run. If I put it in, it always runs, but so does the rule for .input_url. Is there any way to accomplish what I'm after?