build-tool 0.3.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data.tar.gz.sig ADDED
@@ -0,0 +1 @@
1
+ k�#��Wg>��%��BA���l�Tq�4f����85V���52l�� �Ď����܆!�7B� ��9CH�09H[=]�K4����O��Aі���ͬ֔���^DS�0�;{@(0��74s��64IЏ�w��O?��L�f��xϗ$�4�u��!�m@�艢��Se&��02���hY �ْ�U?�4b�4ݔb�/�P��.��ָ���0�9��Cz7PPT�;���B(�7B"��q��<%`����\{�ܥ�
data/History.txt CHANGED
@@ -1,3 +1,17 @@
1
+ == 0.4.0
2
+ - Feature
3
+ - Show a ansi terminal code based progressbar when compiling or installing in non verbose mode.
4
+ That feature is courtesy of the ansi rubygem from (http://github.com/rubyworks/ansi). The lib
5
+ has some shortcomings.
6
+ - Colorize output. Powered by the ansi module too. The lib has a shortcoming here. It does not
7
+ check if the terminal supports colors. You will get some escape codes then. I will send a
8
+ patch upstream.
9
+ - Enhancements
10
+ - Rework the way build-systems are handled. This makes it possible to solve the cmake issue with
11
+ rpath handling by properly creating an inheritance between build-systems. It makes it possible
12
+ to alter or overwrite build-system options too.
13
+
14
+
1
15
  == 0.3.3
2
16
  - Feature
3
17
  - The history command now supports the -n --number [COUNT] option. Use it to specify how many
data/Rakefile CHANGED
@@ -26,7 +26,8 @@ Hoe.spec( 'build-tool' ) do |build_tool|
26
26
  build_tool.extra_deps = [
27
27
  ['logging', ">= 1.2.2"],
28
28
  ['sequel', ">= 3.8.0"],
29
- ['sqlite3-ruby', ">= 1.2" ]
29
+ ['sqlite3-ruby', ">= 1.2" ],
30
+ ['ansi', '>= 1.2' ]
30
31
  ]
31
32
 
32
33
  build_tool.extra_dev_deps = [
data/lib/build-tool.rb CHANGED
@@ -2,6 +2,6 @@
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module BuildTool
5
- VERSION = '0.3.3'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
 
@@ -135,7 +135,7 @@ def BuildTool.main(name, args, root_directory)
135
135
  # Special case for the configurationParser. It is very verbose if active.
136
136
  Logging.logger['BuildTool::Cfg::Parser'].level = :info
137
137
  Logging.logger['MJ::Logging::LoggerAdapter'].level = :warn
138
- Logging.logger.root.appenders = Logging.appenders.stdout(
138
+ Logging.logger['root'].appenders = Logging.appenders.stdout(
139
139
  :layout => MJ::Logging::BasicLayout.new(),
140
140
  :level => :info)
141
141
  # Create the application
@@ -12,6 +12,7 @@ class AutoConfError < BuildTool::Error; end
12
12
 
13
13
  def intitialize( *args )
14
14
  super( *args )
15
+ @supported_options << 'libdir'
15
16
  end
16
17
 
17
18
  #
@@ -30,26 +31,6 @@ def configured?
30
31
  ### METHODS
31
32
  #
32
33
 
33
- def[]( var )
34
- if @options.has_key? var
35
- return @options[var]
36
- end
37
-
38
- case var
39
-
40
- when 'libdir'
41
- return ""
42
-
43
- else
44
- # *TODO* raise correct exception
45
- raise NotImplementedError
46
- end
47
- end
48
-
49
- def[]=( var, val )
50
- @options[var] = val
51
- end
52
-
53
34
  # Configure the module
54
35
  def reconfigure()
55
36
  configure
@@ -126,7 +107,8 @@ def make( target = nil )
126
107
 
127
108
  def option_string
128
109
  arr = []
129
- @options.each do |var, val|
110
+ option_names.each do |var|
111
+ val = self[var]
130
112
  if val
131
113
  arr << "--#{var}='#{val}'"
132
114
  else
@@ -2,52 +2,156 @@
2
2
 
3
3
  module BuildTool; module BuildSystem
4
4
 
5
+ class UnknownOptionError < BuildTool::Error; end
6
+
5
7
  #
6
8
  # Base class for all build system implementations
7
9
  #
8
10
  class Base
9
11
 
10
- def initialize
12
+ def initialize ( parent = nil )
11
13
  @module = nil
14
+ @default = nil
12
15
  @options = Hash.new
13
16
  @out_of_source = true
17
+ @supported_options = Array.new
18
+ @feature = nil
19
+ if parent and parent.name == name
20
+ @parent = parent
21
+ else
22
+ @parent = nil
23
+ end
14
24
  end
15
25
 
16
26
  #
17
27
  ### ATTRIBUTES
18
28
  #
19
29
  attr_accessor :module
30
+ attr_accessor :feature
20
31
  attr_accessor :out_of_source
32
+ attr_accessor :defaults
21
33
 
22
34
  def build_directory
23
35
  @module.build_directory
24
36
  end
25
37
 
26
38
  def dup
27
- cp = self.clone
28
- cp.instance_variable_set( "@options", Marshal.load( Marshal.dump( @options ) ) )
29
- cp
39
+ self.class.new( self )
30
40
  end
31
41
 
32
42
  def env
33
43
  @module.environment.values
34
44
  end
35
45
 
36
- def merge( other )
37
- if name == other.name
38
- @options.merge!( other.option_hash )
39
- @out_of_source = other.out_of_source
46
+ def parent
47
+ if @parent
48
+ par = @parent
49
+ elsif @module && @module.parent && @module.parent.build_system && ( @module.parent.build_system.name == name )
50
+ par = @module.parent.build_system
51
+ elsif @module
52
+ par = defaults
40
53
  else
41
- raise ConfigurationError, "Can't merge build system #{name} with #{other.name}"
54
+ par = nil
42
55
  end
56
+ return par
43
57
  end
44
58
 
45
59
  def option_hash
46
- @options
60
+ # Check the parents names (if any)
61
+ par = parent
62
+ if par
63
+ parent_option_hash = par.option_hash
64
+ else
65
+ parent_option_hash = {}
66
+ end
67
+ # If this build-system declaration is not active we are done
68
+ if active?
69
+ return parent_option_hash.merge( @options )
70
+ else
71
+ return parent_option_hash
72
+ end
73
+ end
74
+
75
+ def option_names
76
+ # Check the parents names (if any)
77
+ par = parent
78
+ if par
79
+ parent_option_names = par.option_names
80
+ else
81
+ parent_option_names = []
82
+ end
83
+ # If this build-system declaration is not active we are done
84
+ if active?
85
+ return ( @options.keys + parent_option_names ).uniq
86
+ else
87
+ return parent_option_names
88
+ end
89
+ end
90
+
91
+ def to_s
92
+ return "#{self.object_id} #{self.module} #{@options.keys.join( ', ')}"
93
+ end
94
+
95
+ def active?
96
+ if @feature.nil?
97
+ true
98
+ else
99
+ @feature.active?
100
+ end
47
101
  end
48
102
 
49
- def options
50
- @options.keys
103
+ def []( var )
104
+ # Get the parents value (if any)
105
+ par = parent
106
+ if par and par.option_set?( var )
107
+ parentval = par[var]
108
+ else
109
+ parentval = nil
110
+ end
111
+ # If this build-system declaration is not active we are done
112
+ if !active?
113
+ return parentval if !parentval.nil?
114
+ raise UnknownOptionError, "#{self} Option #{var} is unknown for build-system #{name}"
115
+ end
116
+ # Now check our value and merge with parents
117
+ if @options.has_key?( var )
118
+ return @options[ var ].
119
+ sub( '{{{}}} ', parentval.nil? ? "" : "#{parentval} " ).
120
+ sub( ' {{{}}}', parentval.nil? ? "" : " #{parentval}" )
121
+ end
122
+ return parentval if !parentval.nil?
123
+ return "" if @supported_options.include?( var )
124
+ raise UnknownOptionError, "#{self} Option #{var} is unknown for build-system #{name}"
125
+ end
126
+
127
+ def []=( var, value )
128
+ @options[ var ] = value
129
+ end
130
+
131
+ def option_set?( var )
132
+ return true if active? && @options.has_key?( var )
133
+ return true if parent && parent.option_set?( var )
134
+ return false
135
+ end
136
+
137
+ def set( var, value )
138
+ self[var]= value
139
+ end
140
+
141
+ def append( var, value )
142
+ if option_set?( var )
143
+ self[var]= self[var] + " " + value
144
+ else
145
+ self[var]= "{{{}}} " + value
146
+ end
147
+ end
148
+
149
+ def prepend( var, value )
150
+ if option_set?( var )
151
+ self[var]= value + " " + self[var]
152
+ else
153
+ self[var]= value + " {{{}}}"
154
+ end
51
155
  end
52
156
 
53
157
  def install_prefix
@@ -70,6 +174,7 @@ def after_rebase
70
174
  ### VIRTUAL FUNCTIONS
71
175
  #
72
176
  for method in [
177
+ :clone,
73
178
  :configure,
74
179
  :configured?,
75
180
  :make,
@@ -16,6 +16,11 @@ class CMakeError < BuildTool::Error; end
16
16
 
17
17
  def initialize( *args )
18
18
  super( *args )
19
+ @supported_options <<
20
+ 'CMAKE_BUILD_TYPE' <<
21
+ 'CMAKE_CXXFLAGS' <<
22
+ 'CMAKE_VERBOSE_MAKEFILE' <<
23
+ 'LIB_SUFFIX'
19
24
  end
20
25
 
21
26
  #
@@ -35,27 +40,6 @@ def name
35
40
  ### METHODS
36
41
  #
37
42
 
38
- def[]( var )
39
- if @options.has_key? var
40
- return @options[var]
41
- end
42
-
43
- case var
44
-
45
- when 'CMAKE_BUILD_TYPE', 'CMAKE_CXXFLAGS', 'CMAKE_VERBOSE_MAKEFILE', 'LIB_SUFFIX'
46
- return ""
47
-
48
- else
49
- # *TODO* raise correct exception
50
- raise NotImplementedError
51
-
52
- end
53
- end
54
-
55
- def[]=( var, val )
56
- @options[var] = val
57
- end
58
-
59
43
  # Configure the module
60
44
  def reconfigure()
61
45
  if File.exist?( "#{build_directory}/CMakeCache.txt" )
@@ -107,7 +91,8 @@ def make( target = nil )
107
91
 
108
92
  def option_string
109
93
  arr = []
110
- @options.each do |var, val|
94
+ option_names.each do |var|
95
+ val = self[var]
111
96
  arr << "-D#{var}='#{val}'"
112
97
  end
113
98
  arr.join(" ")
@@ -35,17 +35,6 @@ def name
35
35
  ### METHODS
36
36
  #
37
37
 
38
- def[]( var )
39
- if @options.has_key? var
40
- return @options[var]
41
- end
42
- raise NotImplementedError
43
- end
44
-
45
- def[]=( var, val )
46
- @options[var] = val
47
- end
48
-
49
38
  # Configure the module
50
39
  def reconfigure()
51
40
  raise NotImplementedError
@@ -69,7 +58,7 @@ def execute( script )
69
58
  build_directory,
70
59
  {
71
60
  'INSTALL_PREFIX' => install_prefix.to_s,
72
- }.merge(Hash[@options]))
61
+ }.merge(Hash[option_hash]))
73
62
  end
74
63
 
75
64
  def install( fast )
@@ -86,7 +75,8 @@ def make( target = nil )
86
75
 
87
76
  def option_string
88
77
  arr = []
89
- @options.each do |var, val|
78
+ option_names.each do |var|
79
+ val = self[var]
90
80
  arr << "-D#{var}='#{val}'"
91
81
  end
92
82
  arr.join(" ")
@@ -32,24 +32,6 @@ def name
32
32
  ### METHODS
33
33
  #
34
34
 
35
- def[]( var )
36
- if @options.has_key? var
37
- return @options[var]
38
- end
39
-
40
- # case var
41
-
42
- # else
43
- # *TODO* raise correct exception
44
- raise NotImplementedError
45
-
46
- # end
47
- end
48
-
49
- def[]=( var, val )
50
- @options[var] = val
51
- end
52
-
53
35
  # Configure the module
54
36
  def reconfigure()
55
37
  0
@@ -34,25 +34,6 @@ def name
34
34
  ### METHODS
35
35
  #
36
36
 
37
- def[]( var )
38
- if @options.has_key? var
39
- return @options[var]
40
- end
41
-
42
- # case var
43
-
44
-
45
- # else
46
- # *TODO* raise correct exception
47
- raise NotImplementedError
48
-
49
- # end
50
- end
51
-
52
- def[]=( var, val )
53
- @options[var] = val
54
- end
55
-
56
37
  # Configure the module
57
38
  def reconfigure()
58
39
  configure
@@ -97,7 +78,8 @@ def make( target = nil )
97
78
 
98
79
  def option_string
99
80
  arr = []
100
- @options.each do |var, val|
81
+ option_names.each do |var|
82
+ val = self[var]
101
83
  arr << "#{var}='#{val}'"
102
84
  end
103
85
  arr.join(" ")
@@ -32,35 +32,6 @@ def name
32
32
  ### METHODS
33
33
  #
34
34
 
35
- def[]( var )
36
- if @options.has_key? var
37
- return @options[var]
38
- end
39
-
40
- case var
41
-
42
- when 'flags'
43
- return @options[var]
44
-
45
- else
46
- # *TODO* raise correct exception
47
- raise NotImplementedError
48
- end
49
- end
50
-
51
- def[]=( var, val )
52
- case var
53
-
54
- when 'flags'
55
- @options[var] = val
56
-
57
- else
58
- # *TODO* raise correct exception
59
- raise NotImplementedError
60
- end
61
-
62
- end
63
-
64
35
  # Execute a cmake command in the context of the build directory
65
36
  def _configure( command, wd = build_directory )
66
37
  rc = self.class.execute "#{source_directory}/configure #{command}", wd, env
@@ -80,7 +51,7 @@ def configure
80
51
  check_build_directory( true )
81
52
  opt = ""
82
53
  opt += " -prefix #{install_prefix.to_s} " if install_prefix
83
- opt += @options['flags']
54
+ opt += self['flags']
84
55
  rc = _configure opt
85
56
  rc
86
57
  end