On 02.02.2013 18:38, Matěj Týč wrote:
>> How about something like this?
>>
>>   bar_deps = foo1 foo2
>>
>>   bar: $(bar_deps)
>>
>>   $(bar_deps):
>>      $(MAKE) cache-foo
>>      touch $@
>>
>>   %:
>>      touch $@
> 
> I have also thought of that, but this can work well reliably only in the
> case if there is only one make job. If I specify -j4, it may happen that
> all jobs will attempt to load the same cache simultaneously, which I
> have to avoid :-(

If that happens how about replacing

  $(MAKE) cache-foo

by something like

  mkdir .lock 2>/dev/null || exit 0 ; \
      $(MAKE) cache-foo ; \
      ret=$$?; \
      rmdir .lock && exit $${ret}

The idea is:

 - mkdir can only succeed once

 - if "$(MAKE) cache-foo" fails

    1. the whole should return non-zero

    2. .lock is not left laying around

If that works for you conceptually, you could abstract a little more and
turn it into something re-usable like

  $(call synced_make,cache-foo)

Best,



Sebastian


_______________________________________________
Bug-make mailing list
Bug-make@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-make

Reply via email to