Presentation is loading. Please wait.

Presentation is loading. Please wait.

Patterns Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See

Similar presentations


Presentation on theme: "Patterns Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See"— Presentation transcript:

1 Patterns Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http://software-carpentry.org/license.html for more information. Automated Builds

2 Patterns Manage tasks and dependencies

3 Automated BuildsPatterns figure-1.svg summary-1.dat Manage tasks and dependencies figure-2.svg data-1-1.datdata-1-3.datdata-1-2.dat paper.pdf paper.wdp

4 Automated BuildsPatterns figure-1.svg summary-1.dat Manage tasks and dependencies figure-2.svg data-1-1.datdata-1-3.datdata-1-2.dat paper.pdf paper.wdp stats.py stats.py summary-1.dat data-1-*.dat

5 Automated BuildsPatterns figure-1.svg summary-1.dat Manage tasks and dependencies figure-2.svg data-1-1.datdata-1-3.datdata-1-2.dat paper.pdf paper.wdp stats.py stats.py summary-1.dat data-1-*.dat ?

6 Automated BuildsPatterns figure-1.svg summary-1.dat Manage tasks and dependencies figure-2.svg data-1-1.datdata-1-3.datdata-1-2.dat paper.pdf paper.wdp stats.py stats.py summary-1.dat data-1-*.dat ?

7 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # multiple.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat

8 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat

9 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat

10 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat

11 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat Automatic variable

12 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat Automatic variable "the target of this rule"

13 Automated BuildsPatterns summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py summary-1.dat data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat Automatic variable "the target of this rule" No, there isn't a more readable form

14 Automated BuildsPatterns # target-variable.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat Still a lot of redundancy summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

15 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

16 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

17 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ All prerequisites of this rule summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

18 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ All prerequisites of this rule $< is "the first prerequisite" summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

19 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ All prerequisites of this rule $< is "the first prerequisite" $? is "all out-of-date prerequisites" summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

20 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3

21 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-2.dat 1 3 Expect more data files

22 Automated BuildsPatterns # variables.mk summary-1.dat : data-1-1.dat data-1-2.dat data-1-3.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-*.dat Want to do this

23 Automated BuildsPatterns # wildcard.mk summary-1.dat : data-1-*.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-*.dat

24 Automated BuildsPatterns # wildcard.mk summary-1.dat : data-1-*.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-*.dat Just like shell wildcard

25 Automated BuildsPatterns # wildcard.mk summary-1.dat : data-1-*.dat stats.py $@ $^ summary-1.dat data-1-1.datdata-1-3.datdata-1-2.dat stats.py summary-1.dat data-1-*.dat Just like shell wildcard Must use $^ in action, since filenames not fixed in advance

26 Automated BuildsPatterns figure-1.svg summary-1.dat figure-2.svg data-1-1.datdata-1-3.datdata-1-2.dat paper.pdf paper.wdp wdp2pdf paper.wdp stats.py sgr -N -r summary-1.dat \ > figure-1.svg stats.py summary-1.dat data-1-*.dat The whole tree one more time

27 Automated BuildsPatterns The makefile so far paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^

28 Automated BuildsPatterns Still some redundancy paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ The makefile so far

29 Automated BuildsPatterns Still some redundancy Fix in next episode paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ The makefile so far

30 Automated BuildsPatterns Still some redundancy Fix in next episode paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ Doesn't handle summaries' dependency on stats.py The makefile so far

31 Automated BuildsPatterns paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : stats.py data-1-*.dat stats.py $@ $^ summary-2.dat : stats.py data-2-*.dat stats.py $@ $^ Option 1: add to existing rules

32 Automated BuildsPatterns ⋮ summary-1.dat : stats.py data-1-*.dat stats.py $@ $^ summary-2.dat : stats.py data-2-*.dat stats.py $@ $^ ⋮ Option 1: add to existing rules $^ is now stats.py data-1-1.dat data-1-1.dat...

33 Automated BuildsPatterns ⋮ summary-1.dat : stats.py data-1-*.dat stats.py $@ $^ summary-2.dat : stats.py data-2-*.dat stats.py $@ $^ ⋮ $^ is now stats.py data-1-1.dat data-1-1.dat... So the invocation of stats.py is wrong Option 1: add to existing rules

34 Automated BuildsPatterns ⋮ summary-1.dat : stats.py data-1-*.dat stats.py $@ $^ summary-2.dat : stats.py data-2-*.dat stats.py $@ $^ ⋮ $^ is now stats.py data-1-1.dat data-1-1.dat... So the invocation of stats.py is wrong Having it ignore one argument is an ugly hack Option 1: add to existing rules

35 Automated BuildsPatterns figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ data-1-1.dat : stats.py touch $@ data-1-2.dat : stats.py touch $@ Option 2: make data files depend on stats.py

36 Automated BuildsPatterns ⋮ data-1-1.dat : stats.py touch $@ data-1-2.dat : stats.py touch $@ ⋮ Option 2: make data files depend on stats.py A false dependency

37 Automated BuildsPatterns Option 2: make data files depend on stats.py ⋮ data-1-1.dat : stats.py touch $@ data-1-2.dat : stats.py touch $@ ⋮ A false dependency Updating raw data files triggers update of summary

38 Automated BuildsPatterns Option 2: make data files depend on stats.py ⋮ data-1-1.dat : stats.py touch $@ data-1-2.dat : stats.py touch $@ ⋮ A false dependency Updating raw data files triggers update of summary Back to listing all raw data files explicitly…

39 Automated BuildsPatterns paper.pdf : paper.wdp figure-1.svg figure-2.svg wdp2pdf $< figure-1.svg : summary-1.dat sgr -N -r $@ $^ figure-2.svg : summary-2.dat sgr -N -r $@ $^ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ summary-1.dat : stats.py summary-2.dat : stats.py Option 3: add additional dependencies

40 Automated BuildsPatterns ⋮ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ summary-1.dat : stats.py summary-2.dat : stats.py ⋮ Option 3: add additional dependencies Full set of dependencies is union of lists

41 Automated BuildsPatterns ⋮ summary-1.dat : data-1-*.dat stats.py $@ $^ summary-2.dat : data-2-*.dat stats.py $@ $^ summary-1.dat : stats.py summary-2.dat : stats.py ⋮ Option 3: add additional dependencies Full set of dependencies is union of lists But $^ in the action is still just data-1-*.dat

42 August 2010 created by Greg Wilson Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See http://software-carpentry.org/license.html for more information.


Download ppt "Patterns Copyright © Software Carpentry 2010 This work is licensed under the Creative Commons Attribution License See"

Similar presentations


Ads by Google