[solved] ./configure findet files nicht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

[solved] ./configure findet files nicht

Beitrag von MustrumRidcully » 21.11.2009 10:24:46

ich hoffe, das topic wurde noch nicht allzu oft diskutiert, aber mir waren die 4k themen hier doch ein bisschen zu viel zum durchwühlen. :wink:
also:
configure.in, von autoconf generiert und von mir leicht erweitert, sieht so aus:

Code: Alles auswählen

...
AM_INIT_AUTOMAKE
...
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([argp.h pango/pango.h cairo/cairo.h gtk/gtk.h libpng12/png.h])
und in Makefile.am findet sich folgendes:

Code: Alles auswählen

AM_CPPFLAGS  = -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include \
               -I/usr/include/cairo -I/usr/include/atk-1.0 \
               -I/usr/include/pango-1.0 -I/usr/include/gtk-2.0 \
               -I/usr/lib/gtk-2.0/include \
               -Wall
alle referenzierten files haben die richtigen rechte (0644, alle verzeichnisse können gewechselt werden). dennoch findet sich im config.log folgendes:

Code: Alles auswählen

configure:4080: checking pango/pango.h usability
configure:4080: gcc -c -g -O2  conftest.c >&5
conftest.c:55:25: error: pango/pango.h: No such file or directory
noch wirrer wird es bei gtk:

Code: Alles auswählen

configure:4080: checking gtk/gtk.h usability
configure:4080: gcc -c -g -O2  conftest.c >&5
In file included from /usr/include/gdk/gdk.h:32,
                 from /usr/include/gtk/gtk.h:32,
                 from conftest.c:56:
/usr/include/gdk/gdkapplaunchcontext.h:30:21: error: gio/gio.h: No such file or directory
In file included from /usr/include/gdk/gdkapplaunchcontext.h:31,
                 from /usr/include/gdk/gdk.h:32,
                 from /usr/include/gtk/gtk.h:32,
                 from conftest.c:56:
/usr/include/gdk/gdkscreen.h:31:19: error: cairo.h: No such file or directory
In file included from /usr/include/gdk/gdkscreen.h:32,
                 from /usr/include/gdk/gdkapplaunchcontext.h:31,
                 from /usr/include/gdk/gdk.h:32,
                 from /usr/include/gtk/gtk.h:32,
                 from conftest.c:56:
/usr/include/gdk/gdktypes.h:36:18: error: glib.h: No such file or directory
/usr/include/gdk/gdktypes.h:37:25: error: pango/pango.h: No such file or directory
/usr/include/gdk/gdktypes.h:38:25: error: glib-object.h: No such file or directory
/usr/include/gdk/gdktypes.h:55:23: error: gdkconfig.h: No such file or directory
und so weiter...

d.h., obwohl die AM_CPPFLAGS auf die richtigen verzeichnisse deuten (gio z.b. ist ein subdir von glib-2.0), sieht sich configure außerstande, die makros zu expandieren. witzigerwese glücken aber die tests für cairo.h und png.h - d.h. dass sich configure selbst widerspricht. ich muss zugeben ich bin am ende meines lateins angelangt. anyone got a clue?

p.s. zusatzfrage: wie muss ich die AM_LDFLAGS setzen? jetzt sieht's so aus:

Code: Alles auswählen

AM_LDFLAGS   = -lgtk2 -lcairo -lpango
aber der linker mault, weil er mit gtk2 und pango nix anzufangen weiß.

Code: Alles auswählen

ldconfig
ist passiert, aber das kümmert sich imho ja nur um symlinks.
Zuletzt geändert von MustrumRidcully am 23.11.2009 14:16:17, insgesamt 1-mal geändert.
Volk ist Opium für eine Religion.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von gms » 21.11.2009 12:25:23

MustrumRidcully hat geschrieben:idennoch findet sich im config.log folgendes:

Code: Alles auswählen

configure:4080: checking pango/pango.h usability
configure:4080: gcc -c -g -O2  conftest.c >&5
conftest.c:55:25: error: pango/pango.h: No such file or directory
wie du siehst, werden hier die in AM_CPPFLAGS spezifizierten Include-Verzeichnisse nicht verwendet. Diese Include-Verzeichnisse sollen ja durch configure ermittelt werden und nicht hardcoded in den AM_CPPFLAGS stehen

Gruß
gms

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 21.11.2009 13:00:26

gms hat geschrieben: wie du siehst, werden hier die in AM_CPPFLAGS spezifizierten Include-Verzeichnisse nicht verwendet. Diese Include-Verzeichnisse sollen ja durch configure ermittelt werden und nicht hardcoded in den AM_CPPFLAGS stehen
hmm... nee, ich glaub nicht, dass das der grund ist. denn ich hatte statt gtk zuvor freeglut verwendet (ich bin erst ganz am anfang des projekts). und damit hatte ich das problem nicht. nach meinem kenntnisstand werden die makros in Makefile.am schon ausgewertet bei der expandierung des makros AM_INIT_AUTOMAKE - d.h. ihre bedeutung ist configure schon bekannt.

darüber hinaus werden ja nur ein paar von den referenzierten files nicht gefunden. cairo.h z.b. findet configure als solches, nicht aber, wenn es durch eins der gtk/ gdk header inkludiert wird.

you see: ich kriege keinen error durch configure, wenn es cairo.h checkt - wohl aber wirft es denn error aus, wenn gtk.h oder was auch immer seinerseits cairo.h inkludiert. (das mit cairo ist nur ein beispiel, weil es in den geposteten code- und log-lines erwähnt wird. sehr wahrscheinlich hat das prob nichts mit dem header/ seiner location/ seinem inhalt zu tun.) und, wie erwähnt: mit freeglut hatte ich die probleme nicht. nur brauche ich kein 3d, opengl wäre sort of an overhead..
Volk ist Opium für eine Religion.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von gms » 21.11.2009 13:11:15

klar kann es bei dir trotzdem funktionieren wenn du die Include-Verzeichnisse in deinen AM_CPPFLAGS hartkodierst. Das Projekt wird sich dann halt nur bei dir ( dort wo diese Pfade stimmen ) kompilieren lassen, somit führst du autoconf/configure ad absurdum.
Aber mir ist das eigentlich egal ...

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 21.11.2009 13:20:17

gms hat geschrieben:klar kann es bei dir trotzdem funktionieren wenn du die Include-Verzeichnisse in deinen AM_CPPFLAGS hartkodierst. Das Projekt wird sich dann halt nur bei dir ( dort wo diese Pfade stimmen ) kompilieren lassen, somit führst du autoconf/configure ad absurdum.
Aber mir ist das eigentlich egal ...
:D
gut, ja... mir halt nicht. drum hab ich mal gefragt. *g* thx 4 your effort so far. : :)
Volk ist Opium für eine Religion.

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 22.11.2009 03:11:03

für eine ernst zu nehmende antwort wäre ich immer noch sehr dankbar. es kann ja wohl die lösung des problems nicht in hartkodierten pfaden liegen, sondern muss irgendwo im zusammenhang mit der libgtk2 zu finden sein.
Volk ist Opium für eine Religion.

Benutzeravatar
schorsch_76
Beiträge: 2612
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von schorsch_76 » 22.11.2009 08:03:55

Was du suchst ist so etwas:

Code: Alles auswählen

configure.ac
AC_INIT([gtkmmboostsc],[0.1],[schorsch_76@gmx.de])

AM_INIT_AUTOMAKE([-Wall -Werror foreign])

BOOST_REQUIRE(1.40.0)
BOOST_FIND_HEADER([boost/signals2.hpp])

# Boost threads
# BOOST_FIND_LIB([thread],[mt],[boost/thread.hpp])
# BOOST_THREADS([mt])
BOOST_FIND_HEADER([boost/thread.hpp])

AC_PROG_CXX

PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 >= 2.8.0])

AC_CONFIG_HEADERS([config.h])

AC_CONFIG_FILES([
	Makefile
	src/Makefile
])

AC_OUTPUT
Die Wichtige Zeile ist

Code: Alles auswählen

PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 >= 2.8.0])
In der Makefile.am muss das ganze dann so aussehen

Code: Alles auswählen

bin_PROGRAMS = gtkmmboostsc
gtkmmboostsc_SOURCES = 	(meine Quellen)

gtkmmboostsc_LDADD = $(GTKMM_LIBS) 
gtkmmboostsc_CXXFLAGS = $(GTKMM_CFLAGS)
Hier noch ein paar Links für dich:

http://www.lrde.epita.fr/~adl/autotools.html
http://en.wikipedia.org/wiki/GNU_build_system

EDIT:
schau auchnochmal "man pkg-config" ;)

Gruß

schorsch

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 23.11.2009 05:56:19

yo, tausend dank, ich werd mich da gleich mal durchwühlen. ich hab die gleiche frage auch mal hier gepostet (woraus auch hervorgeht, dass mir die pkgconfig-erleuchtung mittlerweise auch gekommen ist. :wink: ). but anyway it seem's you've just saved my day. :)
Volk ist Opium für eine Religion.

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 23.11.2009 14:15:53

hmmm... irgendwie komme ich mir gerade vor, als habe ich, ein vaterunser vor mich hinsummend, bei vollmond krötensalbe angerührt. 8)
weil, ich fand da folgendes nettes: http://www.catnip.co.uk/projects/c/gtk2base/
ich habe alles so gemacht, wie das da steht, d.h. meine configure.ac sieht jetzt so aus:

Code: Alles auswählen

...
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
...
# Checks for libraries.
PKG_CHECK_MODULES(GTK, [gdk-2.0 gtk+-2.0],,exit)
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)
was auch wunderbar expandiert wird. ich kann den ganzen kram sogar fehlerfrei kompilieren und linken, d.h. eigentlich ist das problem gelöst. eigentlich. denn configure mault immer noch, und zwar aus der zeile:

Code: Alles auswählen

AC_CHECK_HEADERS([argp.h pango/pango.h cairo/cairo.h gtk/gtk.h libpng12/png.h])
was nach wie vor zu fehlermeldungen führt im zusammenhang mit pango/pango.h und gtk/gtk.h:

Code: Alles auswählen

configure:4223: checking pango/pango.h presence
configure:4223: gcc -E  conftest.c
conftest.c:22:25: error: pango/pango.h: No such file or directory
...
configure:4223: checking gtk/gtk.h usability
configure:4223: gcc -c -g -O2  conftest.c >&5
conftest.c:56:21: error: gtk/gtk.h: No such file or directory
@schorsch_76
wenn du darauf auch noch ne antwort findest... ich weiß, das ist jetzt pedantisch von mir, aber das soll man ja sein bei so sachen. 8)
ich mach das ding trotzdem schonmal auf solved für den rest der gemeinde.
Volk ist Opium für eine Religion.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: [solved] ./configure findet files nicht

Beitrag von gms » 23.11.2009 15:34:47

es spricht auch nichts dagegen zusätzlich zum "PKG_CHECK_MODULES(GTK, ..." auch ein "PKG_CHECK_MODULES(PANGO, ..." einzusetzen, oder ?
gleiches gilt für "cairo" und "libpng" :wink:

Gruß
gms

Benutzeravatar
schorsch_76
Beiträge: 2612
Registriert: 06.11.2007 16:00:42
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von schorsch_76 » 23.11.2009 15:50:39

MustrumRidcully hat geschrieben:hmmm... irgendwie komme ich mir gerade vor, als habe ich, ein vaterunser vor mich hinsummend, bei vollmond krötensalbe angerührt. 8)
weil, ich fand da folgendes nettes: http://www.catnip.co.uk/projects/c/gtk2base/
ich habe alles so gemacht, wie das da steht, d.h. meine configure.ac sieht jetzt so aus:

Code: Alles auswählen

...
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_CONFIG_HEADERS([config.h])
...
# Checks for libraries.
PKG_CHECK_MODULES(GTK, [gdk-2.0 gtk+-2.0],,exit)
AC_SUBST(GTK_CFLAGS)
AC_SUBST(GTK_LIBS)
was auch wunderbar expandiert wird. ich kann den ganzen kram sogar fehlerfrei kompilieren und linken, d.h. eigentlich ist das problem gelöst. eigentlich. denn configure mault immer noch, und zwar aus der zeile:

Code: Alles auswählen

AC_CHECK_HEADERS([argp.h pango/pango.h cairo/cairo.h gtk/gtk.h libpng12/png.h])
was nach wie vor zu fehlermeldungen führt im zusammenhang mit pango/pango.h und gtk/gtk.h:

Code: Alles auswählen

configure:4223: checking pango/pango.h presence
configure:4223: gcc -E  conftest.c
conftest.c:22:25: error: pango/pango.h: No such file or directory
...
configure:4223: checking gtk/gtk.h usability
configure:4223: gcc -c -g -O2  conftest.c >&5
conftest.c:56:21: error: gtk/gtk.h: No such file or directory
@schorsch_76
wenn du darauf auch noch ne antwort findest... ich weiß, das ist jetzt pedantisch von mir, aber das soll man ja sein bei so sachen. 8)
ich mach das ding trotzdem schonmal auf solved für den rest der gemeinde.
Na dann kuck ma mal! :mrgreen:

Also http://packages.debian.org/lenny/libgtk2.0-0 sagt mir, dass wenn du GTK installierst, pango, cairo und png mitinstalliert werden. Ergo, kein Problem. Sollte dann damit gelöst sein. :D

Der ultimative Test für dein configure script ist Debianpbuilder. Nachdem du dein Packet "debianisert" hast und der pbuilder alles durchbaut ohne zu meckern, hast du alle Abhängigkeiten aufgelöst. pbuilder nutzt zum bauen eine chroot in die es nur die Packete installiert, welche im control file in den build depends angegeben sind. Siehe Debian Maintainer Doku.

Gruß

schorsch

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von gms » 23.11.2009 16:00:58

schorsch_76 hat geschrieben: Also http://packages.debian.org/lenny/libgtk2.0-0 sagt mir, dass wenn du GTK installierst, pango, cairo und png mitinstalliert werden. Ergo, kein Problem. Sollte dann damit gelöst sein. :D
du hast zwar insofern recht, daß aus diesem Grund pango/pango.h auf dem System vorhanden sein müßte, aber z.B den Include-Pfad von pango hast du dadurch noch nicht gefunden
PKG_CHECK_MODULES liest die von einer Library installierten .pc Dateien aus:

Code: Alles auswählen

gms2 ~ # pkg-config --cflags pango
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
Gruß
gms

Benutzeravatar
MustrumRidcully
Beiträge: 124
Registriert: 16.06.2005 04:11:24
Lizenz eigener Beiträge: GNU General Public License
Wohnort: berlin

Re: ./configure findet files nicht

Beitrag von MustrumRidcully » 24.11.2009 05:47:32

gms hat geschrieben: du hast zwar insofern recht, daß aus diesem Grund pango/pango.h auf dem System vorhanden sein müßte, aber z.B den Include-Pfad von pango hast du dadurch noch nicht gefunden
PKG_CHECK_MODULES liest die von einer Library installierten .pc Dateien aus:

Code: Alles auswählen

gms2 ~ # pkg-config --cflags pango
-I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include
yep, that's the point. denn pkg-config --cflags gtk+-2.0 liefert mir die verzeichnisse für pango bereits. und für gtk+ ganz bestimmt auch. trotzdem kennt sich configure offensichtlich nicht aus.
Volk ist Opium für eine Religion.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Re: ./configure findet files nicht

Beitrag von gms » 24.11.2009 07:10:49

MustrumRidcully hat geschrieben: yep, that's the point. denn pkg-config --cflags gtk+-2.0 liefert mir die verzeichnisse für pango bereits. und für gtk+ ganz bestimmt auch. trotzdem kennt sich configure offensichtlich nicht aus.
da kommt es schwer darauf an, was du tatsächlich möchtest:
a) wenn du in Teilen deines Projekts diese Libraries ( 'pango', 'cairo', bzw 'libpng' ) direkt verwenden möchtest, ( also nicht über gtk+ ) dann solltest du für diese Libraries auch ein PKG_CHECK_MODULES ausführen und kannst/brauchst dann für diese Teile/Module, nur die speziell ermittelten Flags verwenden
b) wenn du kein direktes Interesse an diesen Libraries hast, dann macht es auch keinen Sinn auf diese im 'configure' zu prüfen und du kannst dir die Checkerei dieser Libraries sparen
MustrumRidcully hat geschrieben: trotzdem kennt sich configure offensichtlich nicht aus.
Ich vermute jetzt einmal, daß du dieses auf ein nachträgliches Ausführen von 'AC_CHECK_HEADERS' beziehst. Dazu ist folgendes zu sagen:
a) AC_CHECK_HEADERS sucht auch hier wieder mit den Original-Flags ( also berücksichtigt hier nicht die vorher von PKG_CHECK_MODULES ermittelten Flags; das gilt auch bei mehreren PKG_CHECK_MODULES Aufrufen)
Ansonsten würdest du ja unerwünschte Abhängigkeiten zwischen den ermittelten Flags bekommen
b) suche in configure nicht zweimal nach der selben Library. Die Header Suche nach gtk.h, pango.h, cairo.h, ... ist in beiden obigen Fällen völlig unnötig


Gruß
gms

Antworten