Skip to content

Commit e6e7729

Browse files
committed
Gererate prism source files dependencies from template.rb
1 parent 7ddc53b commit e6e7729

9 files changed

Lines changed: 208 additions & 16 deletions

File tree

common.mk

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -205,13 +205,6 @@ $(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/util/.time:
205205
$(Q) $(MAKEDIRS) $(@D)
206206
@$(NULLCMD) > $@
207207

208-
$(PRISM_SRCDIR)/srcs.mk: $(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/templates/template.rb) \
209-
$(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/generate-srcs.mk.rb)
210-
$(ECHO) Updating prism/srcs.mk
211-
$(BASERUBY) $(PRISM_SRCDIR)/generate-srcs.mk.rb > $@
212-
213-
srcs: $(PRISM_SRCDIR)/srcs.mk
214-
215208
EXPORTOBJS = $(DLNOBJ) \
216209
localeinit.$(OBJEXT) \
217210
loadpath.$(OBJEXT) \
@@ -1221,7 +1214,6 @@ incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \
12211214
{$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \
12221215
$(REVISION_H) \
12231216
$(UNICODE_DATA_HEADERS) $(ENC_HEADERS) \
1224-
$(top_srcdir)/prism/ast.h $(top_srcdir)/prism/diagnostic.h \
12251217
{$(VPATH)}id.h {$(VPATH)}probes.dmyh
12261218

12271219
insns: $(INSNS)
@@ -1310,6 +1302,11 @@ $(REVISION_H)$(yes_baseruby:yes=~disabled~):
13101302
# uncommon.mk: $(REVISION_H)
13111303
# $(MKFILES): $(REVISION_H)
13121304

1305+
# $(common_mk_includes) is set by config.status or GNUmakefile
1306+
common_mk__$(gnumake:yes=artifact)_ = uncommon.mk
1307+
common_mk_$(gnumake)_artifact_ = $(MKFILES)
1308+
$(common_mk__artifact_): $(srcdir)/common.mk $(common_mk_includes)
1309+
13131310
ripper_srcs: $(RIPPER_SRCS)
13141311

13151312
$(RIPPER_SRCS): $(srcdir)/parse.y $(srcdir)/defs/id.def
@@ -1982,3 +1979,4 @@ $(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}mini_builtin.c
19821979
$(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}miniprelude.c
19831980

19841981
!include $(srcdir)/prism/srcs.mk
1982+
!include $(srcdir)/depend

configure.ac

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4698,9 +4698,12 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [
46984698
sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
46994699
echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
47004700
AS_IF([test "$gnumake" != yes], [
4701-
echo ['$(MKFILES): $(srcdir)/common.mk $(srcdir)/depend $(srcdir)/prism/srcs.mk']
4702-
sed ['s/{\$([^(){}]*)[^{}]*}//g;/^!/d'] ${srcdir}/common.mk ${srcdir}/depend
4703-
cat ${srcdir}/prism/srcs.mk
4701+
# extract NMake-style include list
4702+
set = `sed -n 's/^!include *//p' ${srcdir}/common.mk`
4703+
echo common_mk_includes "@S|@*" # generate the macro assignment
4704+
shift
4705+
common_mk_includes="`echo \"@S|@*\" | sed 's|\$(srcdir)|.|g'`"
4706+
(cd ${srcdir} && sed -f tool/prereq.status common.mk ${common_mk_includes})
47044707
AS_IF([test "$YJIT_SUPPORT" = yes], [
47054708
cat ${srcdir}/yjit/not_gmake.mk
47064709
echo ['$(MKFILES): ${srcdir}/yjit/not_gmake.mk']

prism/srcs.mk

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
2+
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
3+
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml
4+
5+
srcs uncommon.mk: prism/.srcs.mk.time
6+
7+
prism/.srcs.mk.time:
8+
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
9+
$(PRISM_SRCDIR)/templates/template.rb \
10+
$(PRISM_SRCDIR)/srcs.mk.in
11+
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/srcs.mk $(PRISM_SRCDIR)/srcs.mk.in
12+
13+
realclean-prism-srcs::
14+
$(RM) $(PRISM_SRCDIR)/srcs.mk
15+
16+
realclean-srcs-local:: realclean-prism-srcs
17+
18+
main srcs: $(srcdir)/prism/api_node.c
19+
$(srcdir)/prism/api_node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/ext/prism/api_node.c.erb
20+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) ext/prism/api_node.c $@
21+
22+
realclean-prism-srcs::
23+
$(RM) $(srcdir)/prism/api_node.c
24+
25+
main incs: $(srcdir)/prism/ast.h
26+
$(srcdir)/prism/ast.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/ast.h.erb
27+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/ast.h $@
28+
29+
realclean-prism-srcs::
30+
$(RM) $(srcdir)/prism/ast.h
31+
32+
main incs: $(srcdir)/prism/diagnostic.h
33+
$(srcdir)/prism/diagnostic.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/diagnostic.h.erb
34+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/diagnostic.h $@
35+
36+
realclean-prism-srcs::
37+
$(RM) $(srcdir)/prism/diagnostic.h
38+
39+
main srcs: $(srcdir)/lib/prism/compiler.rb
40+
$(srcdir)/lib/prism/compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/compiler.rb.erb
41+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/compiler.rb $@
42+
43+
realclean-prism-srcs::
44+
$(RM) $(srcdir)/lib/prism/compiler.rb
45+
46+
main srcs: $(srcdir)/lib/prism/dispatcher.rb
47+
$(srcdir)/lib/prism/dispatcher.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dispatcher.rb.erb
48+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dispatcher.rb $@
49+
50+
realclean-prism-srcs::
51+
$(RM) $(srcdir)/lib/prism/dispatcher.rb
52+
53+
main srcs: $(srcdir)/lib/prism/dot_visitor.rb
54+
$(srcdir)/lib/prism/dot_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dot_visitor.rb.erb
55+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dot_visitor.rb $@
56+
57+
realclean-prism-srcs::
58+
$(RM) $(srcdir)/lib/prism/dot_visitor.rb
59+
60+
main srcs: $(srcdir)/lib/prism/dsl.rb
61+
$(srcdir)/lib/prism/dsl.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dsl.rb.erb
62+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dsl.rb $@
63+
64+
realclean-prism-srcs::
65+
$(RM) $(srcdir)/lib/prism/dsl.rb
66+
67+
main srcs: $(srcdir)/lib/prism/inspect_visitor.rb
68+
$(srcdir)/lib/prism/inspect_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/inspect_visitor.rb.erb
69+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/inspect_visitor.rb $@
70+
71+
realclean-prism-srcs::
72+
$(RM) $(srcdir)/lib/prism/inspect_visitor.rb
73+
74+
main srcs: $(srcdir)/lib/prism/mutation_compiler.rb
75+
$(srcdir)/lib/prism/mutation_compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/mutation_compiler.rb.erb
76+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/mutation_compiler.rb $@
77+
78+
realclean-prism-srcs::
79+
$(RM) $(srcdir)/lib/prism/mutation_compiler.rb
80+
81+
main srcs: $(srcdir)/lib/prism/node.rb
82+
$(srcdir)/lib/prism/node.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/node.rb.erb
83+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/node.rb $@
84+
85+
realclean-prism-srcs::
86+
$(RM) $(srcdir)/lib/prism/node.rb
87+
88+
main srcs: $(srcdir)/lib/prism/reflection.rb
89+
$(srcdir)/lib/prism/reflection.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/reflection.rb.erb
90+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/reflection.rb $@
91+
92+
realclean-prism-srcs::
93+
$(RM) $(srcdir)/lib/prism/reflection.rb
94+
95+
main srcs: $(srcdir)/lib/prism/serialize.rb
96+
$(srcdir)/lib/prism/serialize.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/serialize.rb.erb
97+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/serialize.rb $@
98+
99+
realclean-prism-srcs::
100+
$(RM) $(srcdir)/lib/prism/serialize.rb
101+
102+
main srcs: $(srcdir)/lib/prism/visitor.rb
103+
$(srcdir)/lib/prism/visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/visitor.rb.erb
104+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/visitor.rb $@
105+
106+
realclean-prism-srcs::
107+
$(RM) $(srcdir)/lib/prism/visitor.rb
108+
109+
main srcs: $(srcdir)/prism/diagnostic.c
110+
$(srcdir)/prism/diagnostic.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/diagnostic.c.erb
111+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/diagnostic.c $@
112+
113+
realclean-prism-srcs::
114+
$(RM) $(srcdir)/prism/diagnostic.c
115+
116+
main srcs: $(srcdir)/prism/node.c
117+
$(srcdir)/prism/node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/node.c.erb
118+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/node.c $@
119+
120+
realclean-prism-srcs::
121+
$(RM) $(srcdir)/prism/node.c
122+
123+
main srcs: $(srcdir)/prism/prettyprint.c
124+
$(srcdir)/prism/prettyprint.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/prettyprint.c.erb
125+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/prettyprint.c $@
126+
127+
realclean-prism-srcs::
128+
$(RM) $(srcdir)/prism/prettyprint.c
129+
130+
main srcs: $(srcdir)/prism/serialize.c
131+
$(srcdir)/prism/serialize.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/serialize.c.erb
132+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/serialize.c $@
133+
134+
realclean-prism-srcs::
135+
$(RM) $(srcdir)/prism/serialize.c
136+
137+
main srcs: $(srcdir)/prism/token_type.c
138+
$(srcdir)/prism/token_type.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/token_type.c.erb
139+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/token_type.c $@
140+
141+
realclean-prism-srcs::
142+
$(RM) $(srcdir)/prism/token_type.c

prism/srcs.mk.in

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<% # -*- ruby -*-
2+
require_relative 'templates/template'
3+
4+
script = File.basename(__FILE__)
5+
srcs = output ? File.basename(output) : script.chomp('.in')
6+
mk = 'uncommon.mk'
7+
8+
# %>
9+
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
10+
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
11+
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml
12+
13+
srcs <%=%><%=mk%>: prism/.srcs.mk.time
14+
15+
prism/.srcs.mk.time:
16+
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
17+
$(PRISM_SRCDIR)/templates/template.rb \
18+
$(PRISM_SRCDIR)/<%=%><%=script%>
19+
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/<%=%><%=srcs%> $(PRISM_SRCDIR)/<%=%><%=script%>
20+
21+
realclean-prism-srcs::
22+
$(RM) $(PRISM_SRCDIR)/<%=%><%=srcs%>
23+
24+
realclean-srcs-local:: realclean-prism-srcs
25+
<% Prism::Template::TEMPLATES.map do |t|
26+
/\.(?:[ch]|rb)\z/ =~ t or next
27+
s = '$(srcdir)/' + t.sub(%r[\A(?:(src)|ext|include)/]) {$1 && 'prism/'}
28+
s.sub!(%r[\A\$(srcdir)/prism/], '$(PRISM_SRCDIR)/')
29+
target = s.end_with?('.h') ? 'incs' : 'srcs'
30+
# %>
31+
32+
main <%=%><%=target%>: <%=%><%=s%>
33+
<%=%><%=s%>: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/<%=%><%=t%>.erb
34+
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) <%=%><%=t%> $@
35+
36+
realclean-prism-srcs::
37+
$(RM) <%=%><%=s%>
38+
<%
39+
end
40+
# %>

template/GNUmakefile.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,8 @@ override UNICODE_TABLES_DEPENDENTS = \
2727
$(UNICODE_TABLES_DATA_FILES)))),\
2828
force,none)
2929

30+
# extract NMake-style include list
31+
$(eval common_mk_includes := $(shell sed -n 's/^!include *//p' $(srcdir)/common.mk))
32+
3033
-include uncommon.mk
3134
include $(srcdir)/defs/gmake.mk

template/Makefile.in

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -426,8 +426,8 @@ $(MKFILES): config.status $(srcdir)/version.h $(ABI_VERSION_HDR)
426426
$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
427427
{ echo "$@ updated, restart."; exit 1; }
428428

429-
uncommon.mk: $(srcdir)/common.mk $(srcdir)/depend
430-
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(srcdir)/depend > $@
429+
uncommon.mk: $(srcdir)/tool/prereq.status
430+
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(common_mk_includes) > $@
431431

432432
.PHONY: reconfig
433433
reconfig-args = $(srcdir)/$(CONFIGURE) $(yes_silence:yes=--silent) $(configure_args)

tool/make-snapshot

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,14 @@ def package(vcs, rev, destdir, tmp = nil)
480480
vars["UNICODE_VERSION"] = $unicode_version if $unicode_version
481481
args = vars.dup
482482
mk.gsub!(/@([A-Za-z_]\w*)@/) {args.delete($1); vars[$1] || ENV[$1]}
483-
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").gsub(/^!/, '-').sub(/^revision\.tmp::$/, '\& Makefile')
483+
commonmk.gsub!(/^!(?:include \$\(srcdir\)\/(.*))?/) do
484+
if inc = $1 and File.exist?(inc)
485+
File.binread(inc).gsub(/^!/, '# !')
486+
else
487+
"#"
488+
end
489+
end
490+
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").sub(/^revision\.tmp::$/, '\& Makefile')
484491
mk << <<-'APPEND'
485492
486493
update-download:: touch-unicode-files

tool/prereq.status

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,4 @@ s,@srcdir@,.,g
4242

4343
s/@[A-Za-z][A-Za-z0-9_]*@//g
4444
s/{\$([^(){}]*)}//g
45-
s/^!/-/
45+
s/^!/#!/

win32/Makefile.sub

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@ ACTIONS_ENDGROUP = @::
570570
ABI_VERSION_HDR = $(hdrdir)/ruby/internal/abi.h
571571

572572
!include $(srcdir)/common.mk
573-
!include $(srcdir)/depend
574573

575574
!ifdef SCRIPTPROGRAMS
576575
!else if [echo>scriptbin.mk SCRIPTPROGRAMS = \]

0 commit comments

Comments
 (0)