Am Mit, 2003-05-14 um 23.12 schrieb David Haller:
Hallo,
On Wed, 14 May 2003, Stefan Onken wrote:
am Mittwoch, 14. Mai 2003 um 17:10 schrieb David Haller [..]
webserver:~/000/qmailadmin-1.0.6 # ./configure [..] --includedir=/home/vpopmail/ --libdir=/home/vpopmail/
--libdir=DIR object code libraries in DIR [EPREFIX/lib] --includedir=DIR C header files in DIR [PREFIX/include]
Du solltest also
--includedir=/home/vpopmail/include --libdir=/home/vpopmail/lib
das ist nun interessant, da ich das GENAU anders verstanden habe. Ich dachte ich geben den PREFIX ein, und /lib und /include haengt er selber an.
Nein. Doch.
Das "PREFIX" in den Angaben der Defaults fuer die Optionen ist ein Platzhalter fuer die jew. gueltige prefix, die man evtl. angegeben hat oder die eben per default (meist /usr/local) gesetzt wurde. Nein, mit PREFIX ist hier der Wert der mittels --prefix=PREFIX übergeben wird, gemeint.
Wenn man sich mal so ein configure-(shell!)-script anschaut, dann sieht man auch warum, denn (die script-internen shell-variablen) libdir bzw. includedir werden auf
libdir='${prefix}/lib' bzw. includedir='${prefix}/include'
gesetzt. Man bemerke, dass '' verwendet werden, d.h. dort wird '$prefix' _nicht_ expandiert!
Ja.
Die Expandierung findet dann erst im generierten Makefile statt Ja.
bzw. u.U. (in seltenen Faellen) sogar erst von der von make aufgerufenen shell... Das wäre ein Bug.
Das ganze fuehrt dann zu:
./configure
=> prefix=/usr/local, libdir='${prefix}/lib', includedir='${prefix}/include'
./configure --prefix=/blubb
=> prefix=/blubb, libdir='${prefix}/lib', includedir='${prefix}/include'
./configure --prefix=/blubb --libdir=/bla
=> prefix=/blubb, libdir='/bla', includedir='${prefix}/include'
./configure --prefix=/blubb --libdir=/blubb/lib --includedir=/blubb/include => prefix=/blubb, libdir='/blubb/lib', includedir='/blubb/include'
Man achte auf den Unterschied zwischen dem ersetn und dem letzten Beispiel! So soll es auch sein.
libdir='${prefix}/lib' != libdir='/blubb/lib' auch wenn ${prefix} irgendwann zu '/blubb' expandiert. Der Unterschied kann einen z.B. beim Installieren mit
make prefix='/bla/blubb' install
boese auffallen, da im letzten Beispiel libdir nach wie vor '/blubb/lib' ist!. Ja. Faustregel:
Alle --*dir Optionen die beim Aufruf von configure übergeben werden, müssen auch beim "make *dir=.... install" wenn man "make *dir=.... install" verwendet. Ausser in rpm.specs und in komplizierten Netzwerk-Installationen wird man dies in der Regel nicht machen.
Besser ist, wenn man in dem Falle ggfs:
./configure --prefix='/blubb' --libdir='${prefix}/lib'
usw. verwendet, Hmm, es macht in sauberen Konfigurationen keinen Unterschied.
da dann auch im Makefile die (make-) Variable '${prefix}' verwendet wird. Aber das ist dann wiederum ja der default.
Also: '--libdir' sollte man nur verwenden, wenn es von '/lib' abweicht:
Nein: --libdir muss man dann verwenden, wenn es von ${prefix}/lib abweicht.
./configure --prefix='/blubb' --libdir='/blubb/libraries' make make prefix='/tmp/blubb' libdir='/tmp/blubb/libraries'
Achso, die von configure erzeugten Makefiles sollte man sich diesbezueglich auch anschauen, da wird einem obiges dann klarer...
Also, eigentlich haette ich in meiner letzten Mail folgendes schreiben sollen:
==== Du solltest also --prefix='/home/vpopmail' --includedir='${prefix}/include' --libdir='${prefix}/lib' verwenden. ====
Ob dir das aber beim konkreten Problem bzgl. des kompilierens von QmailAdmin geholfen haette weiss ich nicht
Mit sehr grosser Wahrscheinlichkeit nicht.
-- dazu muesste ich mir das Makefile(.am) von QmailAdmin anschauen...
Wie gesagt: includedir und libdir beziehen sich auf die Orte, an die hininstalliert werden soll -- nicht auf die evtl. einzubindenden Libs... Genau.
Dafuer gibt's ggfs. die Optionen '--cflags=' bzw. '--libs' Nein.
Derartige Flags werden von configure-Scripten normalerweise nicht angeboten. Wenn doch, hat entweder der Autor der Scripte nicht verstanden, wie configure-Scripte funktionieren, oder aber es handelt sich um "Convenience-Optionen" zur Behandlung von Sonderfällen (--enable-<xxx>-[cflags|libs]=...).
(IIRC) bzw. Umgebungsvariablen (CFLAGS/CPPFLAGS/LDFLAGS/LIBS/LDADD u.a., naeheres muss man ggfs. im Makefile nachschauen). ./configure --help sollte sagen welche Umgebungsvariablen verwendet werden (Ist bei autoconf-2.5x generierten configure-Scripten der Standard, bei autoconf-2.1x generierten configure-Scripten nicht)
Im Regelfall sind dies CFLAGS, CPPFLAGS, LDFLAGS. LIBS und LDADD kommen normalerweise nicht aus der Umgebung. Ralf