aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMu Qiao <qiaomuf@gentoo.org>2011-06-21 19:17:02 +0800
committerMu Qiao <qiaomuf@gentoo.org>2011-06-21 19:21:39 +0800
commit88edafb98b0bbb1beee98b2cd538b887a844215f (patch)
tree3ba4c4d970d894b01ed293f5f80c9a21562f782a /Makefile.am
parentParser: remove the here_string_op rule (diff)
downloadlibbash-88edafb98b0bbb1beee98b2cd538b887a844215f.tar.gz
libbash-88edafb98b0bbb1beee98b2cd538b887a844215f.tar.bz2
libbash-88edafb98b0bbb1beee98b2cd538b887a844215f.zip
Parser: support writing C++ code in the grammar
Diffstat (limited to 'Makefile.am')
-rw-r--r--Makefile.am57
1 files changed, 41 insertions, 16 deletions
diff --git a/Makefile.am b/Makefile.am
index a706c43..49b6392 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -72,7 +72,7 @@ EBUILD_RESULT = scripts/sunpinyin-2.0.3-r1.ebuild.result
TESTS = $(GUNIT_TESTS) $(BASH_TESTS) $(EBUILD_TESTS)
# these get cleaned so only add autogenerated stuff or modify CLEANFILES
-check_JAVA = bashast/bashastLexer.java bashast/bashastParser.java
+check_JAVA = bashast/java_libbashLexer.java bashast/java_libbashParser.java
AM_JAVACFLAGS = -source 1.4 -classpath @antlr_cp@
AM_CXXFLAGS = -std=c++0x
@@ -92,7 +92,10 @@ AM_CPPFLAGS += -D_GLIBCXX_DEBUG
endif
if HAVE_GTEST
-TESTS += cppunittests test/ast_printer_test.sh test/verify_bashs_test.sh test/verify_error_output_test.sh
+TESTS += cppunittests \
+ test/ast_printer_test.sh \
+ test/verify_bashs_test.sh \
+ test/verify_error_output_test.sh
check_PROGRAMS = cppunittests
cppunittests_SOURCES = test/run_tests.cpp \
@@ -148,24 +151,31 @@ ast_printer_LDFLAGS = -static
# linking will fail
ast_printer_CPPFLAGS = $(AM_CPPFLAGS) -U_GLIBCXX_DEBUG $(BOOST_CPPFLAGS)
-GENERATED_PARSER_C = libbashLexer.c libbashParser.c
-GENERATED_PARSER_H = libbashLexer.h libbashParser.h
+GENERATED_LEXER_CPP = libbashLexer.cpp
+GENERATED_LEXER_H = libbashLexer.h
+GENERATED_PARSER_CPP = libbashParser.cpp
+GENERATED_PARSER_H = libbashParser.h
GENERATED_WALKER_CPP = libbashWalker.cpp
GENERATED_WALKER_H = libbashWalker.h
-BUILT_SOURCES = $(GENERATED_PARSER_C) \
+BUILT_SOURCES = $(GENERATED_PARSER_CPP) \
$(GENERATED_PARSER_H) \
+ $(GENERATED_LEXER_CPP) \
+ $(GENERATED_LEXER_H) \
$(GENERATED_WALKER_CPP) \
$(GENERATED_WALKER_H) \
$(check_JAVA)
-CLEANFILES = $(GENERATED_PARSER_C) \
+CLEANFILES = $(GENERATED_PARSER_CPP) \
$(GENERATED_PARSER_H) \
+ $(GENERATED_LEXER_CPP) \
+ $(GENERATED_LEXER_H) \
$(GENERATED_WALKER_CPP) \
$(GENERATED_WALKER_H) \
$(check_JAVA) \
libbash.g \
+ java_libbash.g \
libbash.tokens \
libbash.tokens.md5 \
- bashast/bashast.tokens \
+ bashast/java_libbash.tokens \
libbashWalker.tokens \
javagrammar.run \
cgrammar.run \
@@ -203,8 +213,6 @@ libcppbash_la_SOURCES = src/common.h \
src/builtins/unset_builtin.h \
src/builtins/unset_builtin.cpp \
src/builtins/builtin_exceptions.h \
- $(GENERATED_PARSER_C) \
- $(GENERATED_PARSER_H) \
src/core/interpreter_exception.h \
src/core/unset_exception.h \
src/core/interpreter.cpp \
@@ -220,7 +228,16 @@ libcppbash_la_SOURCES = src/common.h \
# separate library because we need per file CXXFLAGS
# as antlr generated code does not pass our strict developer
# warning settings
-noinst_LTLIBRARIES = libwalker.la
+noinst_LTLIBRARIES = libparser.la libwalker.la
+libparser_la_SOURCES = $(GENERATED_PARSER_CPP) \
+ $(GENERATED_PARSER_H) \
+ $(GENERATED_LEXER_CPP) \
+ $(GENERATED_LEXER_H)
+
+libparser_la_CXXFLAGS = -std=c++0x \
+ -fvisibility=hidden \
+ -fvisibility-inlines-hidden
+
libwalker_la_SOURCES = $(GENERATED_WALKER_CPP) \
$(GENERATED_WALKER_H)
@@ -237,7 +254,7 @@ if DEVELOPER_MODE
libcppbash_la_CXXFLAGS += -Wconversion -Wsign-conversion
endif
libcppbash_la_CFLAGS = $(AM_CFLAGS) -fvisibility=hidden
-libcppbash_la_LIBADD = libwalker.la
+libcppbash_la_LIBADD = libparser.la libwalker.la
EXTRA_DIST = bashast/bashast.g \
bashast/libbashWalker.g \
@@ -274,12 +291,14 @@ ANTLR = @JAVA@ -classpath @antlr_cp@ org.antlr.Tool
cgrammar.run: libbash.g
$(AM_V_at)touch $@.tmp
$(AM_V_GEN)$(ANTLR) -fo . $<
+ $(AM_V_at)mv libbashParser.{c,cpp}
+ $(AM_V_at)mv libbashLexer.{c,cpp}
$(AM_V_at)mv $@.tmp $@
libbash.g: bashast/bashast.g
- $(AM_V_at)sed -e 's/ASTLabelType = CommonTree;/ASTLabelType = pANTLR3_BASE_TREE;/g' \
- -e 's/language = Java;/language = C;/g' \
- -e 's/grammar bashast;/grammar libbash;/g' $< > $@
+ $(AM_V_at)$(CC) -E -x c++ -D OUTPUT_C $< > $@
+ $(AM_V_at)sed -i '/^#.*/d' $@
+ $(AM_V_at)sed -i 's/C_INCLUDE \(.*\)/\1/' $@
# http://www.kolpackov.net/pipermail/notes/2004-September.txt
libbash.tokens.md5: libbash.tokens
@@ -294,14 +313,20 @@ walker.run: bashast/libbashWalker.g libbash.tokens.md5
$(AM_V_at)mv libbashWalker.{c,cpp}
$(AM_V_at)mv $@.tmp $@
-$(GENERATED_PARSER_C): cgrammar.run
+$(GENERATED_PARSER_CPP): cgrammar.run
$(GENERATED_PARSER_H): cgrammar.run
+$(GENERATED_LEXER_CPP): cgrammar.run
+$(GENERATED_LEXER_H): cgrammar.run
libbash.tokens: cgrammar.run
$(GENERATED_WALKER_CPP): walker.run
$(GENERATED_WALKER_H): walker.run
-javagrammar.run: bashast/bashast.g
+java_libbash.g: bashast/bashast.g
+ $(AM_V_at)$(CC) -E -x c++ -D OUTPUT_JAVA $< > $@
+ $(AM_V_at)sed -i '/^#.*/d' $@
+
+javagrammar.run: java_libbash.g
$(AM_V_at)touch $@.tmp
$(AM_V_GEN)$(ANTLR) -fo bashast $<
$(AM_V_at)mv $@.tmp $@