# Makefile-Optionen

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

# 5.11. Makefile-Optionen

Einige größere Applikationen können mit einer Reihe von Konfigurationen, die zusätzliche Funktionalitäten hinzufügen, erstellt werden, falls eine oder mehrere Bibliotheken oder Applikationen verfügbar sind. Dazu gehören die Auswahl von natürlichen Sprachen, GUI versus Kommandozeilen-Versionen oder die Auswahl aus mehreren Datenbank-Programmen. Da nicht alle Nutzer diese Bibliotheken oder Applikationen wollen, stellt das Ports-System hooks (Haken) zur Verfügung, damit der Autor des Ports bestimmen kann, welche Konfiguration erstellt werden soll.

## 5.11.1. KNOBS (Einstellungen)

### 5.11.1.1. `WITH_`*`` und `WITHOUT_`*``

Diese Variablen sind entworfen worden, um vom System-Administrator gesetzt zu werden. Es gibt viele, die in `ports/KNOBS` standardisiert sind.

Benennen Sie Schalter bei der Erstellung eines Ports nicht programmspezifisch. Verwenden Sie zum Beispiel im Avahi-Port `WITHOUT_MDNS` anstelle von `WITHOUT_AVAHI_MDNS`.

> Anmerkung: Sie sollten nicht annehmen, dass ein `WITH_`*`` notwendigerweise eine korrespondierende `WITHOUT_`*``-Variable hat oder umgekehrt. Im Allgemeinen wird diese Vorgabe einfach unterstellt.

> Anmerkung: Falls nicht anderweitig festgelegt, werden diese Variablen nur dahingehend überprüft, ob sie gesetzt sind oder nicht - nicht darauf, ob sie auf bestimmte Werte wie `YES` oder `NO` gesetzt sind.

Tabelle 5-3. Häufige `WITH_`*`` und `WITHOUT_`*``-Variablen

Variable | Bedeutung
--- | ---
`WITHOUT_NLS` | Falls gesetzt, bedeutet sie, dass eine Internationalisierung nicht benötigt wird, was Kompilierzeit sparen kann. Als Vorgabe wird Internationalisierung gebraucht.
`WITH_OPENSSL_BASE` | Nutze die Version von OpenSSL aus dem Basissystem.
`WITH_OPENSSL_PORT` | Installiert die Version von OpenSSL aus `security/openssl`, auch wenn das Basissystem auf aktuellem Stand ist.
`WITHOUT_X11` | Falls der Port mit oder ohne Unterstützung für X erstellt werden kann, dann sollte normalerweise mit X-Unterstützung erstellt werden. Falls die Variable gesetzt ist, soll die Version ohne X-Unterstützung erstellt werden.

### 5.11.1.2. Benennung von Knobs (Einstellungen)

Um die Anzahl der Knobs niedrig zu halten und zum Vorteil des Anwenders, wird empfohlen, dass Porter ähnliche Namen für Knobs verwenden. Eine Liste der beliebtesten Knobs kann in der KNOBS-Datei eingesehen werden.

Knob-Namen sollten wiederspiegeln, was der Knob bedeutet und was er bewirkt. Wenn ein Port einen lib-Präfix im `PORTNAME` hat, dann soll das lib-Präfix im Knob-Namen entfallen.

## 5.11.2. `OPTIONS`

### 5.11.2.1. Hintergrund

Die `OPTIONS`-Variable gibt dem Nutzer, der diesen Port installiert, einen Dialog mit auswählbaren Optionen und speichert diese in `/var/db/ports/`portname`/options`. Bei der nächsten Neuerstellung des Ports werden diese Einstellungen wieder verwandt. Sie werden sich niemals mehr an all die zwanzig `WITH_`*`` und `WITHOUT_`*``-Optionen erinnern müssen, die Sie benutzt haben, um diesen Port zu erstellen!

Wenn der Anwender `make config` benutzt (oder ein `make build` das erste Mal laufen lässt) wird das Framework auf `/var/db/ports/`portname`/options` die Einstellungen prüfen. Falls die Datei nicht existiert, werden die Werte von `OPTIONS` genutzt, um eine Dialogbox zu erzeugen, in welcher die Optionen an- oder abgeschaltet werden können. Dann wird die `options`-Datei gespeichert und die ausgewählten Variablen werden bei der Erstellung des Ports benutzt.

Falls eine neue Version des Ports `OPTIONS` hinzufügt, wird der Dialog mit den gespeicherten Werten dem Nutzer angezeigt.

Benutzen Sie `make showconfig`, um die gespeicherte Konfiguration zu betrachten. Benutzen Sie `make rmconfig`, um die gespeicherte Konfiguration zu Löschen.

### 5.11.2.2. Syntax

Die Syntax für die `OPTIONS`-Variable lautet:

    OPTIONS=    OPTION    "descriptive text" default ...

Der Wert als Vorgabe ist entweder `ON` oder `OFF`. Wiederholungen dieser drei Felder sind erlaubt.

`OPTIONS`-Definitionen müssen vor der Einbindung von `bsd.port.options.mk` erscheinen. Die `WITH_*` und `WITHOUT_*`-Variablen können nur nach der Einbindung von `bsd.port.options.mk` getestet werden. `bsd.port.pre.mk` kann auch stattdessen eingebunden werden und wird immer noch von vielen Ports eingebunden, die vor der Einführung von `bsd.port.options.mk` erstellt wurden. Jedoch wirken manche Variablen nicht wie gewohnt nach der Einbindung von `bsd.port.pre.mk`, typischerweise `USE_*`-Optionen.

Beispiel 5-8. Einfache Anwendung von `OPTIONS`

    OPTIONS=      FOO "Enable option foo" On \
                  BAR "Support feature bar" Off

    .include <bsd.port.options.mk>

    .if defined(WITHOUT_FOO)
    CONFIGURE_ARGS+=    --without-foo
    .else
    CONFIGURE_ARGS+=    --with-foo
    .endif

    .if defined(WITH_BAR)
    RUN_DEPENDS+=    bar:${PORTSDIR}/bar/bar
    .endif

    .include <bsd.port.mk>

Beispiel 5-9. Veraltete Anwendung von `OPTIONS`

    OPTIONS=      FOO "Enable option foo" On

    .include <bsd.port.pre.mk>

    .if defined(WITHOUT_FOO)
    CONFIGURE_ARGS+=    --without-foo
    .else
    CONFIGURE_ARGS+=    --with-foo
    .endif

    .include <bsd.port.post.mk>

## 5.11.3. Automatische Aktivierung von Funktionen

Wenn Sie ein GNU-Konfigurationsskript benutzen, sollten Sie ein Auge darauf werfen, welche Funktionen durch die automatische Erkennung aktiviert werden. Schalten Sie Funktionen, die Sie nicht möchten, ausdrücklich durch Verwendung von `--without-xxx` oder `--disable-xxx` in der Variable `CONFIGURE_ARGS` einzeln ab.

Beispiel 5-10. Falsche Behandlung einer Option

    .if defined(WITH_FOO)
    LIB_DEPENDS+=        foo.0:${PORTSDIR}/devel/foo
    CONFIGURE_ARGS+=    --enable-foo
    .endif

Stellen Sie sich vor im obigen Beispiel ist eine Bibliothek libfoo auf dem System installiert. Der Nutzer will nicht, dass diese Applikation libfoo benutzt, also hat er die Option auf "off" im `make config`-Dialog umgestellt. Aber das Konfigurationsskript der Applikation hat erkannt, dass die Bibliothek auf dem System vorhanden ist und fügt ihre Funktionen in die Binärdatei ein. Falls der Nutzer sich nun entschliesst libfoo von seinem System zu entfernen, dann wird das Ports-System nicht protestieren (es wurde keine Abhängigkeit von libfoo eingetragen), aber die Applikation bricht ab.

Beispiel 5-11. Korrekte Behandlung einer Option

    .if defined(WITH_FOO)
    LIB_DEPENDS+=        foo.0:${PORTSDIR}/devel/foo
    CONFIGURE_ARGS+=    --enable-foo
    .else
    CONFIGURE_ARGS+=    --disable-foo
    .endif

Im zweiten Beispiel wird die Bibliothek libfoo explizit abgeschaltet. Das Konfigurationsskript aktiviert die entsprechenden Funktionen nicht in der Applikation trotz der Anwesenheit der Bibliothek auf dem System.

Zurück | Zum Anfang | Weiter
Info-Dateien | Nach oben | Die Festlegung des Arbeitsverzeichnisses

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