m4 ist ein Makropräprozessor. Er erinnert etwas um den bekanteren C Präprozessor CPP, ist aber in Unterschied zu CPP als stand-alone Makropräprozessor konzipiert, und ist deutlich mehr kraftvoll.
Die zwei "Zwillingfiles" busybox.config und busybox.config-flash wird durch diese eines ersetzt. Besser ausgedruckt: die Konfigurationsfiles für yadd und flash werden bei bedarf vom *.m4-File erzeugt, durch ein Aufruf wie
Darch muss mann nur eine Datei unterhalten. Stichwort: "single-sourcing": Information die gleich, oder in Wesentlichen gleich, muss nur einmal gepflegt werden. Es wird leichter zu sehen, wo sich die yadd- und die Flashconfiguration sich unterscheidet. Insbesonders wird es einfacher, in der zukunft änderungen durchzuführen, die beide betroffen. In der Vergangenheit ist es oft passiert, dass Änderungen nur in ein von den zwei Files einfliessen. Mann fragt sich warum? Ist es weil die Änderrung nur ein Fall betreffen? Oder ist es weil der Einchecker sich nur für ein Fall intressiert, und der andere Fall einfach ihm egal ist? Fast immer bleibt diese Frage unbeantwortet.
Diese Technik ist in newmake seit längeren Zeit benutzt worden.
m4 ist in Detail
hier beschrieben. However, kaum jemanden muss es lesen, insbesonders nicht um busybox zu kompilieren, oder einfachere Änderungen im Konfiguration durchführen.
option ist ein Makro, am Anfang der Datei definiert. Wie schon geraten,
option(`xxxxxx', `y', `n') bedeutet dass xxxxxx den wert y in YADD und n in Flash bekommt.
ifdef ist in m4 eingebaut (siehe Handbuch). Ähnlich wie CPP ifdef, siehe Handbuch.