Gererate prism source files dependencies from template.rb

Update included file list automatically.
This commit is contained in:
Nobuyoshi Nakada 2025-08-01 21:27:36 +09:00
parent f5efd0e743
commit d0d7f55005
No known key found for this signature in database
GPG Key ID: 3582D74E1FEE4465
9 changed files with 209 additions and 16 deletions

View File

@ -205,13 +205,6 @@ $(PRISM_BUILD_DIR)/.time $(PRISM_BUILD_DIR)/util/.time:
$(Q) $(MAKEDIRS) $(@D)
@$(NULLCMD) > $@
$(PRISM_SRCDIR)/srcs.mk: $(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/templates/template.rb) \
$(HAVE_BASERUBY:yes=$(PRISM_SRCDIR)/generate-srcs.mk.rb)
$(ECHO) Updating prism/srcs.mk
$(BASERUBY) $(PRISM_SRCDIR)/generate-srcs.mk.rb > $@
srcs: $(PRISM_SRCDIR)/srcs.mk
EXPORTOBJS = $(DLNOBJ) \
localeinit.$(OBJEXT) \
loadpath.$(OBJEXT) \
@ -1221,7 +1214,6 @@ incs: $(INSNS) {$(VPATH)}node_name.inc {$(VPATH)}known_errors.inc \
{$(VPATH)}vm_call_iseq_optimized.inc $(srcdir)/revision.h \
$(REVISION_H) \
$(UNICODE_DATA_HEADERS) $(ENC_HEADERS) \
$(top_srcdir)/prism/ast.h $(top_srcdir)/prism/diagnostic.h \
{$(VPATH)}id.h {$(VPATH)}probes.dmyh
insns: $(INSNS)
@ -1310,6 +1302,11 @@ $(REVISION_H)$(yes_baseruby:yes=~disabled~):
# uncommon.mk: $(REVISION_H)
# $(MKFILES): $(REVISION_H)
# $(common_mk_includes) is set by config.status or GNUmakefile
common_mk__$(gnumake:yes=artifact)_ = uncommon.mk
common_mk_$(gnumake)_artifact_ = $(MKFILES)
$(common_mk__artifact_): $(srcdir)/common.mk $(common_mk_includes)
ripper_srcs: $(RIPPER_SRCS)
$(RIPPER_SRCS): $(srcdir)/parse.y $(srcdir)/defs/id.def
@ -1982,3 +1979,4 @@ $(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}mini_builtin.c
$(CROSS_COMPILING:yes=)builtin.$(OBJEXT): {$(VPATH)}miniprelude.c
!include $(srcdir)/prism/srcs.mk
!include $(srcdir)/depend

View File

@ -4698,9 +4698,12 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [
sed '/^MISSING/s/\$U\././g;/^VCS *=/s#@VCS@#'"$VCS"'#;/^VCSUP *=/s#@VCSUP@#'"$VCSUP"'#' Makefile
echo; test x"$EXEEXT" = x || echo 'miniruby: miniruby$(EXEEXT)'
AS_IF([test "$gnumake" != yes], [
echo ['$(MKFILES): $(srcdir)/common.mk $(srcdir)/depend $(srcdir)/prism/srcs.mk']
sed ['s/{\$([^(){}]*)[^{}]*}//g;/^!/d'] ${srcdir}/common.mk ${srcdir}/depend
cat ${srcdir}/prism/srcs.mk
# extract NMake-style include list
set = `sed -n 's/^!include *//p' ${srcdir}/common.mk`
echo common_mk_includes "@S|@*" # generate the macro assignment
shift
common_mk_includes="`echo \"@S|@*\" | sed 's|\$(srcdir)|.|g'`"
(cd ${srcdir} && sed -f tool/prereq.status common.mk ${common_mk_includes})
AS_IF([test "$YJIT_SUPPORT" = yes], [
cat ${srcdir}/yjit/not_gmake.mk
echo ['$(MKFILES): ${srcdir}/yjit/not_gmake.mk']
@ -4723,6 +4726,7 @@ AC_CONFIG_FILES(Makefile:template/Makefile.in, [
]) &&
test -z "`${MAKE-make} -f $tmpgmk info-program | grep '^PROGRAM=ruby$'`" &&
echo 'ruby: $(PROGRAM);' >> $tmpmk
rm -f uncommon.mk # remove stale uncommon.mk, it should be updated by GNUmakefile
test "$tmpmk" = "$tmpgmk" || rm -f "$tmpgmk"
]) && mv -f $tmpmk Makefile],
[EXEEXT='$EXEEXT' MAKE='${MAKE-make}' gnumake='$gnumake' GIT='$GIT' YJIT_SUPPORT='$YJIT_SUPPORT'])

142
prism/srcs.mk Normal file
View File

@ -0,0 +1,142 @@
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml
srcs uncommon.mk: prism/.srcs.mk.time
prism/.srcs.mk.time:
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
$(PRISM_SRCDIR)/templates/template.rb \
$(PRISM_SRCDIR)/srcs.mk.in
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/srcs.mk $(PRISM_SRCDIR)/srcs.mk.in
realclean-prism-srcs::
$(RM) $(PRISM_SRCDIR)/srcs.mk
realclean-srcs-local:: realclean-prism-srcs
main srcs: $(srcdir)/prism/api_node.c
$(srcdir)/prism/api_node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/ext/prism/api_node.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) ext/prism/api_node.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/api_node.c
main incs: $(srcdir)/prism/ast.h
$(srcdir)/prism/ast.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/ast.h.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/ast.h $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/ast.h
main incs: $(srcdir)/prism/diagnostic.h
$(srcdir)/prism/diagnostic.h: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/include/prism/diagnostic.h.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) include/prism/diagnostic.h $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/diagnostic.h
main srcs: $(srcdir)/lib/prism/compiler.rb
$(srcdir)/lib/prism/compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/compiler.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/compiler.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/compiler.rb
main srcs: $(srcdir)/lib/prism/dispatcher.rb
$(srcdir)/lib/prism/dispatcher.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dispatcher.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dispatcher.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dispatcher.rb
main srcs: $(srcdir)/lib/prism/dot_visitor.rb
$(srcdir)/lib/prism/dot_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dot_visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dot_visitor.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dot_visitor.rb
main srcs: $(srcdir)/lib/prism/dsl.rb
$(srcdir)/lib/prism/dsl.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/dsl.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/dsl.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/dsl.rb
main srcs: $(srcdir)/lib/prism/inspect_visitor.rb
$(srcdir)/lib/prism/inspect_visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/inspect_visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/inspect_visitor.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/inspect_visitor.rb
main srcs: $(srcdir)/lib/prism/mutation_compiler.rb
$(srcdir)/lib/prism/mutation_compiler.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/mutation_compiler.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/mutation_compiler.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/mutation_compiler.rb
main srcs: $(srcdir)/lib/prism/node.rb
$(srcdir)/lib/prism/node.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/node.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/node.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/node.rb
main srcs: $(srcdir)/lib/prism/reflection.rb
$(srcdir)/lib/prism/reflection.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/reflection.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/reflection.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/reflection.rb
main srcs: $(srcdir)/lib/prism/serialize.rb
$(srcdir)/lib/prism/serialize.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/serialize.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/serialize.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/serialize.rb
main srcs: $(srcdir)/lib/prism/visitor.rb
$(srcdir)/lib/prism/visitor.rb: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/lib/prism/visitor.rb.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) lib/prism/visitor.rb $@
realclean-prism-srcs::
$(RM) $(srcdir)/lib/prism/visitor.rb
main srcs: $(srcdir)/prism/diagnostic.c
$(srcdir)/prism/diagnostic.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/diagnostic.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/diagnostic.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/diagnostic.c
main srcs: $(srcdir)/prism/node.c
$(srcdir)/prism/node.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/node.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/node.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/node.c
main srcs: $(srcdir)/prism/prettyprint.c
$(srcdir)/prism/prettyprint.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/prettyprint.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/prettyprint.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/prettyprint.c
main srcs: $(srcdir)/prism/serialize.c
$(srcdir)/prism/serialize.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/serialize.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/serialize.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/serialize.c
main srcs: $(srcdir)/prism/token_type.c
$(srcdir)/prism/token_type.c: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/src/token_type.c.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) src/token_type.c $@
realclean-prism-srcs::
$(RM) $(srcdir)/prism/token_type.c

40
prism/srcs.mk.in Normal file
View File

@ -0,0 +1,40 @@
<% # -*- ruby -*-
require_relative 'templates/template'
script = File.basename(__FILE__)
srcs = output ? File.basename(output) : script.chomp('.in')
mk = 'uncommon.mk'
# %>
PRISM_TEMPLATES_DIR = $(PRISM_SRCDIR)/templates
PRISM_TEMPLATE = $(PRISM_TEMPLATES_DIR)/template.rb
PRISM_CONFIG = $(PRISM_SRCDIR)/config.yml
srcs <%=%><%=mk%>: prism/.srcs.mk.time
prism/.srcs.mk.time:
prism/$(HAVE_BASERUBY:yes=.srcs.mk.time): \
$(PRISM_SRCDIR)/templates/template.rb \
$(PRISM_SRCDIR)/<%=%><%=script%>
$(BASERUBY) $(tooldir)/generic_erb.rb -c -t$@ -o $(PRISM_SRCDIR)/<%=%><%=srcs%> $(PRISM_SRCDIR)/<%=%><%=script%>
realclean-prism-srcs::
$(RM) $(PRISM_SRCDIR)/<%=%><%=srcs%>
realclean-srcs-local:: realclean-prism-srcs
<% Prism::Template::TEMPLATES.map do |t|
/\.(?:[ch]|rb)\z/ =~ t or next
s = '$(srcdir)/' + t.sub(%r[\A(?:(src)|ext|include)/]) {$1 && 'prism/'}
s.sub!(%r[\A\$(srcdir)/prism/], '$(PRISM_SRCDIR)/')
target = s.end_with?('.h') ? 'incs' : 'srcs'
# %>
main <%=%><%=target%>: <%=%><%=s%>
<%=%><%=s%>: $(PRISM_CONFIG) $(PRISM_TEMPLATE) $(PRISM_TEMPLATES_DIR)/<%=%><%=t%>.erb
$(Q) $(BASERUBY) $(PRISM_TEMPLATE) <%=%><%=t%> $@
realclean-prism-srcs::
$(RM) <%=%><%=s%>
<%
end
# %>

View File

@ -27,5 +27,8 @@ override UNICODE_TABLES_DEPENDENTS = \
$(UNICODE_TABLES_DATA_FILES)))),\
force,none)
# extract NMake-style include list
$(eval common_mk_includes := $(shell sed -n 's/^!include *//p' $(srcdir)/common.mk))
-include uncommon.mk
include $(srcdir)/defs/gmake.mk

View File

@ -426,8 +426,8 @@ $(MKFILES): config.status $(srcdir)/version.h $(ABI_VERSION_HDR)
$(MAKE) -f conftest.mk | grep '^AUTO_REMAKE$$' >/dev/null 2>&1 || \
{ echo "$@ updated, restart."; exit 1; }
uncommon.mk: $(srcdir)/common.mk $(srcdir)/depend
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(srcdir)/depend > $@
uncommon.mk: $(srcdir)/tool/prereq.status
sed -f $(srcdir)/tool/prereq.status $(srcdir)/common.mk $(common_mk_includes) > $@
.PHONY: reconfig
reconfig-args = $(srcdir)/$(CONFIGURE) $(yes_silence:yes=--silent) $(configure_args)

View File

@ -480,7 +480,14 @@ def package(vcs, rev, destdir, tmp = nil)
vars["UNICODE_VERSION"] = $unicode_version if $unicode_version
args = vars.dup
mk.gsub!(/@([A-Za-z_]\w*)@/) {args.delete($1); vars[$1] || ENV[$1]}
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").gsub(/^!/, '-').sub(/^revision\.tmp::$/, '\& Makefile')
commonmk.gsub!(/^!(?:include \$\(srcdir\)\/(.*))?/) do
if inc = $1 and File.exist?(inc)
File.binread(inc).gsub(/^!/, '# !')
else
"#"
end
end
mk << commonmk.gsub(/\{\$([^(){}]*)[^{}]*\}/, "").sub(/^revision\.tmp::$/, '\& Makefile')
mk << <<-'APPEND'
update-download:: touch-unicode-files

View File

@ -42,4 +42,4 @@ s,@srcdir@,.,g
s/@[A-Za-z][A-Za-z0-9_]*@//g
s/{\$([^(){}]*)}//g
s/^!/-/
s/^!/#!/

View File

@ -570,7 +570,6 @@ ACTIONS_ENDGROUP = @::
ABI_VERSION_HDR = $(hdrdir)/ruby/internal/abi.h
!include $(srcdir)/common.mk
!include $(srcdir)/depend
!ifdef SCRIPTPROGRAMS
!else if [echo>scriptbin.mk SCRIPTPROGRAMS = \]