Das Shell-Script 'Make'. ======================== Ein Aufsatz zu RCS zum schnellen Erstellen von Patch-Dateien. Ziel ist es, eine Patch-Datei zu bekommen, die man zusammen mit dem original Source-Code verwenden kann. Patch-Dateien haben den Vorteil, dass der original Source-Code und alle Aenderungen sauber getrennt sind. Alle meine Patch-Dateien koennen via "patch" den Source-Code anpassen. Mein Shell-Script 'Make' hilft nur bei der Erstellung der Patch-Datei. Jede Patch-Datei sollte eine Datei namens "Makefile.Linux" erstellen. Dieses Makefile sollte die Targets "compile" und "install" kennen. Damit kann man dieses Makefile einfach aufrufen und muss nicht jedesmal erst schauen, ob ein "xmkmf", "configure" oder nur "make" aufgerufen werden muss. Angenommen, ich habe eine fertige Patch-Datei und den originalen Source-Code. Dann kann ich mit folgenden 3 Befehlen alles neu Kompilieren und Installieren: Make extract make-3.74 Make compile make-3.74 Make install make-3.74 Make extract make-3.74: Dies ruft "tar xzf make-3.74.tar.gz" auf. (Endung "tar.gz" ist also Pflicht.) Dieser Source-Code *muss* sich in ein Unterverzeichnis "make-3.74" auspacken. Dann wird die Patch-Datei von dem Shell-Script einmal nach allen Dateien durchgeschaut, die veraendert werden sollen. Diese Dateien werden dann mit RCS gesichert. Wenn eine Datei nicht existiert, kann sie auch nicht eingechecked werden. Deshalb muss vorher mit "touch" eine leere Datei erstellt werden. Make compile make-3.74: Ruft nur das Makefile.Linux mit dem target "compile" auf, mehr nicht. (make compile -C make-3.74 -f Makefile.Linux) Make install make-3.74: Ruft auch nur das Makefile.Linux auf, halt nur mit Target "install". Make diff make-3.74: Sollte Aufgerufen werden, wenn neue Aenderungen gemacht wurden. Alle gesicherten (eingecheckten) Dateien haben den unveraenderten Source-Code in "dateiname,v" gespeichert. (D.h. an den Dateinamen noch ein ",v" dranhaengen und dort alle alten Versionen speichern.) Mit "find" werden alle gesicherten Dateien festgestellt und dann wird mit "rcsdiff" eine Patch-Datei erstellt. Make remove make-3.74: Macht nur ein "rm -fr make-3.74". Ich verewnde das auch nie, sondern gebe lieber gleich den rm-Befehl ein. weitere Anmerkungen: Ein original Source-Datei, die abgeaendert werden soll, wird nur einmal mit "ci -l dateiname" eingecheckt. Alle weiteren Aenderungen werden dann nur noch an der ausgecheckten Datei vorgenommen. Ein haeufigeres Einchecken mit "ci" ist nicht noetig. Beispiel-Uebersetzung von einem neuen Paket: tar xzf hello-1.3.1.tar.gz # jo, geht ja immer so cd hello-1.3.1 # Wir stellen fest, dass wir "Makefile.in" und "include/conf.h" abaendern # muessen, um alles zu kompilieren: ci -l Makefile.in vi Makefile.in ci -l include/conf.h vi include/conf.h # Nachdem wir feststellen, dass ein "./configure --prefix=/usr" und ein # "make CFLAGS=-O17" alles kompilieren und ein "make install" alles # installiert, machen wir dann unser "Makefile.Linux": touch Makefile.Linux ci -l Makefile.Linux vi Makefile.Linux ------------------------- snip Makefile.Linux ------------------------Makefile: Makefile.in ./configure --prefix=/usr compile: Makefile make CFLAGS="-O17" install: make install -----------------------------------------------------------------------# So, wir habe jetzt alles kompiliert und ueberpruefen das ganze nochmal: cd .. Make diff hello-1.3 less hello-1.3.dif # Ist auch alles drinn? rm -fr hello-1.3 Make extract hello-1.3 Make compile hello-1.3 su Make install hello-1.3 rm -fr hello-1.3 Zum Einpacken von Uebersetzten Programmen habe ich ein Perl-Script namens "PkgTool". Bitte einfach den Anfang lesen und mal ausprobieren. Vorsicht: Patch zum GNU "cp"-Befehl ist notwendig. (Jaja, nichteinmal der cp-Befehl ist vor bugs sicher...) Diese Methode sollte kaum Zeit beim Kompilieren/Installieren/Testen verbrauchen. Man kann trotzdem alle Aenderungen mitprotokollieren und muss sie garantiert nicht neu machen. (Und wenn es nur Anpassungen an CFLAGS/LDFLAGS sind.) (Wichtigere Sachen werden damit auch nicht vergessen.) Falls noch jemand Verbesserungsvorschlaege hat... Ich bin immer offen... (Ein besserer Name fuer das Script?) Bitte einfach mal ca. 10 .dif-Dateien von mir lesen und dann loslegen... (Oder einfach mal die ersten Programme aus meinem Source-Tree nehmen und neu uebersetzen.) Diese Beschreibung und alle Shell-Scripte sollte auch heute noch im Source-Tree von mir landen. (PkgTool habe ich gerade ueberarbeitet, das muss ich noch kopieren...) Florian La Roche