summaryrefslogtreecommitdiff
path: root/template
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-09-11 14:13:30 +0900
committerNobuyoshi Nakada <[email protected]>2024-09-11 14:13:30 +0900
commitf7ffa76377ead1760dcb0a84db282facb461ecd7 (patch)
treea4a6cb937a7e4d960c42f3a4f4271e3558a7145d /template
parentcb576c13fb15a80fd77b81071cc3a68a340ecb33 (diff)
Clean up clean only extensions
The clean targets should clean up all extensions, including those have nothing to build for any reason, e.g., platform requirements etc.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11588
Diffstat (limited to 'template')
-rw-r--r--template/exts.mk.tmpl41
1 files changed, 26 insertions, 15 deletions
diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl
index ac6b280188..0abbca1f06 100644
--- a/template/exts.mk.tmpl
+++ b/template/exts.mk.tmpl
@@ -22,14 +22,19 @@ end
confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil
confexts ||= []
macros["old_extensions"] = []
+distclean = []
contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/
Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e|
gem = e.start_with?(".bundle/gems/")
+ dir = File.dirname(e)
s = File.read(e)
s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|MESSAGE_(?:BEGIN|END)|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v|
v.gsub!(/\\\n[ \t]*/, ' ')
- next if v.empty?
+ if v.empty?
+ distclean << dir if n == "extensions"
+ next
+ end
n = "old_extensions" if n == "extensions" and !confexts.include?(e)
v = v.split
m = macros[n] ||= []
@@ -69,6 +74,10 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e|
end
end
deps.uniq!
+macros["cleandirs"] = distclean.map {|d| "#{d}/."}
+deps.map! {|d|
+ /\A(?:dist|real)?clean(?=:)/ =~ d ? d + " $(cleandirs:/.=/#{$&})" : d
+}
# NOTE: Only if extensions are configured as static and dynamic heterogeneously
# (e.g. --with-static-linked-ext=foo or ext/Setup can mix static and dynamic
@@ -100,7 +109,6 @@ def self.column
@erbout[/^.*\z/].scan(/\t|([^\t]+)/) {|s,| w += (s ? s.size : 8 - w % 8)}
w
end
-targets = %w[all static install install-so install-rb clean distclean realclean]
objext = RbConfig::CONFIG["OBJEXT"]
if gnumake
submake = "$(MAKE) -C $(@D)"
@@ -145,23 +153,26 @@ ext/extinit.<%=objext%>:
% exts = (macros["extensions"] + macros["old_extensions"])
% exts.map! {|e|e.chomp("/.")}.sort
-% targets.each do |tgt|
+% %w[all static install install-so install-rb].each do |tgt|
% exts.each do |d|
-% t = "#{d}/#{tgt}"
-% if /^(dist|real)?clean$/ =~ tgt
-% deps = exts.select {|e|e.start_with?("#{d}/")}.map {|e|"#{e}/#{tgt}"}
-% pd = ' ' + deps.join(' ') unless deps.empty?
-% else
-% pext = File.dirname(d)
-% pd = " #{pext}/#{tgt}" if exts.include?(pext)
-% end
-<%=t%>:<%=pd%>
-% if /^(dist|real)clean$/ =~ tgt
+% pext = File.dirname(d)
+<%=d%>/<%=tgt%>:<% if exts.include?(pext) %> <%=pext%>/<%=tgt%><% end %>
+ $(Q)<%= submake %><%=mflags%> V=$(V) $(@F)
+% end
+% end
+% distclean = exts | distclean
+% %w[clean distclean realclean].each do |tgt|
+% distclean.each do |d|
+% deps = exts.select {|e|e.start_with?("#{d}/")}.map {|e|"#{e}/#{tgt}"}
+<%=d%>/<%=tgt%>:<% unless deps.empty? %> <%=deps.join(' ')%><% end %>
+% unless tgt == "clean"
$(ECHO) $(@F)ing $(@D)
% end
+% if exts.include?(d)
$(Q)<%= submake %><%=mflags%> V=$(V) $(@F)
-% if /^(dist|real)clean$/ =~ tgt
- $(Q)$(RM) <%=t[%r[\A(?:\.[^/]+/)?(?:[^/]+/){2}]]%>exts.mk
+% end
+% unless tgt == "clean"
+ $(Q)$(RM) <%=d[%r[\A(?:\.[^/]+/)?(?:[^/]+/)?[^/]+]]%>/exts.mk
-$(Q)$(RMDIRS) $(@D)
% end
% end