autoconf-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: Optimizing AC_LANG


From: Akim Demaille
Subject: FYI: Optimizing AC_LANG
Date: 19 Jan 2001 15:01:34 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.1 (Crater Lake)

In the process of diffing 2 days old configures to understand what
changed for Patrick, I fell on this.

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        Optimizing AC_LANG was broken.  Test and fix.

        * aclang.m4 (AC_LANG(C), AC_LANG(C++), AC_LANG(Fortran 77)): Don't
        use _AC_LANG_ABBREV so that you don't depend upon _AC_LANG.
        (_AC_LANG_SET): New.
        (AC_LANG, AC_LANG_PUSH, AC_LANG_POP): Use it.
        * tests/compile.at: Test AC_LANG, AC_LANG_PUSH & AC_LANG_POP.

Index: aclang.m4
===================================================================
RCS file: /cvs/autoconf/aclang.m4,v
retrieving revision 1.111
diff -u -u -r1.111 aclang.m4
--- aclang.m4 2001/01/18 09:30:10 1.111
+++ aclang.m4 2001/01/19 14:02:10
@@ -108,37 +108,46 @@
        [AC_FATAL([$1: unknown language: $2])])])
 
 
+# _AC_LANG_SET(OLD, NEW)
+# ----------------------
+# Output the shell code needed to switch from OLD language to NEW language.
+# Optimize if OLD == NEW.
+m4_defun([_AC_LANG_SET],
+[m4_if([$1], [$2], [],
+       [_AC_LANG_DISPATCH([AC_LANG], [$2])])])
+
+
 # AC_LANG(LANG)
 # -------------
 # Set the current language to LANG.
-AC_DEFUN([AC_LANG],
-[m4_ifdef([_AC_LANG],
-          [m4_if(m4_defn([_AC_LANG]), [$1], [],
-                 [m4_define([_AC_LANG], [$1])])dnl
-_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])])
+m4_defun([AC_LANG],
+[_AC_LANG_SET(m4_ifdef([_AC_LANG], [m4_defn([_AC_LANG])]),
+              [$1])dnl
+m4_define([_AC_LANG], [$1])])
 
 
 # AC_LANG_PUSH(LANG)
 # ------------------
 # Save the current language, and use LANG.
-m4_define([AC_LANG_PUSH],
-[m4_pushdef([_AC_LANG],
-            m4_ifdef([_AC_LANG],
-                     [m4_defn([_AC_LANG])]))dnl
-AC_LANG([$1])])
+m4_defun([AC_LANG_PUSH],
+[_AC_LANG_SET(m4_ifdef([_AC_LANG], [m4_defn([_AC_LANG])]),
+              [$1])dnl
+m4_pushdef([_AC_LANG], [$1])])
 
 
 # AC_LANG_POP([LANG])
 # -------------------
 # If given, check that the current language is LANG, and restore the
 # previous language.
-m4_define([AC_LANG_POP],
+m4_defun([AC_LANG_POP],
 [m4_ifval([$1],
-     [m4_if([$1], m4_defn([_AC_LANG]), [],
-            [m4_fatal([$0($1): unexpected current language: ]_AC_LANG)])])dnl
+ [m4_if([$1], m4_defn([_AC_LANG]), [],
+  [m4_fatal([$0($1): unexpected current language: ]m4_defn([_AC_LANG]))])])dnl
+m4_pushdef([$0 OLD], m4_defn([_AC_LANG]))dnl
 m4_popdef([_AC_LANG])dnl
-m4_if(_AC_LANG, [_AC_LANG], [AC_FATAL([too many $0])])dnl
-AC_LANG(_AC_LANG)])
+_AC_LANG_SET(m4_defn([$0 OLD]), m4_defn([_AC_LANG]))dnl
+m4_popdef([$0 OLD])dnl
+])
 
 
 # AC_LANG_SAVE
@@ -161,14 +170,14 @@
 # ---------------
 # Return a short signature of _AC_LANG which can be used in shell
 # variable names, or in M4 macro names.
-m4_define([_AC_LANG_ABBREV],
+m4_defun([_AC_LANG_ABBREV],
 [_AC_LANG_DISPATCH([$0], _AC_LANG, $@)])
 
 
 # AC_LANG_ASSERT(LANG)
 # --------------------
 # Current language must be LANG.
-m4_define([AC_LANG_ASSERT],
+m4_defun([AC_LANG_ASSERT],
 [m4_if(_AC_LANG, $1, [],
        [m4_fatal([$0: current language is not $1: ] _AC_LANG)])])
 
@@ -187,7 +196,7 @@
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext 
$LIBS >&AS_MESSAGE_LOG_FD'
-ac_compiler_gnu=$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
 ])
 
 
@@ -214,7 +223,7 @@
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS 
conftest.$ac_ext $LIBS >&AS_MESSAGE_LOG_FD'
-ac_compiler_gnu=$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 ])
 
 
@@ -239,7 +248,7 @@
 [ac_ext=f
 ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
 ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 
>&AS_MESSAGE_LOG_FD'
-ac_compiler_gnu=$ac_cv_[]_AC_LANG_ABBREV[]_compiler_gnu
+ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 ])
 
 
Index: tests/compile.at
===================================================================
RCS file: /cvs/autoconf/tests/compile.at,v
retrieving revision 1.13
diff -u -u -r1.13 compile.at
--- tests/compile.at 2001/01/12 09:39:27 1.13
+++ tests/compile.at 2001/01/19 14:02:11
@@ -7,7 +7,77 @@
 # primitive, so check those first.
 
 
-##- ----------- ##
+## --------- ##
+## AC_LANG.  ##
+## --------- ##
+
+# Check that AC_LANG is optimizing, i.e., we don't output useless
+# language changes.  Still, make sure we do change the language when
+# needed :)
+
+AT_SETUP([AC_LANG])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+AC_LANG(C)
+AC_LANG(C++)
+AC_LANG(C++)
+AC_LANG(Fortran 77)
+AC_LANG(Fortran 77)
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK([sed -n 's/^ac_ext=//p' configure], 0,
+[c
+cc
+f
+])
+
+AT_CLEANUP
+
+
+## ------------------------------------- ##
+## AC_LANG, AC_LANG_PUSH & AC_LANG_POP.  ##
+## ------------------------------------- ##
+
+AT_SETUP([AC_LANG, AC_LANG_PUSH & AC_LANG_POP])
+
+AT_DATA([configure.ac],
+[[AC_INIT
+# C
+AC_LANG(C)
+# C
+AC_LANG_PUSH(C)
+# C C
+AC_LANG_PUSH(C++)
+# C++ C C
+AC_LANG(C++)
+# C++ C C
+AC_LANG_PUSH(Fortran 77)
+# F77 C++ C C
+AC_LANG_POP(Fortran 77)
+# C++ C C
+AC_LANG(C++)
+# C++ C C
+AC_LANG_POP(C++)
+# C C
+AC_LANG_POP(C)
+# C
+]])
+
+AT_CHECK_AUTOCONF
+AT_CHECK([sed -n 's/^ac_ext=//p' configure], 0,
+[c
+cc
+f
+cc
+c
+])
+
+AT_CLEANUP
+
+
+## ------------ ##
 ## Extensions.  ##
 ## ------------ ##
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]