[linux-l] Existenz eines Programmes herausfinden

Volker Grabsch vog at notjusthosting.com
Mi Apr 12 22:16:25 CEST 2006


Hallo,

nun habe auch ich einmal ne Frage, die eine FAQ sein könnte.
(aber leider finde ich nirgends die Antwort)

Wie finde ich heraus, ob ein bestimmtes Programm verfügbar ist?
Am besten via Shellscript, nach dem Motto:

    [ -x i486-linux-gnu-ld ] && echo "OK."

Obwohl ... eigentlich brauche ich das für Perl.
Ich möchte also schauen, ob das Programm "i486-linux-gnu-ld"
verfügbar ist, d.h. ob es einem der Verzeichnisse von PATH liegt.
Sicher kann man sich das selbst zurechtfriemeln, aber eventuell
gibt's ja schon einen Befehl, der mit das abnimmt.

Ach ja, einfach das Programm starten geht auch nicht, denn
wenn ich "i486-linux-gnu-ld" aufrufe, selbst wenn es existiert,
erhalte ich trotzdem nen Fehlercode, weil "ld" nunmal Parameter
haben will.

Das ganze muss generisch funktionieren (nicht nur für ld), also
könnte ich höchstens noch "BEFEHL --help >/dev/null" versuchen,
das klappt dann. Ist aber genau wie das manuelle Auswerten von $PATH
irgendwie "hinten herum".


-----------------------------------------------------------------

Zur Anwendung: Ich arbeite mich zur Zeit sehr intensiv in dpkg-cross
ein, und versuche es zu fixen, sodass win32 Cross-Compilierung in
Debian möglich wird, ohne Hacks und Klimmzüge. Meine bisherigen
Erfahrungen sind zusammengefasst unter:
    https://dev.njh6.de/wiki/index.php/Cross_Compiling_for_Win32

Aber das ist schon veraltet, mittlerweile musste ich in einigen
Details wiederum meine Meinung ändern.

Das Detail-Problem ist, dass ein Teilmodul, dpkg-cross.pl, eine
Liste von Programmen hat, die abhängig von der Zielplatform sind,
z.B. gcc, ld, ...
Die zugehören Umgebungsvariablen werden gesetzt, sodass sie einen
Prefix bekommen, z.B.:
    CC=i586-mingw32msvc-gcc
    LD=i586-mingw32msvc-ld

Momentan wird dort pauschal immer diese Variable gesetzt. Unter anderem
geschieht das aber nicht für "ranlib", mit der Begründung, dass "ranlib"
platformunabhängig sei, und daher das originale /usr/bin/ranlib ruhig
genommen werden sollte. Das stimmt vielleicht für viele Unices, nicht
jedoch für win32. Ich könnte jetzt also pauschal hinzufügen, dass sowas
wie
    RANLIB=i586-mingw32msvc-ranlib

noch hinzu kommt, aber dann mache ich ja denselben Fehler, und es
könnten andere Architekturen darunter leiden. (z.B. gibt es kein
extra i486-linux-gnu-ranlib)

Daher möchte ich all diese Dinger einfach durchprobieren, also z.B.
durchsehen, ob "i586-mingw32msvc-ranlib" da ist. Fall nicht, wird
einfach nur "ranlib" genommen. Das ist IMHO der sicherste weg, genau
diejenigen Cross-Compiling-Tools zu nehmen, die vorhanden sind, und
ansonsten auf die systemweiten Tools zurückzugreifen.


Viele Grüße,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l