Newsgroup: it.comp.os.linux.development
Titolo: Scrivere macro per autoconf

Ciao a tutti,
sono un novello programmatore nell'ambiente GNU/Linux. Sto cercando di 
scrivere una macro di Autoconf da buttare dentro il mio 
configure.ac
, 
che controlli se il compilatore supporta una certa flag. E` la prima 
volt che provo... ecco cos'ho scritto:
# AX_GXX_CHECK_FLAG([--flag-to-check])
# --------------
# Checks if the -* flag works for this compiler.
AC_DEFUN([AX_GXX_CHECK_FLAG],
[ax_save_CXXFLAGS=$CXXFLAGS
CXXFLAGS="$1"
AC_MSG_CHECKING([whether $CXX accepts $1])
_AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
		[ax_prog_cxx_flag=yes],
		[ax_prog_cxx_flag=no])
AC_MSG_RESULT([$ax_prog_cxx_flag])
if test $ax_prog_cxx_flag = yes; then
	if test "$GXX" = yes; then
		CXXFLAGS="$1 $ax_save_CXXFLAGS"
	fi
else
	CXXFLAGS="$ax_save_CXXFLAGS"
fi
])# AX_GXX_CHECK_FLAG
# --------------
Per poi richiamarla come (ad esempio):
AX_GXX_CHECK_FLAG([-Wall])
AX_GXX_CHECK_FLAG([-pedantic])
AX_GXX_CHECK_FLAG([-Wextra])
AX_GXX_CHECK_FLAG([-fantasy])
Il problema è che, ovviamente, "-fantasy" me la sono inventata di sana 
pianta, e la funzione di cui sopra dovrebbe ritornare un bel "no". 
Invece continua comunque con uno "yes". Ma AC_LANG_PROGRAM() non prova a 
compilare un programma di prova con i flag in quel momento contenuti in 
CXXFLAGS? Cosa combina invece?
E` per me importante riuscire a fare questo controllo, e vi ringrazio in 
anticipo di ogni aiuto che potrete darmi.
Grazie mille,
---
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------

 anticipo di ogni aiuto che potrete darmi.
Ognuno ha le sue prioritą. Se appena graffi la superficie degli autotools
salta fuori un bordello abnorme, ma che naturalmente puoi gestire con il comodo
linguaggio m4.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail** 
-<! Le donne e le salsicce sono la stessa cosa: pelle fuori e maiale dentro !>-

 linguaggio m4.
Beh, quando devi portare il codice con magari differenti versioni di 
g++, avere un controllo del genere non č stupido (altrimenti, manco 
compila...)
-- 


 *) Che versione di autoconf usi?
Scusa, mancava la versione: uso la 2.59.
Grazie e ciao,


 compila...)
Non lo metto in dubbio. Non ho mai avuto necessità di stare attento agli
switch al compilatore.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
-<! Computer programmers never die, they just raise an unhandled exception.!>-

[Spero non arrivi due volte, oggi Thunderbird fa le bizze...]
 > Coraggioso...
Beh, GNU/Linux è bello perché c'è il codice sorgente sottomano, usiamolo...
 >
 > CXXBACKUP=$CXXFLAGS
 > CXXFLAGS="$TESTFLAG $CXXFLAGS"
 >
 > e poi eventualmente rimetti CXXBACKUP
 >
Si', era già quello che tentavo di fare. Ho risolto proprio oggi che mi
sono rimesso a leggere qua e là le varie guide. L'errore stava nel non
buttare sullo stack il linguaggio C++ (altrimenti, chissà lui con che
compilatore prova il test, magari con F77... e quindi se ne infischiava
delle CXXFLAGS).
Riporto il codice, dovesse essere utile a qualcun altro... in
particolare volevo che sul mio portatile (con g++ 3.4) la flag "-Wextra"
fosse attivata, tuttavia all'insegnante che ha il g++ 3.3 si impallava
tutto e quindi erano urla e stridor di denti.
AC_DEFUN( [AX_CHECK_CXXFLAG],
[
   AC_MSG_CHECKING([whether $CXX supports the -$1 flag])
   ax_check_cxxflags=$CXXFLAGS
   CXXFLAGS="-$1"
   AC_LANG_PUSH(C++)
   AC_COMPILE_IFELSE( AC_LANG_PROGRAM([], [return 0;]),
     [ AC_MSG_RESULT([yes])
       CXXFLAGS="-$1 $ax_check_cxxflags" ],
     [ AC_MSG_RESULT([no])
       CXXFLAGS=$ax_check_cxxflags ]
   )
   AC_LANG_POP
])
ed il classico test:
AX_CHECK_CXXFLAG(Wextra) dnl solo gcc >= 3.4
AX_CHECK_CXXFLAG(Wall)
AX_CHECK_CXXFLAG(pedantic)
AX_CHECK_CXXFLAG(fantasy) dnl che non esiste
Dovrebbe essere banale adattarlo per compilatori per altri linguaggi. Un
grazie a Giuseppe per le risposte.
Saluti,



Si', era già quello che tentavo di fare. Ho risolto proprio oggi che mi



ed il classico test:


Saluti,


 grazie a Giuseppe per le risposte.
Voglio dei soldi.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Drink To Your Brothers Who Are Never To Fall, We Are Brothers Of Metal
  		Here In The Hall! !>- Manowar - Brothers Of Metal PT1