1 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
2 /*
3  * am-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 _AM_SCANNER_H_
21 #define _AM_SCANNER_H_
22 
23 #include "am-project.h"
24 
25 #include "libanjuta/anjuta-token.h"
26 #include "libanjuta/anjuta-token-file.h"
27 
28 #include <glib.h>
29 #include <gio/gio.h>
30 
31 G_BEGIN_DECLS
32 
33 //#define YYSTYPE AnjutaToken*
34 #define YYLTYPE AnjutaToken*
35 #define YYSTYPE AnjutaToken*
36 
37 typedef struct _AmpAmScanner AmpAmScanner;
38 
39 AmpAmScanner *amp_am_scanner_new (AmpProject *project, AmpGroupNode *group);
40 void amp_am_scanner_free (AmpAmScanner *scanner);
41 
42 AnjutaToken *amp_am_scanner_parse_token (AmpAmScanner *scanner, AnjutaToken *root, AnjutaToken *content, GFile *filename, GError **error);
43 
44 void amp_am_scanner_set_am_variable (AmpAmScanner *scanner, AnjutaToken *variable);
45 void amp_am_scanner_include (AmpAmScanner *scanner, AnjutaToken *name);
46 void amp_am_scanner_update_variable (AmpAmScanner *scanner, AnjutaToken *variable);
47 
48 void amp_project_set_am_variable (AmpProject* project, AmpGroupNode* group, AnjutaToken *variable, GHashTable *orphan_properties);
49 
50 void amp_am_scanner_parse_variable (AmpAmScanner *scanner, AnjutaToken *variable);
51 void amp_am_scanner_parse_ac_variable (AmpAmScanner *scanner, AnjutaToken *variable);
52 
53 void amp_am_yyerror (YYLTYPE *loc, AmpAmScanner *scanner, char const *s);
54 
55 typedef enum
56 {
57 	/* Order is important as the backend will try to follow it */
58 	AM_TOKEN_FIRST_ORDERED_MACRO = ANJUTA_TOKEN_USER,
59 	AM_TOKEN_SUBDIRS,
60 	AM_TOKEN_DIST_SUBDIRS,
61 	AM_TOKEN__DATA,
62 	AM_TOKEN__HEADERS,
63 	AM_TOKEN__LIBRARIES,
64 	AM_TOKEN__LISP,
65 	AM_TOKEN__LTLIBRARIES,
66 	AM_TOKEN__MANS,
67 	AM_TOKEN__PROGRAMS,
68 	AM_TOKEN__PYTHON,
69 	AM_TOKEN__SCRIPTS,
70 	AM_TOKEN__TEXINFOS,
71 	AM_TOKEN__JAVA,
72 	AM_TOKEN_DIR,
73 	AM_TOKEN__LDFLAGS,
74 	AM_TOKEN__CPPFLAGS,
75 	AM_TOKEN__CFLAGS,
76 	AM_TOKEN__CXXFLAGS,
77 	AM_TOKEN__JAVACFLAGS,
78 	AM_TOKEN__VALAFLAGS,
79 	AM_TOKEN__FCFLAGS,
80 	AM_TOKEN__OBJCFLAGS,
81 	AM_TOKEN__LFLAGS,
82 	AM_TOKEN__YFLAGS,
83 
84 	AM_TOKEN_FIRST_ORDERED_TARGET_MACRO,
85 	AM_TOKEN__SOURCES,
86 	AM_TOKEN_TARGET_CPPFLAGS,
87 	AM_TOKEN_TARGET_CFLAGS,
88 	AM_TOKEN_TARGET_CXXFLAGS,
89 	AM_TOKEN_TARGET_OBJCFLAGS,
90 	AM_TOKEN_TARGET_VALAFLAGS,
91 	AM_TOKEN_TARGET_JAVACFLAGS,
92 	AM_TOKEN_TARGET_LFLAGS,
93 	AM_TOKEN_TARGET_YFLAGS,
94 	AM_TOKEN_TARGET_FCFLAGS,
95 	AM_TOKEN_TARGET_LDFLAGS,
96 	AM_TOKEN_TARGET_LIBADD,
97 	AM_TOKEN_TARGET_LDADD,
98 	AM_TOKEN_TARGET_DEPENDENCIES,
99 	AM_TOKEN_LAST_ORDERED_TARGET_MACRO,
100 
101 	AM_TOKEN_LAST_ORDERED_MACRO,
102 
103 } AmTokenType;
104 
105 G_END_DECLS
106 
107 #endif
108