Wie sollen Manpages installiert werden?

7

Wenn ich ein benutzerdefiniertes Dienstprogramm verteile, schreibe ich normalerweise ein Makefile, auf /usr/localdem standardmäßig Binärdateien installiert werden

PREFIX ?= /usr/local
MANPREFIX ?= ${PREFIX}/man

install:
    install utility ${PREFIX}/bin/
    install utility.1 ${MANPREFIX}/man1/

Der Pfad zu lokalen Binärdateien ist auf verschiedenen Plattformen ziemlich Standard, der Man-Pfad jedoch nicht

  • Linux: /usr/local/share/manoder/usr/local/man
  • Mac OS - /usr/local/share/man
  • BSD: /usr/local/man

Gibt es eine tragbare Möglichkeit, dieses Makefile zu schreiben? Es erscheint unangemessen zu erwarten, dass Benutzer MANPREFIX vor der Installation auf den richtigen Pfad setzen.

BEARBEITEN:

BSD unterstützt die Zuweisung eines Shell-Befehls mithilfe von !=, mit dem getestet werden kann, ob ein Pfad vorhanden ist

SHARE != [ -d ${PREFIX}/share/man ] && echo /share || true
MANPREFIX ?= ${PREFIX}${SHARE}/man

Dies ist eine neue Funktion für GNU make , daher ist sie wahrscheinlich noch nicht portabel. Dies funktioniert in GNU make, aber nicht in BSD make:

MANPREFIX ?= $(shell [ -d ${PREFIX}/share/man ] && echo ${PREFIX}/share/man || echo ${PREFIX}/man)
Eradman
quelle

Antworten:

4

Die Lehrbuchantwort lautet autoconf . Das Finden der richtigen Installationsverzeichnisse auf jeder Plattform ist Teil seiner Aufgabe.

Autoconf ist nicht perfekt, aber es ist oft besser, als das Rad neu zu erfinden.

Gilles 'SO - hör auf böse zu sein'
quelle
Was ist mit Dienstprogrammen, die keinen Kompilierungsschritt erfordern, wie eine Sammlung von Skripten? Würden Sie in diesem Fall immer noch die Verwendung eines Makefiles vorschlagen?
Jorge Bucaran
@JorgeBucaran Möglicherweise möchten Sie ein Installationsziel haben, auch wenn es keinen Build-Schritt gibt, und Sie haben wahrscheinlich sowieso Testziele. Wenn Sie nicht testen, haben Sie möglicherweise überhaupt kein Makefile (oder ein gleichwertiges) und verlassen sich nur auf paketspezifische Skripte (Debian / Regeln, RPM-Spezifikationen, BSD-Ports usw.).
Gilles 'SO - hör auf böse zu sein'