Arquivos
hhvm/hphp/util/parser/rules.mk
T
Rasmus Lerdorf be93cbfa08 Fix Bison paths
Some internal FB bison version thing?
2013-05-17 23:37:36 -03:00

28 linhas
1.7 KiB
Makefile

.PHONY: hphp.tab.cpp
hphp.tab.cpp: $(PROJECT_ROOT)/src/util/parser/hphp.y
@echo "Generating parser code..."
export BISON_PKGDATADIR=\
$(realpath $(EXTERNAL_TOOLS_ROOT))/share/bison
$(V)$(EXTERNAL_TOOLS_ROOT)/bin/bison \
-p$(YYPREFIX) --verbose --locations -d -o$@ $<
@perl -p -i -n -e "s/(T_\w+) = ([0-9]+)/YYTOKEN(\\2, \\1)/" \
hphp.tab.hpp
@php -r "file_put_contents('hphp.tab.hpp', preg_replace('/\{([ \r\n\t]+YYTOKEN\(([0-9]+),)/s', \"{\n#ifndef YYTOKEN_MIN\n#define YYTOKEN_MIN \$$2\n#endif\$$1\", file_get_contents('hphp.tab.hpp')));"
@php -r "file_put_contents('hphp.tab.hpp', preg_replace('/(YYTOKEN\(([0-9]+), T_\w+\)[ \r\n\t]+\};)/s', \"\$$1\n#ifndef YYTOKEN_MAX\n#define YYTOKEN_MAX \$$2\n#endif\n\", file_get_contents('hphp.tab.hpp')));"
@perl -p -i -n -e "s/ enum yytokentype/#ifndef YYTOKEN_MAP\n#define YYTOKEN_MAP enum yytokentype\n#define YYTOKEN(num, name) name = num\n#endif\n YYTOKEN_MAP/" hphp.tab.hpp
$(V)if ! diff -q hphp.tab.hpp $(PROJECT_ROOT)/src/util/parser/hphp.tab.hpp &>/dev/null; then \
mv -f hphp.tab.hpp $(PROJECT_ROOT)/src/util/parser/; \
else \
rm -f hphp.tab.hpp; \
fi
@perl -p -i -n -e "s/first_line/line0/" $@
@perl -p -i -n -e "s/last_line/line1/" $@
@perl -p -i -n -e "s/first_column/char0/" $@
@perl -p -i -n -e "s/last_column/char1/" $@
@perl -p -i -n -e "s/union/struct/" $@
@perl -p -i -n -e "s/YYSTACK_ALLOC \(YYSTACK_BYTES \(yystacksize\)\);\n/YYSTACK_ALLOC \(YYSTACK_BYTES \(yystacksize\)\);\n memset(yyptr, 0, YYSTACK_BYTES (yystacksize));\n/" $@
@perl -p -i -n -e "s/YYSTACK_RELOCATE \(yyvs_alloc, yyvs\)/YYSTACK_RELOCATE_RESET (yyvs_alloc, yyvs)/" $@
@perl -p -i -n -e "s/YYSTACK_FREE \(yyss\)/YYSTACK_FREE (yyss);\n YYSTACK_CLEANUP/" $@
include $(PROJECT_ROOT)/src/rules.mk