Class: Rscons::Builders::Install
- Inherits:
-
Rscons::Builder
- Object
- Rscons::Builder
- Rscons::Builders::Install
- Defined in:
- lib/rscons/builders/install.rb
Overview
The Install builder copies files/directories to new locations.
Direct Known Subclasses
Instance Method Summary collapse
-
#run(target, sources, cache, env, vars) ⇒ String, false
Run the builder to produce a build target.
Methods inherited from Rscons::Builder
#create_build_target, #default_variables, #features, #finalize, #name, #produces?, #setup, #standard_build, #standard_finalize, #standard_threaded_build
Instance Method Details
#run(target, sources, cache, env, vars) ⇒ String, false
Run the builder to produce a build target.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/rscons/builders/install.rb', line 18 def run(target, sources, cache, env, vars) target_is_dir = (sources.length > 1) || Dir.exists?(sources.first) || Dir.exists?(target) outdir = target_is_dir ? target : File.dirname(target) # Collect the list of files to copy over. file_map = {} if target_is_dir sources.each do |src| if Dir.exists? src Dir.glob("#{src}/**/*", File::FNM_DOTMATCH).select do |f| File.file?(f) end.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 = false file_map.each do |src, dest| # Check the cache and copy if necessary unless cache.up_to_date?(dest, :Copy, [src], env) unless env.("#{name} #{target}", nil) = true end cache.mkdir_p(File.dirname(dest)) FileUtils.cp(src, dest, :preserve => true) end cache.register_build(dest, :Copy, [src], env) end target if (target_is_dir ? Dir.exists?(target) : File.exists?(target)) end |