build-tool 0.0.3 → 0.1.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 +0 -0
- data/History.txt +28 -1
- data/Manifest.txt +91 -52
- data/README.txt +63 -0
- data/Rakefile +20 -23
- data/bin/build-tool +53 -0
- data/lib/build-tool.rb +7 -0
- data/lib/build-tool/GUI.rb +360 -0
- data/lib/build-tool/application.rb +84 -0
- data/lib/build-tool/build-system/autoconf.rb +60 -0
- data/lib/build-tool/build-system/base.rb +142 -0
- data/lib/build-tool/build-system/cmake.rb +119 -0
- data/lib/build-tool/build-system/custom.rb +115 -0
- data/lib/build-tool/build-system/qt.rb +113 -0
- data/lib/build-tool/cfg/lexer.rb +558 -0
- data/lib/build-tool/cfg/lexer.rex +248 -0
- data/lib/build-tool/cfg/lexer_base.rb +82 -0
- data/lib/build-tool/cfg/node.rb +94 -0
- data/lib/build-tool/cfg/parser.rb +871 -0
- data/lib/build-tool/cfg/parser.y +279 -0
- data/lib/build-tool/cfg/visitor.rb +471 -0
- data/lib/build-tool/commands.rb +639 -0
- data/lib/build-tool/commands/build.rb +120 -0
- data/lib/build-tool/commands/configure.rb +73 -0
- data/lib/build-tool/commands/ctags.rb +46 -0
- data/lib/build-tool/commands/environments.rb +29 -0
- data/lib/build-tool/commands/environments/list.rb +37 -0
- data/lib/build-tool/commands/environments/set.rb +33 -0
- data/lib/build-tool/commands/fetch.rb +50 -0
- data/lib/build-tool/commands/files.rb +73 -0
- data/lib/build-tool/commands/help.rb +22 -0
- data/lib/build-tool/commands/info.rb +48 -0
- data/lib/build-tool/commands/install.rb +56 -0
- data/lib/build-tool/commands/modules.rb +29 -0
- data/lib/build-tool/commands/modules/info.rb +75 -0
- data/lib/build-tool/commands/modules/list.rb +49 -0
- data/lib/build-tool/commands/modules/shell.rb +40 -0
- data/lib/build-tool/commands/rebase.rb +46 -0
- data/lib/build-tool/commands/recipes.rb +32 -0
- data/lib/build-tool/commands/recipes/info.rb +46 -0
- data/lib/build-tool/commands/recipes/install.rb +184 -0
- data/lib/build-tool/commands/recipes/list.rb +33 -0
- data/lib/build-tool/configuration.rb +115 -0
- data/lib/build-tool/environment.rb +119 -0
- data/lib/build-tool/errors.rb +9 -0
- data/lib/build-tool/module.rb +366 -0
- data/lib/build-tool/pluginbase.rb +43 -0
- data/lib/build-tool/recipe.rb +180 -0
- data/lib/build-tool/repository.rb +59 -0
- data/lib/build-tool/server.rb +43 -0
- data/lib/build-tool/singleton.rb +50 -0
- data/lib/build-tool/sshkey.rb +22 -0
- data/lib/build-tool/vcs/base.rb +105 -0
- data/lib/build-tool/vcs/git-svn.rb +154 -0
- data/lib/build-tool/vcs/git.rb +187 -0
- data/lib/build-tool/vcs/svn.rb +136 -0
- data/lib/mj/logging.rb +31 -0
- data/lib/mj/tools/ssh.rb +64 -0
- data/lib/{kde-build → mj/tools}/subprocess.rb +21 -16
- data/lib/mj/visitor.rb +21 -0
- data/recipes/kde/files/finish_installation.sh +16 -0
- data/recipes/kde/files/kde4.desktop +22 -0
- data/recipes/kde/files/xsession +89 -0
- data/recipes/kde/info.yaml +10 -0
- data/recipes/kde/recipe +585 -0
- data/recipes/kde/recipe-local +90 -0
- data/recipes/kde/settings.yaml +52 -0
- data/recipes/kde43/info.yaml +10 -0
- data/recipes/kde43/recipe +256 -0
- data/recipes/kde43/recipe-local +90 -0
- data/recipes/kde43/settings.yaml +32 -0
- data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/compile.sh +77 -0
- data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/configure.sh +70 -0
- data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/install.sh +39 -0
- data/recipes/kdeqt4.6/info.yaml +7 -0
- data/recipes/kdeqt4.6/recipe +155 -0
- data/recipes/kdeqt4.6/recipe-local +30 -0
- data/recipes/kdeqt4.6/settings.yaml +27 -0
- data/tags +745 -0
- data/tasks/genfiles.rake +28 -0
- data/tasks/rdoc.rake +34 -0
- data/tasks/rspec.rake +21 -0
- data/test.rb +28 -0
- data/test/commands/test_build.rb +29 -0
- data/test/test_build_system.rb +98 -0
- data/test/test_cli.rb +61 -0
- data/test/test_command.rb +175 -0
- data/test/test_configuration_parser.rb +542 -0
- data/test/test_environment.rb +82 -0
- data/test/test_helper.rb +39 -7
- data/test/test_module.rb +158 -0
- data/test/test_repository.rb +75 -0
- data/test/test_singleton.rb +51 -0
- data/test/test_ssh_key.rb +14 -0
- data/test/test_svn_parser.rb +28 -0
- data/test/test_vcs.rb +33 -0
- metadata +139 -90
- metadata.gz.sig +0 -0
- data/PostInstall.txt +0 -3
- data/TODO +0 -2
- data/bin/kde-build.rb +0 -21
- data/config/website.yml +0 -2
- data/config/website.yml.sample +0 -2
- data/lib/kde-build.rb +0 -18
- data/lib/kde-build/application.rb +0 -270
- data/lib/kde-build/build_system.rb +0 -28
- data/lib/kde-build/build_system/autoconf.rb +0 -108
- data/lib/kde-build/build_system/base.rb +0 -139
- data/lib/kde-build/build_system/cmake.rb +0 -94
- data/lib/kde-build/build_system/qtcopy.rb +0 -127
- data/lib/kde-build/command.rb +0 -42
- data/lib/kde-build/command/build.rb +0 -106
- data/lib/kde-build/command/compile.rb +0 -39
- data/lib/kde-build/command/configure.rb +0 -48
- data/lib/kde-build/command/ctags.rb +0 -41
- data/lib/kde-build/command/fetch.rb +0 -33
- data/lib/kde-build/command/help.rb +0 -71
- data/lib/kde-build/command/info.rb +0 -45
- data/lib/kde-build/command/install.rb +0 -39
- data/lib/kde-build/command/module_based.rb +0 -44
- data/lib/kde-build/command/rebase.rb +0 -50
- data/lib/kde-build/command/version.rb +0 -43
- data/lib/kde-build/configuration.rb +0 -209
- data/lib/kde-build/exception.rb +0 -6
- data/lib/kde-build/metaaid.rb +0 -18
- data/lib/kde-build/module.rb +0 -227
- data/lib/kde-build/module_configuration.rb +0 -107
- data/lib/kde-build/moduleregistry.rb +0 -85
- data/lib/kde-build/tools/ctags.rb +0 -59
- data/lib/kde-build/tools/logging.rb +0 -49
- data/lib/kde-build/tools/make.rb +0 -58
- data/lib/kde-build/tools/ssh.rb +0 -47
- data/lib/kde-build/vcs.rb +0 -28
- data/lib/kde-build/vcs/base.rb +0 -85
- data/lib/kde-build/vcs/git-svn.rb +0 -139
- data/lib/kde-build/vcs/git.rb +0 -121
- data/lib/kde-build/vcs/svn.rb +0 -102
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -71
- data/test.yaml.tmpl +0 -632
- data/test/test_kde-build.rb +0 -11
- data/test/test_vcs_svn.rb +0 -44
- data/website/index.html +0 -84
- data/website/index.txt +0 -59
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -159
- data/website/template.html.erb +0 -50
@@ -0,0 +1,279 @@
|
|
1
|
+
class BuildTool::Cfg::Parser < BuildTool::Cfg::Lexer
|
2
|
+
|
3
|
+
token APPEND
|
4
|
+
token BUILD_PREFIX
|
5
|
+
token BUILD_SYSTEM
|
6
|
+
token END
|
7
|
+
token ENVIRONMENT
|
8
|
+
token EXTERNAL
|
9
|
+
token FILE
|
10
|
+
token GIT
|
11
|
+
token GIT_SVN
|
12
|
+
token HOST
|
13
|
+
token INHERITANCE
|
14
|
+
token INPLACE
|
15
|
+
token INSTALL_PREFIX
|
16
|
+
token LOCAL_PATH
|
17
|
+
token LOG_DIRECTORY
|
18
|
+
token MODULE
|
19
|
+
token OPTION
|
20
|
+
token PATH
|
21
|
+
token PREPEND
|
22
|
+
token PROTOCOL
|
23
|
+
token REMOTE
|
24
|
+
token REMOTE_PATH
|
25
|
+
token REPOSITORY
|
26
|
+
token SERVER
|
27
|
+
token SET
|
28
|
+
token SSH_KEY
|
29
|
+
token STRING
|
30
|
+
token TEMPLATE
|
31
|
+
token TOKEN
|
32
|
+
token TRACK_BRANCH
|
33
|
+
token USE
|
34
|
+
token USER
|
35
|
+
token VAR
|
36
|
+
token VCS
|
37
|
+
|
38
|
+
rule
|
39
|
+
|
40
|
+
main
|
41
|
+
: statements { result = ConfigurationFileList.new( val[0] ); }
|
42
|
+
;
|
43
|
+
|
44
|
+
#
|
45
|
+
### SOME HELPER
|
46
|
+
#
|
47
|
+
|
48
|
+
identifier
|
49
|
+
: STRING { result = val[0]; }
|
50
|
+
| TOKEN { result = val[0]; }
|
51
|
+
;
|
52
|
+
|
53
|
+
inheritance
|
54
|
+
: INHERITANCE { result = :INHERITANCE; }
|
55
|
+
;
|
56
|
+
|
57
|
+
#
|
58
|
+
### TOP LEVEL STATEMENTS
|
59
|
+
#
|
60
|
+
statements
|
61
|
+
: /* empty */
|
62
|
+
| statement statements { result = val.flatten; }
|
63
|
+
;
|
64
|
+
|
65
|
+
statement
|
66
|
+
: LOG_DIRECTORY STRING { result = LogDirectoryNode.new( val[1] ); }
|
67
|
+
| build_system_declaration { result = val[0]; }
|
68
|
+
| environment_declaration { result = val[0]; }
|
69
|
+
| vcs_declaration { result = val[0]; }
|
70
|
+
| module_declaration { result = val[0]; }
|
71
|
+
| repository_declaration { result = val[0]; }
|
72
|
+
| server_declaration { result = val[0]; }
|
73
|
+
| ssh_key_declaration { result = val[0]; }
|
74
|
+
;
|
75
|
+
|
76
|
+
vcs_declaration
|
77
|
+
: git_declaration { result = val[0]; }
|
78
|
+
| git_svn_declaration { result = val[0]; }
|
79
|
+
;
|
80
|
+
|
81
|
+
#
|
82
|
+
### BUILD SYSTEM DECLARATION
|
83
|
+
#
|
84
|
+
build_system_declaration
|
85
|
+
: BUILD_SYSTEM identifier build_system_statements END { result = BuildSystemDeclarationNode.new( val[1,2] ); }
|
86
|
+
;
|
87
|
+
|
88
|
+
build_system_statements
|
89
|
+
: /* empty */
|
90
|
+
| build_system_statement build_system_statements { result = val.flatten; }
|
91
|
+
;
|
92
|
+
|
93
|
+
build_system_statement
|
94
|
+
: OPTION identifier STRING { result = BuildSystemOptionNode.new( val[1,2] ); }
|
95
|
+
| INPLACE { result = BuildSystemInplaceNode.new(); }
|
96
|
+
;
|
97
|
+
|
98
|
+
#
|
99
|
+
### ENVIRONMENT CONFIGURATION
|
100
|
+
#
|
101
|
+
environment_declaration
|
102
|
+
: ENVIRONMENT identifier environment_statements END { result = EnvironmentDeclarationNode.new( val[1..-1] ); }
|
103
|
+
| ENVIRONMENT identifier inheritance identifier environment_statements END { result = EnvironmentDeclarationNode.new( val[1..-1] ); }
|
104
|
+
;
|
105
|
+
|
106
|
+
environment_statements
|
107
|
+
: /* empty */
|
108
|
+
| environment_statement environment_statements { result = val.flatten; }
|
109
|
+
;
|
110
|
+
|
111
|
+
environment_statement
|
112
|
+
: VAR TOKEN SET STRING { result = EnvironmentVariableNode.new( val[1..-1] ); }
|
113
|
+
| VAR TOKEN PREPEND STRING { result = EnvironmentVariableNode.new( val[1..-1] ); }
|
114
|
+
| VAR TOKEN APPEND STRING { result = EnvironmentVariableNode.new( val[1..-1] ); }
|
115
|
+
;
|
116
|
+
|
117
|
+
#
|
118
|
+
### GIT CONFIGURATION
|
119
|
+
#
|
120
|
+
git_declaration
|
121
|
+
: VCS GIT git_statements END { result = GitDeclarationNode.new( val[2] ); }
|
122
|
+
;
|
123
|
+
|
124
|
+
git_statements
|
125
|
+
: /* empty */
|
126
|
+
| git_statement git_statements { result = val.flatten; }
|
127
|
+
;
|
128
|
+
|
129
|
+
git_statement
|
130
|
+
: REMOTE STRING git_remote_values END { result = GitRemoteNode.new( [ val[1], GitRemoteValueList.new( val[2] ) ] ); }
|
131
|
+
| TRACK_BRANCH STRING { result = GitTrackBranchNode.new( val[1] ); }
|
132
|
+
| EXTERNAL STRING { result = GitSvnExternalNode.new( val[1] ); }
|
133
|
+
;
|
134
|
+
|
135
|
+
git_remote_values
|
136
|
+
: /* empty */
|
137
|
+
| git_remote_value git_remote_values { result = val.flatten; }
|
138
|
+
;
|
139
|
+
|
140
|
+
git_remote_value
|
141
|
+
: server_declaration { result = val[0]; }
|
142
|
+
| USE SERVER identifier { result = UseServerNode.new( val[2] ); }
|
143
|
+
;
|
144
|
+
|
145
|
+
#
|
146
|
+
### GIT-SVN CONFIGURATION
|
147
|
+
#
|
148
|
+
git_svn_declaration
|
149
|
+
: VCS GIT_SVN git_svn_statements END { result = GitSvnDeclarationNode.new( val[2] ); }
|
150
|
+
;
|
151
|
+
|
152
|
+
git_svn_statements
|
153
|
+
: /* empty */
|
154
|
+
| git_svn_statement git_svn_statements { result = val.flatten; }
|
155
|
+
;
|
156
|
+
|
157
|
+
git_svn_statement
|
158
|
+
: git_statement
|
159
|
+
;
|
160
|
+
|
161
|
+
#
|
162
|
+
### MODULE DECLARATION
|
163
|
+
#
|
164
|
+
module_declaration
|
165
|
+
: MODULE identifier module_statements END { result = ModuleDeclarationNode.new( val[1..-1] ); }
|
166
|
+
| MODULE identifier inheritance identifier module_statements END { result = ModuleDeclarationNode.new( val[1..-1] ); }
|
167
|
+
;
|
168
|
+
|
169
|
+
module_statements
|
170
|
+
: /* EMPTY */
|
171
|
+
| module_statement module_statements { result = val.flatten; }
|
172
|
+
;
|
173
|
+
|
174
|
+
module_statement
|
175
|
+
: USE BUILD_SYSTEM identifier { result = UseBuildSystemNode.new( val[2] ); }
|
176
|
+
| USE ENVIRONMENT identifier { result = UseEnvironmentNode.new( val[2] ); }
|
177
|
+
| USE REPOSITORY identifier { result = UseRepositoryNode.new( val[2] ); }
|
178
|
+
| USE VCS identifier { result = UseVcsNode.new( val[2] ); }
|
179
|
+
| build_system_declaration { result = val[0]; }
|
180
|
+
| vcs_declaration { result = val[0]; }
|
181
|
+
| repository_declaration { result = val[0]; }
|
182
|
+
| environment_declaration { result = val[0]; }
|
183
|
+
| INSTALL_PREFIX STRING { result = ModuleInstallPrefixNode.new( val[1] ); }
|
184
|
+
| BUILD_PREFIX STRING { result = ModuleBuildPrefixNode.new( val[1] ); }
|
185
|
+
| REMOTE_PATH STRING { result = ModuleRemotePathNode.new( val[1] ); }
|
186
|
+
| LOCAL_PATH STRING { result = ModuleLocalPathNode.new( val[1] ); }
|
187
|
+
| TEMPLATE { result = ModuleTemplateNode.new(); }
|
188
|
+
;
|
189
|
+
|
190
|
+
#
|
191
|
+
### REPOSITORY DECLARATION
|
192
|
+
#
|
193
|
+
repository_declaration
|
194
|
+
: REPOSITORY identifier repository_statements END { result = RepositoryDeclarationNode.new( val[1..-1] ); }
|
195
|
+
;
|
196
|
+
|
197
|
+
repository_statements
|
198
|
+
: /* empty */
|
199
|
+
| repository_statement repository_statements { result = val.flatten(); }
|
200
|
+
;
|
201
|
+
|
202
|
+
repository_statement
|
203
|
+
: SERVER identifier { result = RepositoryServerNode.new( val[1] ); }
|
204
|
+
| PATH STRING { result = RepositoryPathNode.new( val[1] ); }
|
205
|
+
| USER identifier { result = RepositoryUserNode.new( val[1] ); }
|
206
|
+
| USE SSH_KEY identifier { result = UseSshKeyNode.new( val[2] ); }
|
207
|
+
| ssh_key_declaration { result = val[0]; }
|
208
|
+
;
|
209
|
+
|
210
|
+
#
|
211
|
+
### SERVER DECLARATION
|
212
|
+
#
|
213
|
+
server_declaration
|
214
|
+
: SERVER identifier server_statements END { result = ServerDeclarationNode.new( [ val[1], ServerStatementList.new( val[2] ) ] ); }
|
215
|
+
;
|
216
|
+
|
217
|
+
server_statements
|
218
|
+
: /* empty */
|
219
|
+
| server_statement server_statements { result = val.flatten; }
|
220
|
+
;
|
221
|
+
|
222
|
+
server_statement
|
223
|
+
: HOST STRING { result = ServerHostNode.new( val[1] ); }
|
224
|
+
| PROTOCOL STRING { result = ServerProtocolNode.new( val[1] ); }
|
225
|
+
| PATH STRING { result = ServerPathNode.new( val[1] ); }
|
226
|
+
;
|
227
|
+
|
228
|
+
#
|
229
|
+
### SSH KEY
|
230
|
+
#
|
231
|
+
ssh_key_declaration
|
232
|
+
: SSH_KEY identifier ssh_key_statements END { result = SshKeyDeclarationNode.new( val[1..-1] ); }
|
233
|
+
;
|
234
|
+
|
235
|
+
ssh_key_statements
|
236
|
+
: /* empty */
|
237
|
+
| ssh_key_statement ssh_key_statements { result = val.flatten; }
|
238
|
+
;
|
239
|
+
|
240
|
+
ssh_key_statement
|
241
|
+
: FILE STRING { result = SshKeyFileNode.new( val[1] ); }
|
242
|
+
;
|
243
|
+
|
244
|
+
|
245
|
+
end # class BuildTool::Cfg::GitParser
|
246
|
+
|
247
|
+
---- header ----
|
248
|
+
#
|
249
|
+
### HEADER
|
250
|
+
#
|
251
|
+
require 'build-tool/cfg/lexer'
|
252
|
+
require 'build-tool/cfg/node'
|
253
|
+
require 'build-tool/cfg/visitor'
|
254
|
+
|
255
|
+
|
256
|
+
---- inner ----
|
257
|
+
#
|
258
|
+
### INNER
|
259
|
+
#
|
260
|
+
attr_accessor :configuration
|
261
|
+
|
262
|
+
def initialize( configuration = Configuration.new)
|
263
|
+
super()
|
264
|
+
@configuration = configuration
|
265
|
+
end
|
266
|
+
|
267
|
+
def parse_string( string, file = "<string>" )
|
268
|
+
tree = super
|
269
|
+
visitor = Cfg::ConfigurationFileVisitor.new( configuration )
|
270
|
+
conf = tree.accept( visitor )
|
271
|
+
return configuration
|
272
|
+
end
|
273
|
+
|
274
|
+
---- footer ----
|
275
|
+
#
|
276
|
+
### FOOTER
|
277
|
+
#
|
278
|
+
|
279
|
+
|
@@ -0,0 +1,471 @@
|
|
1
|
+
require 'build-tool/configuration'
|
2
|
+
require 'build-tool/environment'
|
3
|
+
require 'build-tool/repository'
|
4
|
+
require 'build-tool/module'
|
5
|
+
require 'build-tool/sshkey'
|
6
|
+
require 'build-tool/server'
|
7
|
+
|
8
|
+
module BuildTool; module Cfg;
|
9
|
+
|
10
|
+
# Base class for all Visitors.
|
11
|
+
class VisitorBase
|
12
|
+
|
13
|
+
# The configuration object to fill with our parse results.
|
14
|
+
attr_reader :configuration
|
15
|
+
|
16
|
+
def initialize( configuration )
|
17
|
+
@configuration = configuration
|
18
|
+
end
|
19
|
+
|
20
|
+
end # class VisitorBase
|
21
|
+
|
22
|
+
|
23
|
+
# Base class for all Visitors which need to iterate over their child
|
24
|
+
# nodes.
|
25
|
+
class ListVisitor < VisitorBase
|
26
|
+
|
27
|
+
# Visit one node.
|
28
|
+
def visit( node )
|
29
|
+
return self.visit_nodes( node.values )
|
30
|
+
end
|
31
|
+
|
32
|
+
# Visit all nodes.
|
33
|
+
def visit_nodes(nodes)
|
34
|
+
list = []
|
35
|
+
return list if nodes.nil?
|
36
|
+
nodes.each do |child|
|
37
|
+
break if child.nil?
|
38
|
+
list << child.accept( self )
|
39
|
+
end
|
40
|
+
return list
|
41
|
+
end
|
42
|
+
|
43
|
+
end # class ListVisitor
|
44
|
+
|
45
|
+
|
46
|
+
# Build System Declaration Visitor.
|
47
|
+
class BuildSystemDeclarationNodeVisitor < ListVisitor
|
48
|
+
|
49
|
+
# Initialize a build system. If no build system is provided we will
|
50
|
+
# create a new one. Which is not registered with the configuration.
|
51
|
+
def initialize( configuration, build_system = nil )
|
52
|
+
super( configuration )
|
53
|
+
@build_system = build_system
|
54
|
+
end
|
55
|
+
|
56
|
+
def visit_BuildSystemDeclarationNode( node )
|
57
|
+
if @build_system.nil?
|
58
|
+
name = node.values[0]
|
59
|
+
@build_system = configuration.build_system( name ).dup
|
60
|
+
end
|
61
|
+
visit_nodes( node.values[1] )
|
62
|
+
return @build_system
|
63
|
+
end
|
64
|
+
|
65
|
+
def visit_BuildSystemInplaceNode( node )
|
66
|
+
@build_system.out_of_source = false
|
67
|
+
end
|
68
|
+
|
69
|
+
def visit_BuildSystemOptionNode( node )
|
70
|
+
@build_system[ node.value[0] ] = node.value[1]
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
|
76
|
+
# The Configuration File Visitor.
|
77
|
+
#
|
78
|
+
# This is the toplevel visitor.
|
79
|
+
class ConfigurationFileVisitor < ListVisitor
|
80
|
+
|
81
|
+
def visit_BuildSystemDeclarationNode( node )
|
82
|
+
raise ArgumentsError if node.values.length != 2
|
83
|
+
name = node.values[0]
|
84
|
+
visitor = BuildSystemDeclarationNodeVisitor.new( configuration, configuration.build_system(name) )
|
85
|
+
configuration.add_build_system( node.accept( visitor ) )
|
86
|
+
end
|
87
|
+
|
88
|
+
def visit_ConfigurationFileList( node )
|
89
|
+
self.visit(node)
|
90
|
+
end
|
91
|
+
|
92
|
+
def visit_EnvironmentDeclarationNode( node )
|
93
|
+
visitor = EnvironmentDeclarationNodeVisitor.new( configuration )
|
94
|
+
node.accept( visitor )
|
95
|
+
end
|
96
|
+
|
97
|
+
def visit_GitDeclarationNode( node )
|
98
|
+
visitor = GitDeclarationNodeVisitor.new( configuration )
|
99
|
+
return node.accept( visitor )
|
100
|
+
end
|
101
|
+
|
102
|
+
def visit_LogDirectoryNode( node )
|
103
|
+
configuration.log_directory = node.value
|
104
|
+
end
|
105
|
+
|
106
|
+
def visit_ModuleDeclarationNode( node )
|
107
|
+
visitor = ModuleDeclarationNodeVisitor.new( configuration )
|
108
|
+
node.accept( visitor )
|
109
|
+
end
|
110
|
+
|
111
|
+
def visit_RepositoryDeclarationNode( node )
|
112
|
+
visitor = RepositoryDeclarationNodeVisitor.new( configuration )
|
113
|
+
node.accept(visitor)
|
114
|
+
end
|
115
|
+
|
116
|
+
def visit_ServerDeclarationNode( node )
|
117
|
+
visitor = ServerDeclarationNodeVisitor.new( configuration )
|
118
|
+
node.accept(visitor)
|
119
|
+
end
|
120
|
+
|
121
|
+
def visit_SshKeyDeclarationNode( node )
|
122
|
+
visitor = SshKeyDeclarationNodeVisitor.new( configuration )
|
123
|
+
node.accept(visitor)
|
124
|
+
end
|
125
|
+
|
126
|
+
end # class ConfigurationFileVisitor
|
127
|
+
|
128
|
+
|
129
|
+
class EnvironmentDeclarationNodeVisitor < ListVisitor
|
130
|
+
|
131
|
+
def visit_EnvironmentDeclarationNode( node )
|
132
|
+
name = node.values[0]
|
133
|
+
@environment = configuration.environment( name )
|
134
|
+
@environment = BuildTool::Environment.new( name ) if @environment.nil?
|
135
|
+
configuration.add_environment( @environment )
|
136
|
+
if node.values[1] == :INHERITANCE
|
137
|
+
@environment.parent = configuration.environment(node.values[2])
|
138
|
+
self.visit_nodes( node.values[3] )
|
139
|
+
else
|
140
|
+
self.visit_nodes( node.values[1] )
|
141
|
+
end
|
142
|
+
return @environment
|
143
|
+
end
|
144
|
+
|
145
|
+
def visit_EnvironmentVariableNode( node )
|
146
|
+
case node.values[1]
|
147
|
+
when 'append'; @environment.append( node.values[0], node.values[2] )
|
148
|
+
when 'prepend'; @environment.prepend( node.values[0], node.values[2] )
|
149
|
+
when 'set'; @environment.set( node.values[0], node.values[2] )
|
150
|
+
else raise StandardError, "Unexpected token #{node.values[1]}!"
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
end # class EnvironmentDeclarationNodeVisitor
|
155
|
+
|
156
|
+
|
157
|
+
class GitDeclarationNodeVisitor < ListVisitor
|
158
|
+
|
159
|
+
def initialize( configuration, vcs = BuildTool::VCS::GitConfiguration.new )
|
160
|
+
super( configuration )
|
161
|
+
@vcs = vcs
|
162
|
+
end
|
163
|
+
|
164
|
+
def visit_GitDeclarationNode( node )
|
165
|
+
visit_nodes( node.values )
|
166
|
+
return @vcs
|
167
|
+
end
|
168
|
+
|
169
|
+
def visit_GitRemoteNode( node )
|
170
|
+
visitor = GitRemoteNodeVisitor.new( configuration )
|
171
|
+
remote = node.accept(visitor)
|
172
|
+
@vcs.remote[remote.name] = remote
|
173
|
+
end
|
174
|
+
|
175
|
+
def visit_GitTrackBranchNode( node )
|
176
|
+
@vcs.track_branch = node.value
|
177
|
+
end
|
178
|
+
|
179
|
+
end # class GitDeclarationNodeVisitor
|
180
|
+
|
181
|
+
|
182
|
+
class GitSvnDeclarationNodeVisitor < GitDeclarationNodeVisitor
|
183
|
+
|
184
|
+
def initialize( configuration, vcs )
|
185
|
+
super( configuration, vcs )
|
186
|
+
end
|
187
|
+
|
188
|
+
def visit_GitSvnDeclarationNode( node )
|
189
|
+
visit_nodes( node.values )
|
190
|
+
return @vcs
|
191
|
+
end
|
192
|
+
|
193
|
+
def visit_GitSvnExternalNode( node )
|
194
|
+
( name, value ) = node.value.split( '#' )
|
195
|
+
@vcs.add_external( name, value )
|
196
|
+
end
|
197
|
+
|
198
|
+
end # class GitSvnDeclarationNodeVisitor
|
199
|
+
|
200
|
+
|
201
|
+
class GitRemoteNodeVisitor < ListVisitor
|
202
|
+
|
203
|
+
def initialize( configuration )
|
204
|
+
super( configuration )
|
205
|
+
@remote = nil
|
206
|
+
end
|
207
|
+
|
208
|
+
def visit_GitRemoteNode( node )
|
209
|
+
name = node.values[0]
|
210
|
+
@remote = BuildTool::VCS::GitRemote.new( name ) if @remote.nil?
|
211
|
+
node = node.values[1]
|
212
|
+
self.visit_nodes(node.values)
|
213
|
+
return @remote
|
214
|
+
end
|
215
|
+
|
216
|
+
def visit_GitRemotePathNode( node )
|
217
|
+
@remote.path = node.value
|
218
|
+
end
|
219
|
+
|
220
|
+
def visit_GitRemoteValueList( node )
|
221
|
+
self.visit(node)
|
222
|
+
end
|
223
|
+
|
224
|
+
def visit_ServerDeclarationNode( node )
|
225
|
+
visitor = ServerDeclarationNodeVisitor.new( configuration )
|
226
|
+
@remote.server = node.accept(visitor)
|
227
|
+
end
|
228
|
+
|
229
|
+
def visit_UseServerNode( node )
|
230
|
+
@remote.server = configuration.server( node.value )
|
231
|
+
if @remote.server.nil?
|
232
|
+
raise ConfigurationError, "Unknown server #{node.value} configured for remote #{@remote.name}!"
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
end # class GitRemoteNodeVisitor
|
237
|
+
|
238
|
+
|
239
|
+
class ModuleDeclarationNodeVisitor < ListVisitor
|
240
|
+
|
241
|
+
def initialize( configuration )
|
242
|
+
super
|
243
|
+
@module = nil
|
244
|
+
end
|
245
|
+
|
246
|
+
def visit_BuildSystemDeclarationNode( node )
|
247
|
+
raise ArgumentsError if node.values.length != 2
|
248
|
+
name = node.values[0]
|
249
|
+
if @module.build_system and @module.build_system.name == name
|
250
|
+
build_system = @module.build_system.dup
|
251
|
+
else
|
252
|
+
build_system = nil
|
253
|
+
end
|
254
|
+
visitor = BuildSystemDeclarationNodeVisitor.new( configuration, build_system )
|
255
|
+
@module.build_system = node.accept( visitor )
|
256
|
+
@module.build_system.module = @module
|
257
|
+
end
|
258
|
+
|
259
|
+
def visit_EnvironmentDeclarationNode( node )
|
260
|
+
visitor = EnvironmentDeclarationNodeVisitor.new( configuration )
|
261
|
+
@module.environment = node.accept( visitor )
|
262
|
+
end
|
263
|
+
|
264
|
+
def visit_GitDeclarationNode( node )
|
265
|
+
name = node.values[0]
|
266
|
+
if @module.vcs_configuration and @module.vcs_configuration.name == name
|
267
|
+
vcs = @module.vcs_configuration.dup
|
268
|
+
else
|
269
|
+
vcs = BuildTool::VCS::GitConfiguration.new
|
270
|
+
end
|
271
|
+
@module.vcs_configuration = vcs
|
272
|
+
begin
|
273
|
+
visitor = GitDeclarationNodeVisitor.new( configuration, vcs )
|
274
|
+
node.accept( visitor )
|
275
|
+
rescue ConfigurationError => e
|
276
|
+
raise ConfigurationError, "Module #{@module.name}: #{e.to_s}"
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
def visit_GitSvnDeclarationNode( node )
|
281
|
+
name = node.values[0]
|
282
|
+
if @module.vcs_configuration and @module.vcs_configuration.name == name
|
283
|
+
vcs = @module.vcs_configuration.dup
|
284
|
+
else
|
285
|
+
vcs = BuildTool::VCS::GitSvnConfiguration.new
|
286
|
+
end
|
287
|
+
@module.vcs_configuration = vcs
|
288
|
+
visitor = GitSvnDeclarationNodeVisitor.new( configuration, vcs )
|
289
|
+
node.accept( visitor )
|
290
|
+
end
|
291
|
+
|
292
|
+
def visit_ModuleBuildPrefixNode( node )
|
293
|
+
@module.build_prefix = node.value
|
294
|
+
end
|
295
|
+
|
296
|
+
def visit_ModuleDeclarationNode( node )
|
297
|
+
name = node.values[0]
|
298
|
+
inheritance = node.values[1] == :INHERITANCE
|
299
|
+
if inheritance
|
300
|
+
stmts = node.values[3]
|
301
|
+
else
|
302
|
+
stmts = node.values[1]
|
303
|
+
end
|
304
|
+
# Check if the module is alread defined. If yes we reopen it.
|
305
|
+
@module = configuration.module( name )
|
306
|
+
if @module
|
307
|
+
if inheritance
|
308
|
+
raise ConfigurationError, "Attempt change existing module #{name} with inheritance!"
|
309
|
+
end
|
310
|
+
elsif inheritance
|
311
|
+
@module = BuildTool::Module.new( name, configuration.module(node.values[2]) )
|
312
|
+
configuration.add_module( @module )
|
313
|
+
else
|
314
|
+
@module = BuildTool::Module.new( name )
|
315
|
+
configuration.add_module( @module )
|
316
|
+
end
|
317
|
+
self.visit_nodes( stmts )
|
318
|
+
end
|
319
|
+
|
320
|
+
def visit_ModuleInstallPrefixNode( node )
|
321
|
+
@module.install_prefix = node.value
|
322
|
+
end
|
323
|
+
|
324
|
+
def visit_ModuleLocalPathNode( node )
|
325
|
+
@module.local_path = node.value
|
326
|
+
end
|
327
|
+
|
328
|
+
def visit_ModuleRemotePathNode( node )
|
329
|
+
@module.remote_path = node.value
|
330
|
+
end
|
331
|
+
|
332
|
+
def visit_ModuleTemplateNode( node )
|
333
|
+
@module.is_template = true
|
334
|
+
end
|
335
|
+
|
336
|
+
def visit_RepositoryDeclarationNode( node )
|
337
|
+
visitor = RepositoryDeclarationNodeVisitor.new( configuration )
|
338
|
+
@module.repository = node.accept( visitor )
|
339
|
+
end
|
340
|
+
|
341
|
+
def visit_UseBuildSystemNode( node )
|
342
|
+
@module.build_system = configuration.build_system( node.value ).dup
|
343
|
+
@module.build_system.module = @module
|
344
|
+
end
|
345
|
+
|
346
|
+
def visit_UseEnvironmentNode( node )
|
347
|
+
@module.environment = configuration.environment( node.value )
|
348
|
+
if @module.environment.nil?
|
349
|
+
raise ConfigurationError, "Unknown environment #{node.value} configured for module #{@module.name}!"
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
def visit_UseRepositoryNode( node )
|
354
|
+
@module.repository = configuration.repository( node.value )
|
355
|
+
if @module.repository.nil?
|
356
|
+
raise ConfigurationError, "Unknown repository #{node.value} configured for module #{@module.name}!"
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
360
|
+
def visit_UseVcsNode( node )
|
361
|
+
@module.vcs_configuration = configuration.vcs(node.value)
|
362
|
+
end
|
363
|
+
|
364
|
+
end # class ModuleDeclarationNodeVisitor
|
365
|
+
|
366
|
+
|
367
|
+
class RepositoryDeclarationNodeVisitor < ListVisitor
|
368
|
+
|
369
|
+
def visit_RepositoryDeclarationNode( node )
|
370
|
+
name = node.values[0]
|
371
|
+
@repository = configuration.repository(name)
|
372
|
+
if @repository.nil?
|
373
|
+
@repository = BuildTool::Repository.new( name )
|
374
|
+
configuration.add_repository( @repository )
|
375
|
+
end
|
376
|
+
stmts = node.values[1]
|
377
|
+
visit_nodes( stmts )
|
378
|
+
return @repository
|
379
|
+
end
|
380
|
+
|
381
|
+
def visit_RepositoryPathNode( node )
|
382
|
+
@repository.path = node.value
|
383
|
+
end
|
384
|
+
|
385
|
+
def visit_RepositoryServerNode( node )
|
386
|
+
@repository.server = configuration.server( node.value )
|
387
|
+
if @repository.server.nil?
|
388
|
+
raise ConfigurationError, "Unknown server #{node.value} configured for repository #{@repository.name}!"
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
392
|
+
def visit_RepositoryUserNode( node )
|
393
|
+
@repository.user = node.value
|
394
|
+
end
|
395
|
+
|
396
|
+
def visit_SshKeyDeclarationNode( node )
|
397
|
+
@repository.sshkey = node.value
|
398
|
+
end
|
399
|
+
|
400
|
+
def visit_UseSshKeyNode( node )
|
401
|
+
name = node.value
|
402
|
+
@repository.sshkey = configuration.sshkey(name)
|
403
|
+
raise ConfigurationError, "Unknown ssh-key #{name} configured for repository #{@repository.name}!" if @repository.sshkey.nil?
|
404
|
+
end
|
405
|
+
|
406
|
+
end # class RepositoryDeclarationNodeVisitor
|
407
|
+
|
408
|
+
|
409
|
+
class ServerDeclarationNodeVisitor < ListVisitor
|
410
|
+
|
411
|
+
def initialize( configuration )
|
412
|
+
super( configuration )
|
413
|
+
@server = nil
|
414
|
+
end
|
415
|
+
|
416
|
+
def visit_ServerDeclarationNode( node )
|
417
|
+
name = node.values[0]
|
418
|
+
# Check if a server with that name already exists
|
419
|
+
@server = configuration.server(name)
|
420
|
+
# Create a new one if not
|
421
|
+
@server = Server.new( name ) if @server.nil?
|
422
|
+
statements = node.values[1]
|
423
|
+
self.visit_nodes(statements.values)
|
424
|
+
configuration.add_server( @server )
|
425
|
+
return @server
|
426
|
+
end
|
427
|
+
|
428
|
+
def visit_ServerHostNode( node )
|
429
|
+
@server.host = node.value
|
430
|
+
end
|
431
|
+
|
432
|
+
def visit_ServerPathNode( node )
|
433
|
+
@server.path = node.value
|
434
|
+
end
|
435
|
+
|
436
|
+
def visit_ServerProtocolNode( node )
|
437
|
+
@server.protocol = node.value
|
438
|
+
end
|
439
|
+
|
440
|
+
def visit_ServerStatementList( node )
|
441
|
+
self.visit( node )
|
442
|
+
end
|
443
|
+
|
444
|
+
end # class ServerDeclarationNodeVisitor
|
445
|
+
|
446
|
+
|
447
|
+
class SshKeyDeclarationNodeVisitor < ListVisitor
|
448
|
+
|
449
|
+
def initialize( configuration )
|
450
|
+
super
|
451
|
+
@sshkey = nil
|
452
|
+
end
|
453
|
+
|
454
|
+
def visit_SshKeyDeclarationNode( node )
|
455
|
+
name = node.values[0]
|
456
|
+
stmts = node.values[1]
|
457
|
+
@sshkey = BuildTool::SshKey.new( name )
|
458
|
+
configuration.add_sshkey( @sshkey )
|
459
|
+
visit_nodes( stmts )
|
460
|
+
return @sshkey
|
461
|
+
end
|
462
|
+
|
463
|
+
def visit_SshKeyFileNode( node )
|
464
|
+
@sshkey.file = File.expand_path( node.value )
|
465
|
+
end
|
466
|
+
|
467
|
+
end
|
468
|
+
|
469
|
+
end; end
|
470
|
+
|
471
|
+
|