Add 'build' DSL method.

Disallow processing Environments until configuration is performed.
This commit is contained in:
josh committed 2018-12-17 22:14:35 -05:00
1 parent 5720662b7c
commit f8e6666a2c
90 files changed
+637 -434

No files matched your search

@@ -1,22 +1,24 @@
class MyObject < Rscons::Builder
def run(target, sources, cache, env, vars)
env.run_builder(env.builders["Object"], target, sources, cache, vars)
end
end
Rscons::Environment.new(echo: :command) do |env|
env.add_builder(MyObject.new)
env.append('CPPPATH' => Rscons.glob('src/**'))
env.add_build_hook do |build_op|
if build_op[:builder].name == "MyObject" && build_op[:sources].first =~ %r{one\.c}
build_op[:vars]["CFLAGS"] << "-O1"
build_op[:sources] = ['src/two/two.c']
elsif build_op[:builder].name == "MyObject" && build_op[:target] =~ %r{two\.o}
new_vars = build_op[:vars].clone
new_vars["CFLAGS"] << "-O2"
build_op[:vars] = new_vars
end
end
env.MyObject('one.o', 'src/one/one.c')
env.MyObject('two.o', 'src/two/two.c')
end
class MyObject < Rscons::Builder
def run(target, sources, cache, env, vars)
env.run_builder(env.builders["Object"], target, sources, cache, vars)
end
end
build do
Rscons::Environment.new(echo: :command) do |env|
env.add_builder(MyObject.new)
env.append('CPPPATH' => Rscons.glob('src/**'))
env.add_build_hook do |build_op|
if build_op[:builder].name == "MyObject" && build_op[:sources].first =~ %r{one\.c}
build_op[:vars]["CFLAGS"] << "-O1"
build_op[:sources] = ['src/two/two.c']
elsif build_op[:builder].name == "MyObject" && build_op[:target] =~ %r{two\.o}
new_vars = build_op[:vars].clone
new_vars["CFLAGS"] << "-O2"
build_op[:vars] = new_vars
end
end
env.MyObject('one.o', 'src/one/one.c')
env.MyObject('two.o', 'src/two/two.c')
end
end
+10 -8
View File
@@ -1,11 +1,13 @@
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Rscons.glob('src/**/*/'))
env.add_build_hook do |build_op|
if File.basename(build_op[:target]) == "one.o"
build_op[:vars]["CFLAGS"] << "-O1"
elsif File.basename(build_op[:target]) == "two.o"
build_op[:vars]["CFLAGS"] << "-O2"
build do
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Rscons.glob('src/**/*/'))
env.add_build_hook do |build_op|
if File.basename(build_op[:target]) == "one.o"
build_op[:vars]["CFLAGS"] << "-O1"
elsif File.basename(build_op[:target]) == "two.o"
build_op[:vars]["CFLAGS"] << "-O2"
end
end
env.Program('build_hook.exe', Rscons.glob('src/**/*.c'))
end
env.Program('build_hook.exe', Rscons.glob('src/**/*.c'))
end
+8 -6
View File
@@ -1,7 +1,9 @@
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Rscons.glob('src/**').sort)
FileUtils.mkdir_p(env.build_root)
FileUtils.mv("src/one/one.c", env.build_root)
env.Object("^/one.o", "^/one.c")
env.Program("program.exe", Rscons.glob('src/**/*.c') + ["^/one.o"])
build do
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Rscons.glob('src/**').sort)
FileUtils.mkdir_p(env.build_root)
FileUtils.mv("src/one/one.c", env.build_root)
env.Object("^/one.o", "^/one.c")
env.Program("program.exe", Rscons.glob('src/**/*.c') + ["^/one.o"])
end
end
+4 -2
View File
@@ -1,3 +1,5 @@
Rscons::Environment.new do |env|
env.Copy("inst.exe", "copy.rb")
build do
Rscons::Environment.new do |env|
env.Copy("inst.exe", "copy.rb")
end
end
+7 -5
View File
@@ -1,6 +1,8 @@
Rscons::Environment.new do |env|
env["CSUFFIX"] = %w[.yargh .c]
env["CFLAGS"] += %w[-x c]
env["CPPPATH"] += Rscons.glob("src/**")
env.Program("program.exe", Rscons.glob("src/**/*.{c,yargh}"))
build do
Rscons::Environment.new do |env|
env["CSUFFIX"] = %w[.yargh .c]
env["CFLAGS"] += %w[-x c]
env["CPPPATH"] += Rscons.glob("src/**")
env.Program("program.exe", Rscons.glob("src/**/*.{c,yargh}"))
end
end
@@ -1,5 +1,7 @@
Rscons::Environment.new do |env|
env.echo = :command
env.Install("inst.exe", "install.rb")
end
build do
Rscons::Environment.new do |env|
env.echo = :command
env.Install("inst.exe", "install.rb")
end
end
+6 -4
View File
@@ -6,8 +6,10 @@ class MyBuilder < Rscons::Builder
end
end
Rscons::Environment.new do |env|
env.echo = :command
env.add_builder(MyBuilder.new)
env.MyBuilder("foo")
build do
Rscons::Environment.new do |env|
env.echo = :command
env.add_builder(MyBuilder.new)
env.MyBuilder("foo")
end
end
+4 -2
View File
@@ -1,3 +1,5 @@
Rscons::Environment.new do |env|
env.Install("inst.exe", "install.rb")
build do
Rscons::Environment.new do |env|
env.Install("inst.exe", "install.rb")
end
end
+8 -6
View File
@@ -1,9 +1,11 @@
Rscons::Environment.new do |env|
env.Directory("inst")
env.Install("inst", "install_directory.rb")
build do
Rscons::Environment.new do |env|
env.Directory("inst")
env.Install("inst", "install_directory.rb")
env.Install("noexist/src", "src")
env.Install("noexist/src", "src")
env.Directory("exist/src")
env.Install("exist/src", "src")
env.Directory("exist/src")
env.Install("exist/src", "src")
end
end
@@ -1,5 +1,7 @@
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.Object("one.o", "src/two/two.c")
build do
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.Object("one.o", "src/two/two.c")
end
end
@@ -1,10 +1,12 @@
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.add_post_build_hook do |build_op|
if build_op[:target] == "one.o"
env["MODULE"] = "two"
env.Object("${MODULE}.o", "src/${MODULE}/${MODULE}.c")
build do
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.add_post_build_hook do |build_op|
if build_op[:target] == "one.o"
env["MODULE"] = "two"
env.Object("${MODULE}.o", "src/${MODULE}/${MODULE}.c")
end
end
end
end