Make

Werbung
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
Herunterladen