summaryrefslogtreecommitdiff
path: root/tool/dump_ast.mkmf.rb
blob: eec6b72f79b5206a535142674cc665353949cf1c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!ruby -s
require 'mkmf'
require 'pathname'
require 'fileutils'

workdir, src, *objs = ARGV
src = Pathname(src)
tooldir = src.parent.relative_path_from(workdir)
srcdir = tooldir.parent
target = src.basename.sub_ext('')
dirs = objs.map {|obj| File.dirname(obj)}.uniq - %w[.]
link = MakeMakefile::TRY_LINK.sub(MakeMakefile::CONFTEST+$EXEEXT, '$(@)')
prismdir= "$(srcdir)/#{dirs.first}"
$VPATH = ["$(srcdir)", "$(srcdir)/#{tooldir.basename}", prismdir, tooldir]
$INCFLAGS << " -I#{prismdir}"
$CPPFLAGS = $CFLAGS = $INCFLAGS

include FileUtils::Verbose
mkpath(workdir)
Dir.chdir(workdir) {
  mkpath(dirs)
  File.write('Makefile', [MakeMakefile.configuration(srcdir.to_s), <<~MAKEFILE].join(""))
    target = #{target}#{$EXEEXT}
    objs = #{objs.join(' ')}

    $(target): $(objs)
    \t#{link} $(objs)

    objs: $(objs)
    .c.#{$OBJEXT}:
    \t#{MakeMakefile::COMPILE_C}

    clean:
    \t$(RM) $(target) $(objs) Makefile
    \t$(RMDIRS) #{dirs.join(' ')}
  MAKEFILE
}