1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3  * ac-scanner.h
4  * Copyright (C) Sébastien Granjoux 2009 <seb.sfo@free.fr>
5  *
6  * main.c is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * main.c is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14  * See the GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef _AC_SCANNER_H_
21 #define _AC_SCANNER_H_
22 
23 #include "am-project.h"
24 
25 #include <glib.h>
26 #include <gio/gio.h>
27 
28 G_BEGIN_DECLS
29 
30 /* Token location is found directly from token value. We don't maintain a
31  * independent position. */
32 #define YYLTYPE AnjutaToken*
33 #define YYSTYPE AnjutaToken*
34 
35 typedef struct _AmpAcScanner AmpAcScanner;
36 
37 AmpAcScanner *amp_ac_scanner_new (AmpProject *project);
38 void amp_ac_scanner_free (AmpAcScanner *scanner);
39 
40 gboolean amp_ac_scanner_parse (AmpAcScanner *scanner, AnjutaTokenFile *file, GError **error);
41 AnjutaToken* amp_ac_scanner_parse_token (AmpAcScanner *scanner, AnjutaToken *root, AnjutaToken *content, gint start, GFile *filename, GError **error);
42 
43 void amp_ac_scanner_load_module (AmpAcScanner *scanner, AnjutaToken *module);
44 void amp_ac_scanner_load_config (AmpAcScanner *scanner, AnjutaToken *list);
45 void amp_ac_scanner_load_properties (AmpAcScanner *scanner, AnjutaToken *macro, AnjutaToken *args);
46 void amp_ac_scanner_include (AmpAcScanner *scanner, AnjutaToken *list);
47 void amp_ac_scanner_update_variable (AmpAcScanner *scanner, AnjutaToken *variable);
48 void amp_ac_scanner_subst_variable (AmpAcScanner *scanner, AnjutaToken *list);
49 
50 void amp_ac_yyerror (YYLTYPE *loc, AmpAcScanner *scanner, char const *s);
51 
52 enum
53 {
54 	/* Order is important as the backend will try to follow it */
55 	AC_TOKEN_FIRST_ORDERED_MACRO = ANJUTA_TOKEN_USER,
56 	/* requirements & informations */
57 	AC_TOKEN_AC_PREREQ,
58 	AC_TOKEN_AC_INIT,
59 	AC_TOKEN_AC_CONFIG_HEADERS,
60 	AC_TOKEN_AC_CONFIG_SRCDIR,
61 	AC_TOKEN_AC_CONFIG_MACRO_DIR,
62 	AC_TOKEN_AM_INIT_AUTOMAKE,
63 
64 	/* Options */
65 	AC_TOKEN_AM_MAINTAINER_MODE,
66 	AC_TOKEN_AC_ARG_ENABLE,
67 
68 	/* Check for programs */
69 	AC_TOKEN_AC_PROG_CC,
70 	AC_TOKEN_AC_PROG_CPP,
71 	AC_TOKEN_AC_PROG_CXX,
72 	AC_TOKEN_AC_PROG_LEX,
73 	AC_TOKEN_AC_PROG_YACC,
74 	AC_TOKEN_AC_PROG_RANLIB,
75 	AC_TOKEN_IT_PROG_INTLTOOL,
76 	AC_TOKEN_LT_PREREQ,
77 	AC_TOKEN_LT_INIT,
78 	AC_TOKEN_AM_PROG_LIBTOOL,
79 	AC_TOKEN_AC_PROG_LIBTOOL,
80 	AC_TOKEN_PKG_PROG_PKG_CONFIG,
81 	AC_TOKEN_AC_CHECK_PROG,
82 	AC_TOKEN_AM_GLIB_GNU_GETTEXT,
83 
84 	/* Check for libraries */
85 	AC_TOKEN_PKG_CHECK_MODULES,
86 	AC_TOKEN_AC_CHECK_LIB,
87 
88 	/* Check for headers */
89 	AC_TOKEN_AC_HEADER_STDC,
90 	AC_TOKEN_AC_CHECK_HEADERS,
91 	AC_TOKEN_AC_EGREP_HEADER,
92 
93 	/* Check for types & structures */
94 	AC_TOKEN_AC_C_CONST,
95 	AC_TOKEN_AC_OBJEXT,
96 	AC_TOKEN_AC_EXEEXT,
97 	AC_TOKEN_AC_TYPE_SIZE_T,
98 	AC_TOKEN_AC_TYPE_OFF_T,
99 
100 	/* Check for functions */
101 	AC_TOKEN_AC_CHECK_FUNCS,
102 
103 	/* Output files */
104 	AC_TOKEN_AC_CONFIG_FILES,
105 	AC_TOKEN_OBSOLETE_AC_OUTPUT,
106 	AC_TOKEN_AC_OUTPUT,
107 	AC_TOKEN_LAST_ORDERED_MACRO,
108 
109 	AC_TOKEN_AC_SUBST,
110 
111 	AC_TOKEN_SPACE_LIST,
112 	AC_TOKEN_OPEN_STRING,
113 	AC_TOKEN_CLOSE_STRING
114 };
115 
116 enum
117 {
118 	AC_SPACE_LIST_STATE = 1
119 };
120 
121 G_END_DECLS
122 
123 #endif
124