summaryrefslogtreecommitdiff
path: root/config/antlr.m4
blob: fbc4dbe566ad3b883dc6f8169cd8dd36fdd5b67e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
##
# Check for ANTLR's runantlr script. Will set ANTLR to the location of the
# runantlr script  
##
AC_DEFUN([AC_PROG_ANTLR], [
  
  # Get the location of the runantlr script
  AC_ARG_WITH(
    [antlr],
    AC_HELP_STRING(
      [--with-antlr=RUNANTLR],
      [location of the ANTLR's `runantlr` script]      
    ),
    ANTLR="$withval",
    ANTLR="runantlr"     
  )  

  # Check the existance of the runantlr script
  AC_CHECK_PROG(ANTLR, "$ANTLR", "$ANTLR", [])
  if test no$ANTLR = "no"; 
  then
    AC_MSG_WARN(
      [Couldn't find the runantlr script, make sure that the parser code has 
      been generated already. To obtain ANTLR see <http://www.antlr.org/>.]
    )
    AC_MSG_RESULT(no)
  fi  

  # Define the ANTL related variables   
  AC_SUBST(ANTLR)  
])

##
# Check the existnace of the ANTLR C++ runtime library and headers
# Will set ANTLR_CPPFLAGS and ANTLR_LIBS to the location of the ANTLR headers
# and library respectively
##
AC_DEFUN([AC_LIB_ANTLR],[

  # Get the location of the  ANTLR c++ includes and libraries
  AC_ARG_WITH(
    [antlr-prefix],
    AC_HELP_STRING(
      [--with-antlr-prefix=PATH],
      [set the search path for ANTLR headers and libraries to `PATH/include`
       and `PATH/lib`. By default we look in /usr, /usr/local, /opt and 
       /opt/local.
      ]
    ),
    ANTLR_PREFIXES="$withval",
    ANTLR_PREFIXES="/usr/local /usr /opt/local /opt"
  )

  AC_MSG_CHECKING(for antlr C++ runtime library)

  # Use C++ and remember the variables we are changing 
  AC_LANG_PUSH(C++)
  OLD_CPPFLAGS="$CPPFLAGS"
  OLD_LIBS="$LIBS"
  
  # Try all the includes/libs set in ANTLR_PREFIXES
  for antlr_prefix in $ANTLR_PREFIXES
  do    
    CPPFLAGS="$OLD_CPPFLAGS -I$antlr_prefix/include"
    LIBS="$OLD_LIBS -L$antlr_prefix/lib -lantlr"
    AC_LINK_IFELSE(
      [
        #include <antlr/CommonAST.hpp>
        class MyAST : public ANTLR_USE_NAMESPACE(antlr)CommonAST {
        };
        int main() {
          MyAST ast;
        }
      ], 
      [
        AC_MSG_RESULT(found in $antlr_prefix)
        ANTLR_INCLUDES="-I$antlr_prefix/include"
        ANTLR_LDFLAGS="-L$antlr_prefix/lib -lantlr-pic"
        break
      ], 
      [
        AC_MSG_RESULT(no)
        AC_MSG_ERROR([ANTLR C++ runtime not found, see <http://www.antlr.org/>])
      ]
    )
  done
  
  # Return the old compile variables and pop the language.
  LIBS="$OLD_LIBS"
  CPPFLAGS="$OLD_CPPFLAGS"
  AC_LANG_POP()

  # Define the ANTLR include/libs variables
  AC_SUBST(ANTLR_INCLUDES)
  AC_SUBST(ANTLR_LDFLAGS)
])
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback