From: ry53@rz.uni-karlsruhe.de (Angela Schmidt)
Subject: DMake: Probleme mit langen Zeilen 
Reply-To: Angela@rz.uni-karlsruhe.de
Organization: Nessyhoehle@I501.NessyNet.de	
Date: Fri, 14 Aug 1992 11:47:58 GMT

Seit einiger Zeit quaele ich mich mit DMake mit ueberlangen Zeilen herum.
Da ich mir nicht vorstellen kann, dass ich die einzige bin (hmm, _die_
vielleicht schon...), die solche Probleme hat, richte ich nun meine
Frage an alle:

Ich habe in meinem DMakeFile etwa folgende Zeilen:

CSRCS = a.c b.c ... [insgesamt 361 Zeichen bzw. 35 Filenamen lang]
COBJS = $(CSRCS:*.c:objects/%1.o)

(letztere Zeile ergibt: objects/a.o objects/b.o ...)

Da ich irgendwo saemtliche Objectfiles zusammenlinken muss und sich
dcc lautstark ueber eine zu lange Zeile beklagt, wenn ich ihm einfach
$(COBJS) uebergebe, muss ich irgendwie eine objfilelist zusammenbasteln,
die saemtliche *.o-Files durch ein LF getrennt enthaelt. Leider ist das
nicht so einfach wie es sich anhoert:

--- DMakeFile ---

test :
  echo >T:test "$(COBJS)"

-----------------

Ergibt eine etwa 650 Bytes lange Zeile und folgenden Output:
(und fuegt natuerlich auch die oben erwaehnten LFs _nicht_ ein)

echo: Command too long
echo failed returncode 10

Einem
  rx >T:test "say translate('$(COBJS)','A'x,' ');"
ergeht es leider auch nicht besser, obwohl diese Zeile mir zu meinen
LFs verhelfen wuerde.

Jetzt habe ich eine andere Loesung gefunden, die die objfilelist
zusammenbaut. Leider sind die Dependancies dann nicht mehr
vernuenftig, so dass die objfilelist _immer_ gebaut wird:

--- DMakeFile ---

all : objfilelist <und einige andere Sachen>

objfilelist : objdummy1 objdummy2

objdummy1 :
  @echo NOLINE "Making objfilelist ... "
  @echo >deleteme
  @delete >NIL: (objfilelist|deleteme)

objdummy2 : $(COBJS:*.*:%1.dummy)
  @echo "ok"

$(COBJS:*.*:%1.dummy) : nonexistantfile
  @echo >>objfilelist "%(left:*.dummy:%1.o)"

-----------------

$(COBJS:*.*:%1.dummy) ersetzt bei allen *.o-Files das ".o" durch
ein ".dummy". Aus "foo.o bar.o" wird also "foo.dummy bar.dummy".

Zum Erzeugen der objfilelist werden nacheinander die Eintraege zu
objdummy1 und objdummy2 angesprungen. Was bei objdummy1 passiert,
duerfte klar sein. objdummy2 versucht, alle *.dummy-Files der
rechten Seite zu erzeugen. Dazu springt er fuer jedes *.dummy-File
in die letzte Zeile des DMakeFile-Ausschnitts und haengt an die
objfilelist den entsprechenden *.o-Filenamen an.
( %(left:*.dummy:%1.o) ersetzt bei dem dummy-File, das gerade
_bearbeitet_ wird, also _nicht_ bei der ganzen Liste, das *.dummy
wieder durch ein *.o. Aus foo.dummy wird also wieder foo.o)
Das nonexistantfile wird benoetigt, da DMake sonst rummotzt, er
koenne keine 35:0 Dependancies.

Saemtliche *.dummy-Files existieren natuerlich _nicht_ (was will ich
mit 35 leeren Files --- und es werden ja schliesslich immer mehr...).

Hat vielleicht jemand die geniale Idee, wie man --- entweder mit einem
CLI-Command oder mit einem DMakeFile-Konstrukt --- solch eine
objfilelist erzeugen kann, das nur dann neu gemacht wird, wenn sich das
DMakeFile selber geaendert hat?

Bitte keine Antworten wie: "Nimm doch die objfilelist-Dependancie aus
Deinem 'all' und gib von Hand 'dmake objfilelist' ein."

Leider vermute ich, dass mein wunderschoener DMakeFile-Konstrukt
eine Sackgasse ist. :-( Die Idee, dass man die CSRCS-Zeile in
CSRCS<1> bis CSRCS<n> aufsplitten kann, um dann die einzelnen
Teile mit Hilfe von rx umzuwandeln und aneinanderzuhaengen, ist
mir selber schon gekommen, allerdings gefallen mir solche Kruecken
nicht. Wenn schon Kruecke, dann muss sie auch 'nen bisserl genial
sein. :-)

Knobler, auf an die Arbeit! :-)

Meine Konfiguration:
  DMake V2.0 Dec 19 1991
  OS 2.04
  WShell 2.0

     V v
  @/@@=\   Greetings,
    00 &=-          Angela 
oOoO_/` \\_
    \ /&\     Angela Schmidt (IRC: Nessy)           | Amiga //
  |>O<|       Internet: Angela@rz.uni-karlsruhe.de  | 1000 // 
   / \_/\/\/v_   Voice: +49 731 712316  (10am-9pm)  |  \\ // since 
  /____________\ (MET)  +49 721 6904263 (12am-11pm) |   \X/ 1986