# Die Distributionsdateien

Das FreeBSD Porter-Handbuch
Zurück | Kapitel 5. Die Konfiguration des Makefile | Weiter

# 5.4. Die Distributionsdateien

Der zweite Teil des `Makefile` beschreibt die Dateien, welche heruntergeladen werden müssen, um den Port zu bauen und wo diese Dateien zu finden sind.

## 5.4.1. `DISTVERSION/DISTNAME`

`DISTNAME` ist der Name der Applikation wie er von den Autoren vergeben wurde. `DISTNAME` hat als Vorgabe `${PORTNAME}-${PORTVERSION}` also überschreiben Sie diese Vorgabe nur, wenn es notwendig ist. `DISTNAME` wird nur an zwei Stellen genutzt. Erstens: (`DISTFILES`) hat als Vorgabe `${DISTNAME}``${EXTRACT_SUFX}`. Zweitens: Die Distributionsdatei soll in einem Unterverzeichnis namens `WRKSRC` extrahiert werden, dessen Vorgabe `work/`${DISTNAME}`` ist.

Manche Drittanbieter-Namen, welche nicht in das Schema `${PORTNAME}-${PORTVERSION}` passen, können durch Setzen von `DISTVERSION` automatisch behandelt werden. `PORTVERSION` und `DISTNAME` werden automatisch abgeleitet, können aber natürlich manuell überschrieben werden. Die folgende Tabelle führt einige Beispiele auf:

`DISTVERSION` | `PORTVERSION`
--- | ---
0.7.1d | 0.7.1.d
10Alpha3 | 10.a3
3Beta7-pre2 | 3.b7.p2
8:f_17 | 8f.17

> Anmerkung: `PKGNAMEPREFIX` und `PKGNAMESUFFIX` beeinflussen `DISTNAME` nicht. Beachten Sie bitte auch, dass Sie `DISTNAME` unverändert lassen sollten, falls `WRKSRC` denselben Wert hat wie `work/`${PORTNAME}-${PORTVERSION}`` und gleichzeitig dass Archiv des originalen Quelltextes anders benannt ist als `${PORTNAME}-${PORTVERSION}${EXTRACT_SUFX}`. Es ist einfacher `DISTFILES` zu definieren, als `DISTNAME` und `WRKSRC` (und möglicherweise `EXTRACT_SUFX`) zu setzen.

## 5.4.2. `MASTER_SITES`

Dokumentieren Sie das Verzeichnis der FTP/HTTP-URL, welche auf den originalen Tarball zeigt, in der Variable `MASTER_SITES`. Bitte vergessen Sie niemals den Schrägstrich (`/`) am Ende!

Die `make`-Makros werden versuchen, diese Festlegung für die Aufbereitung der Distributionsdateien mittels `FETCH` zu benutzen, falls sie diese nicht schon auf dem System finden.

Es wird empfohlen, mehrere Webseiten in dieser Liste aufzuführen, vorzugsweise auf verschiedenen Kontinenten. Dies ist ein Schutz gegen Probleme bei größeren Ausfällen im Internet. Wir planen sogar Unterstützung einzubauen, die automatisch einen Server in der Nähe zum Herunterladen bestimmt. Die Verfügbarkeit von vielen Webseiten wird dieses Vorhaben beträchtlich erleichtern.

Falls der originale Tarball Teil eines populären Archivs ist, wie SourceForge, GNU oder Perl CPAN, können Sie möglicherweise auf diese Seiten in einer einfachen und kompakten Form mittels `MASTER_SITE_`*`` (d.h., `MASTER_SITE_SOURCEFORGE`,, `MASTER_SITE_GNU` und `MASTER_SITE_PERL_CPAN`) referenzieren. Setzen Sie einfach `MASTER_SITES` auf eine dieser Variablen und `MASTER_SITE_SUBDIR` auf den Pfad innerhalb des Archivs. Hier ist ein Beispiel:

    MASTER_SITES=         ${MASTER_SITE_GNU}
    MASTER_SITE_SUBDIR=   make

Oder verwenden Sie ein kondensiertes Format:

    MASTER_SITES=   GNU/make

Diese Variablen werden in `/usr/ports/Mk/bsd.sites.mk` definiert. Es werden ständig neue Einträge hinzugefügt, daher stellen Sie bitte unbedingt sicher, dass Sie die neueste Version verwenden, bevor Sie einen Port einschicken.

Für beliebte Seiten existieren sogenannte magic-Makros, die eine bestimmte Verzeichnisstruktur erstellen. Um eines dieser Makros zu verwenden, geben Sie dessen Abkürzung an und Ihr System wird versuchen, das korrekte Unterverzeichnis automatisch zu bestimmen.

    MASTER_SITES=	SF

Ist das Ergebnis nicht korrekt, können Sie diesen Wert auch überschreiben.

    MASTER_SITES=	SF/stardict/WyabdcRealPeopleTTS/${PORTVERSION}

Tabelle 5-1. Beliebte magic `MASTER_SITES`-Makros

Makro | Erwartetes Unterverzeichnis
--- | ---
`APACHE_JAKARTA` | `/dist/jakarta/${PORTNAME:S,-,,/,}/source`
`BERLIOS` | `/${PORTNAME:L}`
`CHEESESHOP` | `/packages/source/source/${DISTNAME:C/(.).*/\1/}/${DISTNAME:C/(.*)-[0-9].*/\1/}`
`DEBIAN` | `/debian/pool/main/${PORTNAME:C/^((lib)?.).*$/\1/}/${PORTNAME}`
`GCC` | `/pub/gcc/releases/${DISTNAME}`
`GNOME` | `/pub/GNOME/sources/${PORTNAME}/${PORTVERSION:C/^([0-9]+\.[0-9]+).*/\1/}`
`GNU` | `/gnu/${PORTNAME}`
`MOZDEV` | `/pub/mozdev/${PORTNAME:L}`
`PERL_CPAN` | `/pub/CPAN/modules/by-module/${PORTNAME:C/-.*//}`
`PYTHON` | `/ftp/python/${PYTHON_PORTVERSION:C/rc[0-9]//}`
`RUBYFORGE` | `/${PORTNAME:L}`
`SAVANNAH` | `/${PORTNAME:L}`
`SF` | `/project/${PORTNAME:L}/${PORTNAME:L}/${PORTVERSION}`

## 5.4.3. `EXTRACT_SUFX`

Falls Sie eine Distributionsdatei haben, die ein eigentümliches Suffix nutzt, um die Art der Kompression anzuzeigen, dann setzen Sie `EXTRACT_SUFX`.

Ist die Distributionsdatei zum Beispiel im Stil von `foo.tgz` anstatt des normalen `foo.tar.gz` benannt, würden Sie schreiben:

    DISTNAME=      foo
    EXTRACT_SUFX=  .tgz

Falls erforderlich, setzen die Variablen `USE_BZIP2` und `USE_ZIP` automatisch `EXTRACT_SUFX` auf `.tar.bz2` oder `.zip`. Falls keine der beiden gesetzt ist, dann verwendet `EXTRACT_SUFX` die Vorgabe `.tar.gz`.

> Anmerkung: Sie müssen niemals beide Variablen `EXTRACT_SUFX` und `DISTFILES` setzen.

## 5.4.4. `DISTFILES`

Manchmal haben die zu ladenden Dateien keinerlei Ähnlichkeit mit dem Namen des Ports. Es könnte z.B. `source.tar.gz` oder ähnlich heißen. In anderen Fällen könnte der Quelltext in mehreren Archiven sein und alle müssen heruntergeladen werden.

Falls dies der Fall ist, setzen Sie `DISTFILES` als eine durch Leerzeichen getrennte Liste aller Dateien, die geladen werden müssen.

    DISTFILES=     source1.tar.gz source2.tar.gz

Wenn nicht ausdrücklich gesetzt, verwendet `DISTFILES` als Vorgabe `${DISTNAME}${EXTRACT_SUFX}`.

## 5.4.5. `EXTRACT_ONLY`

Falls nur einige der `DISTFILES` extrahiert werden müssen (z.B. eine Datei ist der Quelltext und eine andere ist ein unkomprimiertes Dokument), dann listen Sie die zu extrahierenden Dateien in `EXTRACT_ONLY` auf.

    DISTFILES=     source.tar.gz manual.html
    EXTRACT_ONLY=  source.tar.gz

Falls keine der `DISTFILES` unkomprimiert sein sollte, dann setzen Sie `EXTRACT_ONLY` auf einen leeren String.

    EXTRACT_ONLY=

## 5.4.6. `PATCHFILES`

Falls Ihr Port zusätzliche Patches benötigt, welche per FTP oder HTTP verfügbar sind, dann setzen Sie `PATCHFILES` auf den Namen der Dateien und `PATCH_SITES` auf die URL des Verzeichnisses, das diese Patches enthält (das Format ist das gleiche wie `MASTER_SITES`).

Falls ein Patch wegen einiger zusätzlicher Pfadnamen nicht relativ zum Anfang des Quelltextbaumes (d.h., `WRKSRC`) liegt, dann setzen Sie bitte `PATCH_DIST_STRIP` entsprechend. Wenn z.B. alle Pfadnamen in diesem Patch ein zusätzliches `foozolix-1.0/` vor ihren Dateinamen aufweisen, dann setzen Sie bitte `PATCH_DIST_STRIP=-p1`.

Kümmern Sie sich nicht darum, ob die Patches komprimiert sind. Sie werden automatisch dekomprimiert, wenn die Dateinamen auf `.gz` oder `.Z` enden.

Falls der Patch zusammen mit anderen Dateien in einem gezippten Tarball verteilt wird (z.B. mit Dokumentation), dann können Sie nicht `PATCHFILES` verwenden. In diesem Fall fügen Sie den Namen und den Ort dieses Tarballs zu `DISTFILES` und `MASTER_SITES`. Benutzen Sie dann die `EXTRA_PATCHES`-Variable, um auf diese Dateien zu zeigen und `bsd.port.mk` wird automatisch diese Dateien nutzen. Kopieren Sie niemals Patch-Dateien in das `PATCHDIR`-Verzeichnis, weil es möglicherweise nicht beschreibbar ist.

> Anmerkung: Der Tarball wird zusammen mit dem anderen Quelltext extrahiert werden. Eine ausdrückliche Dekomprimierung eines mit gzip oder compress erzeugten Tarball ist nicht notwendig. Sollten Sie dies dennoch vorgeben, so beachten Sie bitte peinlich genau, dass Sie nichts überschreiben, was bereits im Verzeichnis vorhanden ist. Vergessen Sie auch nicht den kopierten Patch im Target von `pre-clean` zu entfernen.

## 5.4.7. Verschiedene Distributionsdateien oder Patches von verschiedenen Seiten und Verzeichnissen (`MASTER_SITES:n`)

(Betrachten Sie es als in irgendeiner Form ``fortgeschrittenes Thema''. Neulinge sollten möglicherweise diesen Abschnitt beim ersten Lesen überspringen).

Dieser Abschnitt stellt Informationen über die Mechanismen zum Herunterladen von Dateien zur Verfügung und behandelt die Variablen `MASTER_SITES:n` und `MASTER_SITES_NN`. Wir beziehen uns im weiteren Text auf diese Variablen als `MASTER_SITES:n`.

Etwas Hintergrundinformation zu Beginn: OpenBSD verfügt über eine sehr elegante Option innerhalb der Variablen `DISTFILES` und `PATCHFILES`. Sowohl Dateien als auch Patches können mit angehängten `:n`-Bezeichnern versehen werden wobei `n` in beiden Fällen `[0-9]` sein kann und eine Gruppenzugehörigkeit anzeigt. Ein Beispiel hierfür ist:

    DISTFILES=      alpha:0 beta:1

In OpenBSD wird die Datei `alpha` mit der Variable `MASTER_SITES0` verknüpft anstatt dem in FreeBSD gebräuchlichen `MASTER_SITES` und `beta` mit `MASTER_SITES1`.

Das ist eine sehr interessante Möglichkeit, die endlose Suche nach der richtigen Download-Seite zu verkürzen.

Stellen Sie sich zwei Dateien in `DISTFILES` und 20 Webseiten in der Variable `MASTER_SITES` vor. Alle Seiten sind erschreckend langsam, `beta` findet sich auf allen Seiten in `MASTER_SITES` und `alpha` kann nur auf der zwanzigsten Seite gefunden werden. Wäre es nicht reine Verschwendung, wenn der Maintainer alle Seiten zuvor überprüfen müsste? Kein guter Start für das wundervolle Wochenende!

Übertragen Sie diesen Umstand auf noch mehr `DISTFILES` und mehr `MASTER_SITES`. Ganz sicher würde unser ``distfiles survey master'' die Erleichterung sehr zu schätzen wissen, die eine solche Verringerung der Netzwerkbelastung bringen würde.

In den nächsten Abschnitten sehen Sie die Implementierung dieser Idee durch FreeBSD. Dabei wurde das Konzept von OpenBSD ein wenig verbessert.

### 5.4.7.1. Prinzipielle Information

Dieser Abschnitt informiert Sie, wie Sie schnell ein fein granuliertes Herunterladen von vielen Dateien und Fehlerbereinigungen von verschiedenen Webseiten und Unterverzeichnissen bewerkstelligen. Wir beschreiben hier den Fall der vereinfachten Nutzung von `MASTER_SITES:n`. Das ist für die meisten Szenarien ausreichend. Falls Sie weitere Informationen benötigen, sollten Sie den nächsten Abschnitt lesen.

Einige Programme bestehen aus mehreren Dateien, welche von verschiedenen Webseiten heruntergeladen werden müssen. Zum Beispiel besteht Ghostscript aus dem Kern des Programms und einer großen Zahl von Treiberdateien, die vom Drucker des Benutzers abhängen. Einige dieser Treiberdateien werden mit der Kernapplikation mitgeliefert aber viele müssen von verschiedenen Webseiten heruntergeladen werden.

Um das zu unterstützen, muss jeder Eintrag in `DISTFILES` mit einem Komma und einem ``tag name'' abgeschlossen werden. Jeder in `MASTER_SITES` aufgeführte Webseite folgt ein Komma und eine Marke (tag), die anzeigt, welche Datei von dieser Webseite heruntergeladen werden kann.

Stellen Sie sich bitte eine Applikation vor, deren Quelltext in zwei Teile aufgeteilt ist, `source1.tar.gz` und `source2.tar.gz`, welche von zwei verschiedenen Webseiten heruntergeladen werden müssen. Das `Makefile` des Port würde Zeilen enthalten wie in Beispiel 5-1.

Beispiel 5-1. Vereinfachtes Beispiel für den Gebrauch von `MASTER_SITES:n` mit einer Datei pro Webseite

    MASTER_SITES=   ftp://ftp.example1.com/:source1 \
    	ftp://ftp.example2.com/:source2
    DISTFILES=      source1.tar.gz:source1 \
    	source2.tar.gz:source2

Verschiedene Dateien können die gleiche Marke aufweisen. Ausgehend vom vorherigen Beispiel nehmen wir an, dass es noch eine dritte Datei gibt (`source3.tar.gz`), welche von `ftp.example2.com` heruntergeladen werden soll. Das `Makefile` würde dann aussehen wie Beispiel 5-2.

Beispiel 5-2. Vereinfachtes Beispiel für den Gebrauch von `MASTER_SITES:n` mit mehr als einer Datei pro Webseite

    MASTER_SITES=   ftp://ftp.example1.com/:source1 \
    	ftp://ftp.example2.com/:source2
    DISTFILES=      source1.tar.gz:source1 \
    	source2.tar.gz:source2 \
    	source3.tar.gz:source2

### 5.4.7.2. Ausführliche Information

In Ordnung, das vorherige Beispiel reicht nicht für Ihre Bedürfnisse? In diesem Abschnitt werden wir im Detail erklären, wie der fein granulierte Mechanismus zum Herunterladen (`MASTER_SITES:n`) funktioniert und wie Sie Ihre Ports modifizieren, um ihn zu nutzen.

1. Elemente können nachstehend bezeichnet werden mit `:`n`` wobei `n` in diesem Falle `[^:,]+` ist. Das heißt `n` könnte theoretisch jede alphanumerische Zeichenkette sein, aber wir beschränken sie auf `[a-zA-Z_][0-9a-zA-Z_]+` für diesen Moment.

   Zudem ist die Zeichenkette case sensitive; d.h. `n` unterscheidet sich von `N`.

   Allerdings dürfen die folgenden Wörter nicht gebraucht werden, da sie spezielle Bedeutungen haben: `default`, `all` und `ALL` (diese Wörter werden intern genutzt in Punkt ii). Ausserdem ist `DEFAULT` ein reserviertes Wort (beachten Sie 3).

2. Elemente mit angehängtem `:n` gehören zur Gruppe `n`, `:m` gehört zur Gruppe `m` und so weiter.

3. Elemente ohne Anhängsel sind gruppenlos, d.h. sie gehören alle zu der speziellen Gruppe `DEFAULT`. Falls sie an irgendeinem Element `DEFAULT` hängen, ist dies überflüssig, es sei denn Sie wollen, dass ein Element sowohl zu `DEFAULT` als auch anderen Gruppen gleichzeitig gehört (beachten Sie 5).

   Die folgenden Beispiele sind gleichwertig, aber das erste Beispiel ist vorzuziehen:

       MASTER_SITES=   alpha

       MASTER_SITES=   alpha:DEFAULT

4. Gruppen sind nicht ausschliessend, d.h. ein Element kann mehreren Gruppen gleichzeitig angehören und eine Gruppe wiederum kann entweder mehrere Elemente oder überhaupt keine aufweisen. Wiederholte Elemente sind schlicht nur wiederholte Elemente.

5. Wenn Sie wollen, dass ein Element gleichzeitig zu mehreren Gruppen gehört, dann können Sie diese durch ein Komma (`,`) trennen.

   Anstatt jedes Mal ein anderes Anhängsel zu verwenden und Wiederholungen aufzuführen, können Sie mehrere Gruppen auf einmal in einem einzigen Anhängsel bestimmen. Zum Beispiel markiert `:m,n,o` ein Element, welches zu den Gruppen `m`, `n` und `o` gehört.

   Alle folgenden Beispiele sind gleichwertig, aber das erste Beispiel ist vorzuziehen:

       MASTER_SITES=   alpha alpha:SOME_SITE

       MASTER_SITES=   alpha:DEFAULT alpha:SOME_SITE

       MASTER_SITES=   alpha:SOME_SITE,DEFAULT

       MASTER_SITES=   alpha:DEFAULT,SOME_SITE

6. Alle Webseiten in einer Gruppe werden gemäß `MASTER_SORT_AWK` sortiert. Alle Gruppen innerhalb von `MASTER_SITES` und `PATCH_SITES` werden genauso sortiert.

7. Gruppensemantik kann benutzt werden in den folgenden Variablen: `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR`, `PATCH_SITE_SUBDIR`, `DISTFILES` und `PATCHFILES` entsprechend der folgenden Syntax:

   1. Elemente mit `MASTER_SITES`, `PATCH_SITES`, `MASTER_SITE_SUBDIR` und `PATCH_SITE_SUBDIR` müssen mit einem Schrägstrich beendet werden ( `/`). Falls Elemente zu irgendwelchen Gruppen gehören, muss `:`n`` direkt nach dem Trenner `/` stehen. Der `MASTER_SITES:n`-Mechanismus verlässt sich auf das Vorhandensein des Trennzeichens `/`, um verwirrende Elemente zu vermeiden in denen `:n` ein zulässiger Bestandteil des Elementes ist und das Auftreten von `:n` die Gruppe `n` anzeigt. Aus Kompatibilitätsgründen (da der `/`-Trenner sowohl in `MASTER_SITE_SUBDIR` als auch `PATCH_SITE_SUBDIR`-Elementen nicht erforderlich ist) wird, falls das auf das Anhängsel folgende nächste Zeichen kein `/` ist, auch `:n` als gültiger Teil des Elementes behandelt anstatt als Gruppenzusatz, selbst wenn ein Element ein angehängtes `:n` aufweist. Beachten Sie sowohl Beispiel 5-3 als auch Beispiel 5-4.

      Beispiel 5-3. Ausführliches Beispiel von `MASTER_SITES:n` in `MASTER_SITE_SUBDIR`

          MASTER_SITE_SUBDIR=     old:n new/:NEW

      - Verzeichnisse innerhalb der Gruppe `DEFAULT` -> old:n

      - Verzeichnisse innerhalb der Gruppe `NEW` -> new

      Beispiel 5-4. Ausführliches Beispiel von `MASTER_SITES:n` mit Komma-Operator, mehreren Dateien, mehreren Webseiten und mehreren Unterverzeichnissen

          MASTER_SITES=   http://site1/%SUBDIR%/ http://site2/:DEFAULT \
          	http://site3/:group3 http://site4/:group4 \
          	http://site5/:group5 http://site6/:group6 \
          	http://site7/:DEFAULT,group6 \
          	http://site8/%SUBDIR%/:group6,group7 \
          	http://site9/:group8
          DISTFILES=      file1 file2:DEFAULT file3:group3 \
          	file4:group4,group5,group6 file5:grouping \
          	file6:group7
          MASTER_SITE_SUBDIR=     directory-trial:1 directory-n/:groupn \
          	    directory-one/:group6,DEFAULT \
          	    directory

      Das vorstehende Beispiel führt zu einem fein granulierten Herunterladen. Die Webseiten werden in der exakten Reihenfolge ihrer Nutzung aufgelistet.

      - `file1` wird heruntergeladen von

        - `MASTER_SITE_OVERRIDE`

        - http://site1/directory-trial:1/

        - http://site1/directory-one/

        - http://site1/directory/

        - http://site2/

        - http://site7/

        - `MASTER_SITE_BACKUP`

      - `file2` wird genauso heruntergeladen wie `file1`, da sie zur gleichen Gruppe gehören

        - `MASTER_SITE_OVERRIDE`

        - http://site1/directory-trial:1/

        - http://site1/directory-one/

        - http://site1/directory/

        - http://site2/

        - http://site7/

        - `MASTER_SITE_BACKUP`

      - `file3` wird heruntergeladen von

        - `MASTER_SITE_OVERRIDE`

        - http://site3/

        - `MASTER_SITE_BACKUP`

      - `file4` wird heruntergeladen von

        - `MASTER_SITE_OVERRIDE`

        - http://site4/

        - http://site5/

        - http://site6/

        - http://site7/

        - http://site8/directory-one/

        - `MASTER_SITE_BACKUP`

      - `file5` wird heruntergeladen von

        - `MASTER_SITE_OVERRIDE`

        - `MASTER_SITE_BACKUP`

      - `file6` wird heruntergeladen von

        - `MASTER_SITE_OVERRIDE`

        - http://site8/

        - `MASTER_SITE_BACKUP`

8. Wie gruppiere ich eine der speziellen Variablen aus `bsd.sites.mk`, d.h. `MASTER_SITE_SOURCEFORGE`?

   Lesen Sie Beispiel 5-5.

   Beispiel 5-5. Ausführliches Beispiel von `MASTER_SITES:n` mit `MASTER_SITE_SOURCEFORGE`

       MASTER_SITES=   http://site1/ ${MASTER_SITE_SOURCEFORGE:S/$/:sourceforge,TEST/}
       DISTFILES=      something.tar.gz:sourceforge

   `something.tar.gz` wird von allen Webseiten innerhalb von `MASTER_SITE_SOURCEFORGE` heruntergeladen.

9. Wie nutze ich dies mit `PATCH*`-Variablen.

   In allen Beispielen wurden `MASTER*`-Variablen genutzt, aber sie funktionieren exakt genauso mit `PATCH*`-Variablen, wie Sie an Beispiel 5-6. sehen können.

   Beispiel 5-6. Vereinfachte Nutzung von `MASTER_SITES:n` mit `PATCH_SITES`.

       PATCH_SITES=    http://site1/ http://site2/:test
       PATCHFILES=     patch1:test

### 5.4.7.3. Was ändert sich für die Ports? Was ändert sich nicht?

1. Alle bestehenden Ports bleiben gleich. Der Code für `MASTER_SITES:n` wird nur aktiviert, falls es Elemente mit angehängtem `:`n`` entsprechend den zuvor erwähnten Syntax-Regeln wie in 7 gezeigt gibt.

2. Das Target des Port bleibt gleich: `checksum`, `makesum`, `patch`, `configure`, `build` etc. Mit der offensichtlichen Ausnahme von `do-fetch`, `fetch-list`, `master-sites` und `patch-sites`.

   - `do-fetch`: nutzt die neue Gruppierung `DISTFILES` und `PATCHFILES` mit ihren darauf zutreffenden Gruppenelementen in `MASTER_SITES` und `PATCH_SITES` welche zutreffende Gruppenelemente sowohl in `MASTER_SITE_SUBDIR` als auch `PATCH_SITE_SUBDIR` aufweisen. Sehen Sie hierzu Beispiel 5-4.

   - `fetch-list`: arbeitet wie das alte `fetch-list` mit der Ausnahme, dass es nur wie `do-fetch` gruppiert.

   - `master-sites` und `patch-sites`: (inkompatibel zu älteren Versionen) geben nur die Elemente der Gruppe `DEFAULT` zurück. Beziehungsweise sie führen genau genommen die Targets von `master-sites-default` und `patch-sites-default` aus.

     Weiterhin ist der Gebrauch des Target entweder von `master-sites-all` oder `patch-sites-all` der direkten Überprüfung von `MASTER_SITES` oder `PATCH_SITES` vorzuziehen. Zudem ist nicht garantiert, dass das direkte Überprüfen in zukünftigen Versionen funktionieren wird. Sehen Sie iii.ii für weitere Informationen zu diesen neuen Port-Targets.

3. Neue Port-Targets

   1. Es gibt `master-sites-`n`` und `patch-sites-`n``-Targets, welche die Elemente der jeweiligen Gruppe `n` innerhalb von `MASTER_SITES` und `PATCH_SITES` auflisten. Beispielweise werden sowohl `master-sites-DEFAULT` als auch `patch-sites-DEFAULT` die Elemente der Gruppe `DEFAULT`, `master-sites-test` und `patch-sites-test` der Gruppe `test` usw. zurückgeben.

   2. Es gibt das neue Target `master-sites-all` und `patch-sites-all`, welche die Arbeit der alten Targets `master-sites` und `patch-sites` übernehmen. Sie geben die Elemente aller Gruppen zurück,als würden sie zur gleichen Gruppe gehören - mit dem Vorbehalt, dass sie so viele `MASTER_SITE_BACKUP` und `MASTER_SITE_OVERRIDE` auflisten wie Gruppen mittels `DISTFILES` oder `PATCHFILES` definiert sind. Das gleiche gilt entsprechend für `master-sites-all` und `patch-sites-all`.

## 5.4.8. `DIST_SUBDIR`

Verhindern Sie, dass Ihr Port das Verzeichnis `/usr/ports/distfiles` in Unordnung bringt. Falls Ihr Port eine ganze Reihe von Dateien herunterladen muss oder eine Datei enthält, die einen Namen hat, der möglicherweise mit anderen Ports in Konflikt stehen könnte (d.h.`Makefile`), dann setzen Sie die Variable `DIST_SUBDIR` auf den Namen des Ports (`${PORTNAME}` oder `${PKGNAMEPREFIX}${PORTNAME}` sollte hervorragend funktionieren). Dies wird `DISTDIR` von der Vorgabe `/usr/ports/distfiles` auf `/usr/ports/distfiles/`DIST_SUBDIR`` ändern und stellt tatsächlich alle für Ihren Port benötigten Dateien in dieses Unterverzeichnis.

Es wird zusätzlich nach dem Unterverzeichnis mit dem gleichen Namen auf der Sicherung der Hauptseite auf `ftp.FreeBSD.org` suchen (das ausdrückliche Setzen von `DISTDIR` in Ihrem `Makefile` wird dies nicht gewährleisten, also nutzen Sie bitte `DIST_SUBDIR`).

> Anmerkung: Dies hat keine Auswirkungen auf die Variable `MASTER_SITES`, die Sie in Ihrem `Makefile` definieren.

## 5.4.9. `ALWAYS_KEEP_DISTFILES`

Falls Ihr Port binäre Distfiles benutzt und eine Lizenz aufweist, die verlangt, dass das der Quelltext in Form binärer Pakete verteilt werden muss, z.B. GPL, dann wird `ALWAYS_KEEP_DISTFILES` den FreeBSD Build Cluster anweisen eine Kopie der Dateien in `DISTFILES` vorzuhalten. Nutzer dieser Ports benötigen generell diese Dateien nicht, daher ist es ein gutes Konzept, nur dann die Distfiles zu `DISTFILES` hinzuzufügen, wenn `PACKAGE_BUILDING` definiert ist.

Beispiel 5-7. Nutzung von `ALWAYS_KEEP_DISTFILES`.

    .if defined(PACKAGE_BUILDING)
    DISTFILES+=             foo.tar.gz
    ALWAYS_KEEP_DISTFILES=  yes
    .endif

Wenn Sie zusätzliche Dateien zu `DISTFILES` hinzufügen, dann beachten Sie bitte, dass Sie diese auch in `distinfo` aufführen. Zudem werden die zusätzlichen Dateien normalerweise ebenso in `WRKDIR` extrahiert, was für einige Ports zu unbeabsichtigten Seiteneffekten führen mag und spezielle Behandlung erfordert.

Zurück | Zum Anfang | Weiter
Kategorisierung | Nach oben | `MAINTAINER`

Fragen zum FreeBSD Ports-System richten Sie bitte an <ports@FreeBSD.org>, Fragen zu diesem Dokument hingegen an <de-bsd-translators@de.FreeBSD.org>.