env.build_dir('source','build/obj/source')
env.build_dir('modules','build/obj/modules')
- # Add a builder for creating a CMake project
- env.add_builder :CMake do |target, sources, cache, env, vars|
- target_dir = File.dirname(target)
- source_dir = "../" * target_dir.split(/\\|\//).length + File.dirname(sources.first)
- cmd = env.expand_varref("${CMAKE_CMD}", vars.merge('_SOURCES' => source_dir))
- unless cache.up_to_date?(target, cmd, sources, env)
- cache.mkdir_p(target_dir)
- Dir.chdir(target_dir) { env.execute("CMake #{target}", cmd) }
- cache.register_build(target, cmd, sources, env)
+ env.add_builder :Install do |target, sources, cache, env, vars|
+ is_dir = (sources.length > 1) || Dir.exists?(sources.first)
+ outdir = is_dir ? target : File.dirname(target)
+ # Collect the list of files to copy over
+ file_map = {}
+ if is_dir
+ sources.each do |src|
+ if Dir.exists? src
+ Dir["#{src}/**/*"].each do |subfile|
+ subpath = Pathname.new(subfile).relative_path_from(Pathname.new(src)).to_s
+ file_map[subfile] = "#{outdir}/#{subpath}"
+ end
+ else
+ file_map[src] = "#{outdir}/#{File.basename(src)}"
+ end
+ end
+ else
+ file_map[sources.first] = target
end
- target if File.exists? target
- end
-
- # Add a builder for building a project with Make
- env.add_builder :Make do |target, sources, cache, env, vars|
- working_dir = File.dirname(sources.first)
- cmd = env.expand_varref("${MAKE_CMD}", vars)
- unless cache.up_to_date?(target, cmd, sources, env)
- Dir.chdir(working_dir) { env.execute("Make #{target}", cmd) }
- cache.register_build(target, cmd, sources, env)
+ # Check the cache and copy if necessary
+ unless cache.up_to_date?(target, :Install, file_map.keys, env)
+ puts "INSTALL #{target}"
+ file_map.each do |k,v|
+ cache.mkdir_p(File.dirname(v))
+ FileUtils.cp(k,v)
+ end
+ cache.register_build(target, :Install, file_map.keys, env)
end
- target if File.exists? target
+ target if (is_dir ? Dir.exists?(target) : File.exists?(target))
end
# CMake Configuration
end
end
-#------------------------------------------------------------------------------
-# Clang Toolchain Targets
-#------------------------------------------------------------------------------
-#main_env.CMake('build/llvm/Makefile',
-# Dir['source/vendor/llvm-3.4.2/CMakeLists.txt',
-# 'source/vendor/llvm-3.4.2/cmake/**/*/'])
-#main_env.Make("build/llvm/bin/clang#{windows? ? '.exe':''}",
-# ['build/llvm/Makefile'] + Dir['source/vendor/llvm-3.4.2/tools/**/*.*'])
-
-# Register clang with the environment
-#ENV['PATH'] = "build/llvm/bin/#{windows? ? ';':':'}#{ENV['PATH']}"
-
#------------------------------------------------------------------------------
# Release Build Targets
#------------------------------------------------------------------------------
main_env.Library('build/lib/libopts.a', FileList['modules/libopts/source/**/*.c'])
main_env.Program('build/bin/sclpl',
FileList['source/sclpl/*.c', 'build/lib/libopts.a', 'build/lib/libcds.a'])
+main_env.Install('build/include/sclpl.h', 'source/runtime/sclpl.h')
#------------------------------------------------------------------------------
# Test Build Targets
end
it "should compile the input file in verbose mode (short flag)" do
- pending "Can't find the sclpl header"
expect(cli(['-v', '--object', 'spec/src/sample.scl'])).to eq(
- "clang -c -o spec/src/sample.o spec/src/sample.c")
+ "cc -c -o spec/src/sample.o -I ./build/bin/../include/ spec/src/sample.c\n")
expect(File.exists? 'spec/src/sample.o').to be(true)
FileUtils.rm('spec/src/sample.o')
end
it "should compile the input file in verbose mode (long flag)" do
- pending "Can't find the sclpl header"
expect(cli(['--verbose', '--object', 'spec/src/sample.scl'])).to eq(
- "clang -c -o spec/src/sample.o spec/src/sample.c")
+ "cc -c -o spec/src/sample.o -I ./build/bin/../include/ spec/src/sample.c\n")
expect(File.exists? 'spec/src/sample.o').to be(true)
FileUtils.rm('spec/src/sample.o')
end
it "should compile the input file" do
- pending "Can't find the sclpl header"
expect(cli(['--object', 'spec/src/sample.scl'])).to eq("")
expect(File.exists? 'spec/src/sample.o').to be(true)
FileUtils.rm('spec/src/sample.o')