rscons 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ require "fileutils"
2
+
1
3
  module Rscons
2
4
  # Class to hold an object that knows how to build a certain type of file.
3
5
  class Builder
@@ -16,5 +18,18 @@ module Rscons
16
18
  def produces?(target, source, env)
17
19
  false
18
20
  end
21
+
22
+ # Check if the cache is up to date for the target and if not execute the
23
+ # build command.
24
+ # Return the name of the target or false on failure.
25
+ def standard_build(short_cmd_string, target, command, sources, env, cache)
26
+ unless cache.up_to_date?(target, command, sources)
27
+ FileUtils.mkdir_p(File.dirname(target))
28
+ FileUtils.rm_f(target)
29
+ return false unless env.execute(short_cmd_string, command)
30
+ cache.register_build(target, command, sources)
31
+ end
32
+ target
33
+ end
19
34
  end
20
35
  end
@@ -8,7 +8,7 @@ module Rscons
8
8
  'AR' => 'ar',
9
9
  'LIBSUFFIX' => '.a',
10
10
  'ARFLAGS' => [],
11
- 'ARCOM' => ['$AR', 'rcs', '$ARFLAGS', '$TARGET', '$SOURCES']
11
+ 'ARCOM' => ['$AR', 'rcs', '$ARFLAGS', '$_TARGET', '$_SOURCES']
12
12
  }
13
13
  end
14
14
 
@@ -17,16 +17,11 @@ module Rscons
17
17
  objects = env.build_sources(sources, [env['OBJSUFFIX'], env['LIBSUFFIX']].flatten, cache, vars)
18
18
  if objects
19
19
  vars = vars.merge({
20
- 'TARGET' => target,
21
- 'SOURCES' => objects,
20
+ '_TARGET' => target,
21
+ '_SOURCES' => objects,
22
22
  })
23
23
  command = env.build_command(env['ARCOM'], vars)
24
- unless cache.up_to_date?(target, command, objects)
25
- FileUtils.rm_f(target)
26
- return false unless env.execute("AR #{target}", command)
27
- cache.register_build(target, command, objects)
28
- end
29
- target
24
+ standard_build("AR #{target}", target, command, objects, env, cache)
30
25
  end
31
26
  end
32
27
  end
@@ -11,8 +11,8 @@ module Rscons
11
11
  'ASSUFFIX' => '.S',
12
12
  'ASPPPATH' => '$CPPPATH',
13
13
  'ASPPFLAGS' => '$CPPFLAGS',
14
- 'ASDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
15
- 'ASCOM' => ['$AS', '-c', '-o', '$TARGET', '$ASDEPGEN', '-I$[ASPPPATH]', '$ASPPFLAGS', '$ASFLAGS', '$SOURCES'],
14
+ 'ASDEPGEN' => ['-MMD', '-MF', '$_DEPFILE'],
15
+ 'ASCOM' => ['$AS', '-c', '-o', '$_TARGET', '$ASDEPGEN', '-I$[ASPPPATH]', '$ASPPFLAGS', '$ASFLAGS', '$_SOURCES'],
16
16
 
17
17
  'CPPFLAGS' => [],
18
18
  'CPPPATH' => [],
@@ -20,14 +20,14 @@ module Rscons
20
20
  'CC' => 'gcc',
21
21
  'CFLAGS' => [],
22
22
  'CSUFFIX' => '.c',
23
- 'CCDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
24
- 'CCCOM' => ['$CC', '-c', '-o', '$TARGET', '$CCDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CFLAGS', '$SOURCES'],
23
+ 'CCDEPGEN' => ['-MMD', '-MF', '$_DEPFILE'],
24
+ 'CCCOM' => ['$CC', '-c', '-o', '$_TARGET', '$CCDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CFLAGS', '$_SOURCES'],
25
25
 
26
26
  'CXX' => 'g++',
27
27
  'CXXFLAGS' => [],
28
28
  'CXXSUFFIX' => '.cc',
29
- 'CXXDEPGEN' => ['-MMD', '-MF', '$DEPFILE'],
30
- 'CXXCOM' =>['$CXX', '-c', '-o', '$TARGET', '$CXXDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CXXFLAGS', '$SOURCES'],
29
+ 'CXXDEPGEN' => ['-MMD', '-MF', '$_DEPFILE'],
30
+ 'CXXCOM' =>['$CXX', '-c', '-o', '$_TARGET', '$CXXDEPGEN', '-I$[CPPPATH]', '$CPPFLAGS', '$CXXFLAGS', '$_SOURCES'],
31
31
  }
32
32
  end
33
33
 
@@ -40,9 +40,9 @@ module Rscons
40
40
 
41
41
  def run(target, sources, cache, env, vars = {})
42
42
  vars = vars.merge({
43
- 'TARGET' => target,
44
- 'SOURCES' => sources,
45
- 'DEPFILE' => target.set_suffix('.mf'),
43
+ '_TARGET' => target,
44
+ '_SOURCES' => sources,
45
+ '_DEPFILE' => target.set_suffix('.mf'),
46
46
  })
47
47
  com_prefix = if sources.first.has_suffix?(env['ASSUFFIX'])
48
48
  'AS'
@@ -55,11 +55,13 @@ module Rscons
55
55
  end
56
56
  command = env.build_command(env["#{com_prefix}COM"], vars)
57
57
  unless cache.up_to_date?(target, command, sources)
58
+ FileUtils.mkdir_p(File.dirname(target))
59
+ FileUtils.rm_f(target)
58
60
  return false unless env.execute("#{com_prefix} #{target}", command)
59
61
  deps = sources
60
- if File.exists?(vars['DEPFILE'])
61
- deps += env.parse_makefile_deps(vars['DEPFILE'], target)
62
- FileUtils.rm_f(vars['DEPFILE'])
62
+ if File.exists?(vars['_DEPFILE'])
63
+ deps += env.parse_makefile_deps(vars['_DEPFILE'], target)
64
+ FileUtils.rm_f(vars['_DEPFILE'])
63
65
  end
64
66
  cache.register_build(target, command, deps.uniq)
65
67
  end
@@ -10,7 +10,7 @@ module Rscons
10
10
  'LDFLAGS' => [],
11
11
  'LIBPATH' => [],
12
12
  'LIBS' => [],
13
- 'LDCOM' => ['$LD', '-o', '$TARGET', '$LDFLAGS', '$SOURCES', '-L$[LIBPATH]', '-l$[LIBS]']
13
+ 'LDCOM' => ['$LD', '-o', '$_TARGET', '$LDFLAGS', '$_SOURCES', '-L$[LIBPATH]', '-l$[LIBS]']
14
14
  }
15
15
  end
16
16
 
@@ -23,16 +23,12 @@ module Rscons
23
23
  end.any?
24
24
  ld_alt = use_cxx ? env['CXX'] : env['CC']
25
25
  vars = vars.merge({
26
- 'TARGET' => target,
27
- 'SOURCES' => objects,
26
+ '_TARGET' => target,
27
+ '_SOURCES' => objects,
28
28
  'LD' => env['LD'] || ld_alt,
29
29
  })
30
30
  command = env.build_command(env['LDCOM'], vars)
31
- unless cache.up_to_date?(target, command, objects)
32
- return false unless env.execute("LD #{target}", command)
33
- cache.register_build(target, command, objects)
34
- end
35
- target
31
+ standard_build("LD #{target}", target, command, objects, env, cache)
36
32
  end
37
33
  end
38
34
  end
@@ -11,9 +11,10 @@ module Rscons
11
11
 
12
12
  # Create an Environment object.
13
13
  # @param variables [Hash]
14
- # The variables hash can contain both construction variables, which are
15
- # uppercase strings (such as "CC" or "LDFLAGS"), and RScons options,
16
- # which are lowercase symbols (such as :echo).
14
+ # The variables hash can contain construction variables, which are
15
+ # uppercase strings (such as "CC" or "LDFLAGS"), user variables, which
16
+ # are lowercase strings (such as "sources"), and RScons options, which
17
+ # are lowercase symbols (such as :echo).
17
18
  # If a block is given, the Environment object is yielded to the block and
18
19
  # when the block returns, the {#process} method is automatically called.
19
20
  def initialize(variables = {})
@@ -1,4 +1,4 @@
1
1
  module Rscons
2
2
  # gem version
3
- VERSION = "0.0.6"
3
+ VERSION = "0.0.7"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rscons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-13 00:00:00.000000000 Z
12
+ date: 2013-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec-core
@@ -220,7 +220,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
220
220
  version: '0'
221
221
  segments:
222
222
  - 0
223
- hash: -4013238338906189018
223
+ hash: 1121865149781113593
224
224
  required_rubygems_version: !ruby/object:Gem::Requirement
225
225
  none: false
226
226
  requirements:
@@ -229,7 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
229
229
  version: '0'
230
230
  segments:
231
231
  - 0
232
- hash: -4013238338906189018
232
+ hash: 1121865149781113593
233
233
  requirements: []
234
234
  rubyforge_project:
235
235
  rubygems_version: 1.8.23