¿Cómo puedo presentar un git SHA1 a gnu?

Recopilé versiones de software que incluyen el resultado de varios proyectos diferentes. Estos files propios se consideran un lanzamiento. El tarball liberado incluye una list de materiales (list de materiales) que detalla todos los proyectos y sus firmas asociadas SHA1 (git).

Para facilitar la recreación de estos files comprimidos, armé un sistema make que analiza el BOM línea por línea, clonando el repository en un subdirectory, revisando la versión especificada y luego realizando la compilation. Digamos que una línea en mi list de materiales tiene:

prog-a b5286f27d65ef20eb4508f76de5a1c57d8b21d85 git+ssh://[email protected]/~/prog-a 

el repository, si no se ha clonado ya, se colocará en repos/prog-a , luego se realiza un pago ( cd repos/prog-a; git checkout b5286f27d6 ) y finalmente un make ( make -C repos/prog-a ).

No he descubierto cómo dejar que gnu decida si la versión desprotegida del código ya ha creado el binary que necesito. Actualmente, cada subproyecto se ve obligado a pagar y rebuild.

¿Cómo puedo presentar un SHA1 de git repo a GNU make para que pueda decidir si el proyecto está desactualizado y necesita ser actualizado (mediante la ejecución de un git checkout )?

[EDITAR] Este es mi file de patrones:

 REPO_DIR=materials BOM=$(shell sed -r 's/([^ ]+).+/\1/' bom) BOM_DIR=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1_' bom) BOM_BLD=$(shell sed -r 's_([^ ]+).+_$(REPO_DIR)/\1/\1_' bom) .PHONY: clean dist-clean all: $(BOM) clean: @rm $(BOM) $(BOM_BLD) -rf dist-clean: clean @rm $(REPO_DIR) .SECONDEXPANSION: $(BOM): % : $(REPO_DIR)/$$*/$$* @echo " CP $< [email protected]" @cp $< [email protected] $(BOM_BLD): % : $$(*D) @echo " GIT CHECKOUT" @cd $<; git checkout -q $(shell sed -rn '/$(shell echo [email protected] | sed -r 's_.+/__')/ s/.+ (.+) .+ .+ .+/\1/p' bom) @echo " MAKE [email protected]" @make -w -C $< $(@F) $(BOM_DIR): | materials @echo " GIT CLONE [email protected]" @cd $(REPO_DIR); git clone $(shell sed -rn '/$(shell echo [email protected] | sed -r 's_.+/__')/ s/.+ (.+) .+ .+/\1/p' bom) materials: @echo " MKDIR [email protected]" @mkdir [email protected] 

Este sería mi patrón:

 TARGETS=prog-a prog-b prog-c all: $(TARGETS) prog-a: SHA1=123fa prog-b: SHA1=234ab prog-c: SHA1=345bc $(TARGETS): make -C "[email protected]" -e PARAM=$(SHA1) 

En su subdir makefile, imagine algo como esto:

 all: git checkout $(PARAM) -- ./ # ... other build rules 

asumiendo makefiles en los subdires; Por supuesto, puede hacer lo que quiera en la regla de hacer.

Para scripts de .SECONDEXPANSION aún más dynamics, al less eche un vistazo a .SECONDEXPANSION , .PHONY , .PRECIOUS

Terminé realizando un pago incondicional y solo llevé el hit a time si realmente tenía que manipular cosas en el directory de trabajo del elemento bom.