]> git.sur5r.net Git - cc65/commitdiff
Removed shell for-loop.
authorOliver Schmidt <ol.sc@web.de>
Wed, 1 Jun 2016 21:45:27 +0000 (23:45 +0200)
committerOliver Schmidt <ol.sc@web.de>
Wed, 1 Jun 2016 21:47:02 +0000 (23:47 +0200)
Just a few of the many reasons why shell for-loops have no place in (GNUmake) Makefiles:
* They don't conform to https://www.gnu.org/software/make/manual/html_node/Utilities-in-Makefiles.html
* They break Windows builds for sure
* They don't fit to make's approach of working with sets
* They break make parallelism

samples/Makefile

index fa37770002d9b7e302b29914632d9e217ef35de1..5a75c7f4b05ebb2168d5e3f1e41f2417d593fc14 100644 (file)
@@ -35,8 +35,8 @@ ifdef CC65_HOME
 installdir = $(CC65_HOME)
 endif
 
-MOUS = $(installdir)/target/$(SYS)/drv/mou/$(SYS)*.mou
-TGI  = $(installdir)/target/$(SYS)/drv/tgi/$(SYS)*.tgi
+MOUS := $(wildcard $(installdir)/target/$(SYS)/drv/mou/$(SYS)*.mou)
+TGI  := $(wildcard $(installdir)/target/$(SYS)/drv/tgi/$(SYS)*.tgi)
 CLIB = --lib $(SYS).lib
 CL   = cl65
 CC   = cc65
@@ -46,8 +46,8 @@ LD   = ld65
 else
 # "samples/" is a part of a complete source tree.
 export CC65_HOME := $(abspath ..)
-MOUS = ../target/$(SYS)/drv/mou/$(SYS)*.mou
-TGI  = ../target/$(SYS)/drv/tgi/$(SYS)*.tgi
+MOUS := $(wildcard ../target/$(SYS)/drv/mou/$(SYS)*.mou)
+TGI  := $(wildcard ../target/$(SYS)/drv/tgi/$(SYS)*.tgi)
 CLIB = ../lib/$(SYS).lib
 CL   = ../bin/cl65
 CC   = ../bin/cc65
@@ -140,14 +140,16 @@ ovrldemo: overlaydemo.o
 
 d64: samples.d64
 
+define D64_WRITE_recipe
+
+$(C1541) -attach $@ -write $(file) $(notdir $(file)) >$(NULLDEV)
+
+endef # D64_WRITE_recipe
+
 samples.d64: samples
        @$(C1541) -format samples,AA  d64 $@ >$(NULLDEV)
-       @for exe in $(EXELIST); do\
-           $(C1541) -attach $@ -write $$exe >$(NULLDEV) || exit $$?;\
-       done
-       @for mod in $(TGI) $(MOUS); do\
-           $(C1541) -attach $@ -write $$mod >$(NULLDEV) || exit $$?;\
-       done
+       $(foreach file,$(EXELIST),$(D64_WRITE_recipe))
+       $(foreach file,$(TGI) $(MOUS),$(D64_WRITE_recipe))
 
 # --------------------------------------------------------------------------
 # Installation rules