Newsgroup: it.comp.os.linux.development
Titolo: da configure a configure.in

Mi trovo a lavorare con gli autotools da poco, e gia' molti problemi mi si
pongono (chi conosce la procedura per creare un configure e un Makefile puo'
capire perche': non e' esattamente la cosa piu' facile di questo mondo...).
Il mio quesito piu' grande ora come ora e' questo: esiste un modo per
ricavare il 
configure.in
 (praticamente il "sorgente" del configure, che
viene poi elaborato dagli autotools) partendo da un configure?
Il fatto e' che non riesco a trovare le macro per controllare la presenza di
certe librerie (nella fattispecie quelle di XFCE: libxfcegui4, libxfce4utils
e libxfce4mcs), e pensavo di studiare i files di "compilazione automatica"
di alcuni pacchetti per estrapolare le informazioni necessarie; peccato che
in tali pacchetti non ci sia traccia di 
configure.in
, ma solo di configure .
Grazie :-)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 in tali pacchetti non ci sia traccia di 
configure.in
, ma solo di configure .
li trovi con pkg-config (almeno in debian testing) 
dodiesis@hobbes [ ~ ]
   $ pkg-config --libs libxfcegui4-1.0
-Wl,--export-dynamic -L/usr/X11R6/lib -lSM -lICE -lX11 -lXinerama -lXext
-lxfcegui4 -lgtk-x11-2.0 -lxfce4util -lgdk-x11-2.0 -latk-1.0
-lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0
-lgmodule-2.0 -ldl -lglib-2.0
quindi il tuo 
configure.in
 conterra':
PKG_CHECK_MODULES(PACKAGE, glib-2.0 >= 2.2.0 \
    libxml-2.0 >= 2.4 \
    libxfcegui4-1.0 >= 0.1) <-- occhio alla versione
 
AC_SUBST(PACKAGE_CFLAGS)
AC_SUBST(PACKAGE_LIBS)
glib e libxml sono dipendenze mie... era tanto per farti capire.
Ciao.

 
grep -R "XFCE" /usr/share/aclocal
e vedi che macro ci sono a disposizione. in genere, quando eseguite, 
guardano se c'è qualche programma / feature (es: AC_CHECK_FOO( 
[versione]) e settano delle variabili (che poi potrai usare nei 
Makefiles.am come per esempio "AM_CXXFLAGS += $(FOO_CXXFLAGS)" o FOO_LIBS.


 in tali pacchetti non ci sia traccia di 
configure.in
, ma solo di configure .
Prendi la macro spacciata con una libreria (es. GTK) e la adatti a XFCE.
Oppure appoggiati a AC_CHECK_LIB o pkgtool
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
           -<! Failure is not an option...it's bundled with Microsoft !>-


Ehm... Non ce ne sono...
Non e' che e' necessario installare qualche pacchetto aggiuntivo? Ho gia'
aclocal e aclocal-archive (nomi Debian), "di piu' nin zo'"...
Ho gia' provato con alcune stringhe (ad esempio AC_XFCE_HEADERS) reperite
qua e la' in alcuni configure che mi son capitati tra le mani, ma risultano
sempre poi in un errore.
Non esiste un elenco *completo* (o quasi...) delle macro disponibili in
Rete? Cosi' ogni volta che ho bisogno cerco li'...
Grazie ancora :-)


 aclocal e aclocal-archive (nomi Debian), "di piu' nin zo'"...
devi usare le macro di pkg_config.
vedi l'altro post.

Le macro di pkgconfig sono sempre in /usr/share/aclocal, cmq. Almeno su 
Gentoo.
Dodiesis ha scritto:



Anche il pacchetto pkg-config e' installato!
Mah, proprio non capisco: questo e' il contenuto della mia
/usr/share/aclocal:
freetype2.m4
glib-2.0.m4
glib-gettext.m4
gtk-2.0.m4
libtool.m4
libxml2.m4
ltdl.m4
pkg.m4
In /usr/share ho pure un'altra directory, chiamata aclocal-1.4, e contiene:
amversion.m4
ccstdc.m4
cond.m4
dmalloc.m4
error.m4
header.m4
init.m4
lex.m4
lispdir.m4
maintainer.m4
missing.m4
mktime.m4
multi.m4
obstack.m4
protos.m4
ptrdiff.m4
regex.m4
sanity.m4
strtod.m4
termios.m4
winsz.m4
I pacchetti -dev che mi interessano sono tutti installati (infatti compilo
bene tutto quel che ci fa riferimento).
Forse quei .m4 in /usr/share/aclocal vengono generati quando si installa
qualcosa di nuovo? Perche' in effetti tutti i pacchetti che fanno
riferimento agli autotools li ho installati *dopo* aver apt-gettato i vari
libxfce*-dev: potrebbe essere di aiuto disinstallarli e reinstallarli
sperando che compaiano i relativi m4?



Sì, forse ho generato io un po' di confusione. E' vero che bisogna usare
pkg_config (il mio suggerimento di guardare se ci sono macro in
/usr/share/aclocal non è errato: tante vole ci sono già senza
scriversele, ma a volte ci tocca).
In questo caso infatti siamo fortunati: ci basterà la macro
PKG_CHECK_MODULES in pkg.m4.
Explicandus sum.
Se provi, credo che tu possa chiamare pkg_config tipo:
pkg_config --cflags --libs gtk+-2.0
Questo è anche quello che vuoi succeda in 
configure.ac
 (solo che con
xfce al posto di gtk+-2.0, o comunque prova tu quale sia il giusto
completamento per il comando di cui sopra).
Per fare questo, dovrai usare una macro come:
PKG_CHECK_MODULES( [nomepkg],
                    [versioneminima],
                    [cose da fare se trovato (puoi lasciarlo
                      vuoto, usa i due punti, ":"],
                    [cose da fare se non trovato, puoi
                      lasciare ":" e darà un messaggio
                      di errore di default)]
per controllare che esista pkg-config sul sistema dell'utente finale
(sennò non possiamo combinare niente) ed esportare le variabili
nomepkg_CFLAGS e nomepkg_LIBS.
Esempio, ammesso che il comando giusto sia:
pkg_config --cflags --libs xfce
PKG_CHECK_MODULES( [xfce], [1.0], :, : )
Questo definirà le variabili per tutti i Makefiles.am XFCE_CFLAGS e
XFCE_LIBS (mi pare che minuscolo e maiuscolo nei makefiles sia lo
stesso, ma se hai problemi prova con xfce_CFLAGS e xfce_LIBS), che
potrai quindi aggiungere alle regole di compilazione. Es:
AM_CFLAGS += $(XFCE_FLAGS) -Wall -pedantic
nome_eseguibile_LDFLAGS = $(XFCE_LIBS)
(spero le ultime due righe siano giuste, controlla la documentazione)
Spero sia più chiaro, e scusa se ho generato caos... se riesci,
prenderti il tempo di leggere la macro in pkg.m4, è facile e ti dà
un'idea di come funzioni autoconf.
Ciao,
--
Matteo Settenvini
FSF Associated Member
Email : 
mat...@member.fsf.org
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d--(-) s+:- a-- C++ UL+++
P?>++ L+++>$ E+>+++ W+++ N+ o?
w--- O- M++ V? PS++ PE- Y+>++
PGP+++ t+ 5 X- R tv-(--) b+++
DI+ D++ G++ e h+ r- y?
------END GEEK CODE BLOCK------

 /usr/share/aclocal:
?!
non devi guardare li...
ma in /usr/lib/pkgconfig/
infatti:
dodiesis@hobbes [ ~ ]
   $ ls /usr/lib/pkgconfig/  | grep xfce
libxfce4mcs-client-1.0.pc
libxfce4mcs-manager-1.0.pc
libxfce4util-1.0.pc
e nota:
dodiesis@hobbes [ ~ ]
   $ dpkg -L libxfce4mcs-dev  | grep pc
/usr/lib/pkgconfig/libxfce4mcs-client-1.0.pc
/usr/lib/pkgconfig/libxfce4mcs-manager-1.0.pc
man pkgconfig
in pratica ogni libreria installa un file.pc in /usr/lib/pkgconfig/ con le
info per la compilazione.
se nel tuo configure metti
PKG_CHECK_MODULES(PACKAGE, libxfcegui4-1.0 >= 0.1)
verrano cercati dal pkgconfig i file "libxfcegui4-1.0.pc" e ne verrà
checcata la versione a >= 0.1
prova.
è piu' semplice provarlo che spiegarlo.


Perfetto: ho messo
PKG_CHECK_MODULES( LIBXFCEDEV, libxfce4mcs-client-1.0 >= 4.0.0
libxfce4mcs-manager-1.0 >= 4.0.0 )
ed ha acquisito una certa parvenza di funzionamento :-)
Ora, quando eseguo "make" (dopo "aclocal -I config", "autoheader", "automake
--foreign --add-missing --copy", "autoconf" e "./configure" come letto
nell'Autobook -> 
http://sources.redhat.com/autobook/
 ) entra in una sorta di
ciclo infinito per cui continua a ripetere l'esecuzione del configure, ma
credo dipenda da un errore nel Makefile.am...
Vedro' di correggere...
Grazie :-)



Confermo: funziona tutto :-)
Solo un'ultima (spero!) domanda (OT, oltretutto :-\ ): e' corretto usare
PKG_CHECK_MODULES per tutto (anche glib o altro) nonostante esistano gia'
altre macro predisposte allo scopo?
Piu' che altro per non dover cercare ogni volta la macro esatta, ma poter
fare un "ls /usr/lib/pkgconfig/ | grep quel_che_serve" e rendere tutto assai
piu' sbrigativo...
Grazie ancora :-)
