[...] > I really-really didn't like this alternating dependency on directory > or a set of file, depending on current state of those temporary > directories. Then also this ugly check to avoid circular dependency. > All that seemed wrong. So I played a bit with how to achieve the same > differently, and here's what I came up with, which I like a bit > better. What do you think? > > $(BPFOBJ): $(wildcard $(BPFDIR)/*.c $(BPFDIR)/*.h $(BPFDIR)/Makefile) \ > ../../../include/uapi/linux/bpf.h \ > | $(INCLUDE_DIR) $(BUILD_DIR)/libbpf > $(Q)$(MAKE) $(submake_extras) -C $(BPFDIR) OUTPUT=$(BUILD_DIR)/libbpf/ \ > DESTDIR=$(SCRATCH_DIR) prefix= all install_headers > > So, essentially, just make sure that we install local copies of > headers whenever libbpf.a needs to be re-built. > ../../../include/uapi/linux/bpf.h ensures we don't miss uapi header > changes as well. Now anything that uses libbpf headers will need to > depend on $(BPFOBJ) and will automatically get up-to-date local copies > of headers. > > This seems much simpler. Please give it a try, thanks! Yes, this is a good idea! It did actually occur to me that the $(BPFOBJ) rule could just include the install_headers make arg, but only after I sent out this latest version. Thank you for taking the time to work out the details, I'll fold this in :) -Toke