rbuild 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,81 @@
1
+ RBuild - a KBuild like software configure/build system by Ruby DSL.
2
+ -------------------------------------------------------------------
3
+
4
+ -- Introduction --
5
+
6
+ Rbuild is a KBuild like configure/build system, like KBuild, RBuild provide a menu driven configure interface for target software. RBuild take 'RConfig' files as input, generate target software configuration files by RBuild plugins, for example, the 'export_c' plugin generate C/C++ header config.h and Makefiles.
7
+
8
+ A RConfig's syntax looks more like KConfig, plus lots of ruby flavors. Since RConfig file actually is a ruby script, it could be very flexiable and powerful.
9
+
10
+ -- RConfig --
11
+
12
+ All RConfig instructions falls into four catalogs:
13
+ - organizing: 'menu', 'group'
14
+ - configuration: 'choice', 'config'
15
+ - property: 'title', 'default', 'help', 'range', 'depends', 'select', 'unselect' and 'property'
16
+ - file inclusion: 'source'
17
+
18
+ A Simple RConfig example:
19
+
20
+ title "Welcom to my software config system !"
21
+ menu "Package config" do
22
+ config :PACKAGE_A => "enable package A"
23
+ group "Package A options" do
24
+ depends :PACKAGE_A
25
+ config :PACKAGE_A_FUN_A => "function A"
26
+ config :PACKAGE_A_FUN_B => "function B"
27
+ end
28
+ config :PACKAGE_B => "enable package B"
29
+ choice :PACKAGE_B_PARAM => "select package B param" do
30
+ depends :PACKAGE_B
31
+ default 200
32
+ range 100, 200, 300
33
+ end
34
+ end
35
+ menu "RBuild Configuration" do
36
+ group "RBuild System Options" do
37
+ choice :RBUILD_SYS_CONFIG_FILE => "RBuild Configuration File" do
38
+ property :no_export # do not export this, it's for rbuild system internal.
39
+ default 'rb.config'
40
+ end
41
+
42
+ choice :RBUILD_PLUGIN_EXP_C_HEADER_FILE => "RBuild Export File" do
43
+ property :no_export # do not export this, it's for rbuild system internal.
44
+ default 'config.h'
45
+ end
46
+ end
47
+ end
48
+
49
+ Please have a look the RConfig file under 'example' folder, it almost explains everything about RConfig DSL.
50
+
51
+
52
+ -- Install --
53
+
54
+ 1. Install Ruby interpreter (http://www.ruby-lang.org)
55
+ 2. Copy 'scripts' directory into your target software package
56
+ 3. Write your 'RConfig' files
57
+ 4. Create a 'Rakefile' as:
58
+ require 'scripts/rbuild'
59
+
60
+ task :menuconfig do
61
+ rconf = RBuild::RConfig.new 'RConfig'
62
+ rconf.menuconfig()
63
+ end
64
+ 5. at your target software package's root dir, run:
65
+ rake menuconfig
66
+
67
+
68
+ -- Project Home --
69
+
70
+ RBuild is hosted by SourceForge (http://www.sourceforge.net/projects/rbuild/)
71
+ RBuild's home page http://rbuild.sf.net/
72
+
73
+
74
+ -- LICENCE --
75
+
76
+ RBuild is released under GNU GPLv2.
77
+
78
+ Copy Right (c) 2008, Ricky Zheng <ricky_gz_zheng@yahoo.co.nz>
79
+
80
+
81
+
@@ -0,0 +1,203 @@
1
+ RBuild - a KBuild like software configure/build system by Ruby DSL.
2
+ -------------------------------------------------------------------
3
+
4
+ -- 1 RBuild简介 --
5
+
6
+ RBuild是一个类似KBuild的软件配置和编译系统。Linux内核配置和编译就采用了KBuild,使用着可以方便地用菜单来配置/定制Linux内核。
7
+ 由于KBuild比较复杂,需要依赖许多Linux下的库,而且定制和扩展KBuild的功能都很麻烦,因此要在一个软件项目中采用KBuild,往往需要作许多工作。
8
+
9
+ RBuild的目的也就是为你的软件提供一个类似KBuild的基于菜单的配置系统。在一个软件项目中使用RBuild很简单,只要系统中安装有Ruby(和Rake)就可以了。
10
+
11
+ 由于RBuild采用Ruby DSL来实现,因此非常灵活,易于扩展。RBuild不仅可以从配置中产生C/C++的头文件,Makefile文件,而且可以很容易地扩展RBuild(增加plugins)来
12
+ 产生你所需要的格式的文件。因此,RBuild不仅可以用于C/C++项目的配置管理,也可以用于其他语言的开发项目。
13
+
14
+ -- 2 RBuild 的组成 --
15
+
16
+ RBuild由三部分组成:RBuild核心,RBuild插件,和RBuild配置文件(RConfig)。
17
+
18
+ RBuild核心完成DSL解析,菜单驱动等功能,RBuild插件负责输出各种文件。RBuild核心和RBuild插件由RBuild项目提供,参加scripts目录下的文件。
19
+ 而RConfig文件则需要由用户编写。RConfig文件就是用户用RBuild DSL来描述自己软件需要配置的信息,RConfig文件可以是一个或者多个散布在用户工程
20
+ 目录中,熟悉Linux内核开发的用户对于这种方式一定非常熟悉。
21
+
22
+ 最后,RConfig文件作为RBuild的输入,用于产生配置菜单,供使用者对软件进行配置。
23
+
24
+ -- 3 RConfig 语法 --
25
+
26
+ 3.1 RBuild DSL语句
27
+ RBuild DSL有四种类型:
28
+ * 第一种用于组织配置项的显示,如:'menu', 'group'。
29
+ * 第二种是用于产生配置项,如:'choice', 'config'。
30
+ * 第三种是属性描述,如:'title', 'default', 'help', 'range', 'depends', ...
31
+ * 最后一种是用于包含其他RConfig文件,如:'source', 'target'
32
+
33
+ 一个简单的RConfig文件例子:
34
+
35
+ title "Welcom to my software config system !"
36
+ menu "Package config" do
37
+ config :PACKAGE_A => "enable package A"
38
+ group "Package A options" do
39
+ depends :PACKAGE_A
40
+ config :PACKAGE_A_FUN_A => "function A"
41
+ config :PACKAGE_A_FUN_B => "function B"
42
+ end
43
+ config :PACKAGE_B => "enable package B"
44
+ choice :PACKAGE_B_PARAM => "select package B param" do
45
+ depends :PACKAGE_B
46
+ default 200
47
+ range 100, 200, 300
48
+ end
49
+ end
50
+ menu "RBuild Configuration" do
51
+ group "RBuild System Options" do
52
+ choice :RBUILD_SYS_CONFIG_FILE => "RBuild Configuration File" do
53
+ property :no_export # do not export this, it's for rbuild system internal.
54
+ default 'rb.config'
55
+ end
56
+
57
+ choice :RBUILD_PLUGIN_EXP_C_HEADER_FILE => "RBuild Export File" do
58
+ property :no_export # do not export this, it's for rbuild system internal.
59
+ default 'config.h'
60
+ end
61
+ end
62
+ end
63
+
64
+ 3.2 RConfig 语法
65
+ RConfig文件的语法非常简单,如果熟悉Ruby的语法,那么理解就更简单了,以下就是对RConfig语法的一个简单描述:
66
+
67
+ 3.2.1 do ... end: 用于限定子项目的作用范围,例如:
68
+ menu "XXX" do
69
+ config :PACKAGE_A
70
+ end
71
+
72
+ 在这里,config :PACKAGE_A 就是menu "XXX" 的子项目。当然,子项目可以是任意合法的语句,如配置项(config),选择项(choice),
73
+ 或者属性,也可以嵌套另一个menu,如:
74
+ menu "XXX" do
75
+ menu "YYY" do
76
+ ...
77
+ end
78
+ end
79
+
80
+ 通过 do ... end, RConfig就可以构筑了一个有层次的菜单系统。
81
+
82
+ 3.2.2 “:XXX” 符号
83
+ 在RConfig中,以":"开头的称为“符号”, 如 :MODULE_A, 就是一个“符号”。“符号”用于对某个 menu, group, config 或 choice 进行标识,例如:
84
+
85
+ config :MODULE_A => "enable module A"
86
+
87
+ 在这里,用 :MODULE_A 对这个‘config’进行标识。
88
+ 符号后面可以用 => "description string" 来对这个符号进行描述,这里的描述信息也会作为提示信息显示在配置菜单中。如果不带描述信息,则符号名称会作为
89
+ 描述信息出现在菜单项中。
90
+
91
+ 符号,作为对'config'或者'choice'的标识,在输出C/C++头文件的时候会被转换成宏定义。例如:
92
+ config :MODULE_A 这个选项如果被选中,那么最终产生的C/C++头文件中就会出现这么一行:
93
+ #define CONFIG_MODULE_A
94
+ 也就是说,符号前面被加上“CONFIG_”出现在头文件中。
95
+
96
+ 有时候符号可以被省略,而直接用描述信息作为标识,例如前面看到的menu实际上就是这种情况:
97
+ menu "XXX" do
98
+ ...
99
+ end
100
+ 有些情况下,你需要对一个menu进行显式的标识,如:
101
+ menu :MENU_XXX => "XXX" do
102
+ ...
103
+ end
104
+
105
+ 更多的关于如何编写RConfig文件,请参阅example目录下的例子。
106
+
107
+ 3.3.3 RBuild DSL参考
108
+ 这里列出目前所能够支持的RBuild DSL:
109
+
110
+ 3.3.3.1 属性
111
+ 从上面的例子我们可以看到,属性声明要放在do ... end 里面,如果:
112
+ choice :PACKAGE_B_PARAM => "select package B param" do
113
+ depends :PACKAGE_B
114
+ default 200
115
+ range 100, 200, 300
116
+ end
117
+ 这里的depends, default, range都是属性声明语句,他们都是作用于choice :PACKAGE_B_PARAM。
118
+
119
+ 目前RBuild实现的属性声明有:
120
+ - title: 设置描述信息
121
+ - help: 设置帮助信息
122
+ - default: 设置默认值,注意,值的类型要和被设置对象吻合
123
+ - range: 设置值的范围,通常作用于choice。range的声明方式很灵活,有以下几种形式:
124
+ range 100, 200, 300 # 只有三个选择,100, 200 或 300
125
+ range 0..100 # 从0到100的任意值(包括0和100)
126
+ range "A", "B", "C" # 字符串形式的选择项
127
+ range 0=>"Zero", 1=>"One", 2=>"Two" # 带描述信息的选择项
128
+
129
+ - depends: 声明此项目依赖于其他项目,后面的参数是被依赖项目的标识符(符号),如:
130
+ depends :MODULE_A, :MODULE_B
131
+
132
+ - select: 当本项目被选中时,主动选择另外的项目,如:
133
+ select :FUN_A, :FUN_B # 但此项目被选中是,同时也选中 :FUN_A 和 :FUN_B
134
+
135
+ - unselect: 当本项目被反选中时,也同时反选中另外的项目
136
+ - no_export: 告诉RBuild在产生输出文件时忽略此项目。
137
+ - hidden: 隐藏此项目,不在菜单上出现。
138
+ - property: 这是一个中转器,用于集中设置其他项目,使代码看起来更紧凑,如:
139
+ property :hidden, :no_export, :default => 0
140
+ 等效于:
141
+ hidden
142
+ no_export
143
+ default 0
144
+
145
+ 3.3.3.2 项目组织类
146
+ - menu: 用于产生菜单,用于隐藏子项目,当进入此菜单时,显示子项目。
147
+ - group: 对一组子项目进行归纳。和menu不同,group在当前视图中显示子项目。
148
+
149
+ 3.3.3.3 配置项目类
150
+ - config: 用于简单的配置。对于config,只有"选中"和"未选中"两种状态。当然,这两种状态对应的配置值可以用range来指定。
151
+ - choice: 用于复杂的配置哦。对于choice,要看是否为choice设置了范围(用range设置范围):
152
+ 如果range存在,则根据range的设置,从range里面选择配置。
153
+ 如果range不存在,则提示用户输入自定义的值。
154
+
155
+ 3.3.3.4 文件包含类
156
+ - source: 用于包含另外一个或者多个RConfig文件,例如:
157
+ source "src/RConfig" # 包含src目录下的RConfig文件。
158
+ 也可以在source参数中使用通配符,如:
159
+ source "*/RConfig" # 包含所有子目录下的RConfig文件。
160
+ 甚至可以这样:
161
+ source "**/*/RConfig" # 递归包含所有子目录下的RConfig文件。
162
+ - target: 用于指示当一个配置被选中时应该把那些文件加入到'target list'里面。
163
+ 'target list'通常用于产生输出文件,如Makefile文件。例如:
164
+
165
+ config :MUDLE_A => "enable module A" do
166
+ target 'module_a.c'
167
+ end
168
+
169
+ target也可以放在config和choice外面,这时只要当前的依赖满足,就总是把文件放入'target list'里面。
170
+
171
+ -- 4 安装RBuild --
172
+
173
+ 4.1. 安装 Ruby,可以从 http://www.ruby-lang.org 处下载。或者,如果是在Debian/Ubuntu下:
174
+ sudo apt-get install ruby1.8 rake
175
+
176
+ 4.2. 把 'scripts' 目录拷贝到你的项目目录下。
177
+
178
+ 4.3. 开始编写你的RConfig文件,通常第一个RConfig文件放在你的项目目录下。
179
+
180
+ 4.4. 在项目的目录下建立一个Rakefile文件, 内容如下:
181
+ require 'scripts/rbuild'
182
+
183
+ task :menuconfig do
184
+ rconf = RBuild::RConfig.new 'RConfig'
185
+ rconf.menuconfig()
186
+ end
187
+ 4.5. 在项目目录下,键入:
188
+ rake menuconfig
189
+
190
+
191
+ -- 5 RBuild项目主页 --
192
+
193
+ http://www.sourceforge.net/projects/rbuild/
194
+
195
+
196
+ -- 6 LICENCE --
197
+
198
+ RBuild is released under GNU GPLv2.
199
+
200
+ Copy Right (c) 2008, Ricky Zheng <ricky_gz_zheng@yahoo.co.nz>
201
+
202
+
203
+
@@ -0,0 +1,197 @@
1
+ RBuild - a KBuild like software configure/build system by Ruby DSL.
2
+ -------------------------------------------------------------------
3
+
4
+ -- 1 RBuild简介 --
5
+
6
+ RBuild是一个类似KBuild的软件配置和编译系统。Linux内核配置和编译就采用了KBuild,使用着可以方便地用菜单来配置/定制Linux内核。
7
+ 由于KBuild比较复杂,需要依赖许多Linux下的库,而且定制和扩展KBuild的功能都很麻烦,因此要在一个软件项目中采用KBuild,往往需要作许多工作。
8
+
9
+ RBuild的目的也就是为你的软件提供一个类似KBuild的基于菜单的配置系统。在一个软件项目中使用RBuild很简单,只要系统中安装有Ruby(和Rake)就可以了。
10
+
11
+ 由于RBuild采用Ruby DSL来实现,因此非常灵活,易于扩展。RBuild不仅可以从配置中产生C/C++的头文件,Makefile文件,而且可以很容易地扩展RBuild(增加plugins)来
12
+ 产生你所需要的格式的文件。因此,RBuild不仅可以用于C/C++项目的配置管理,也可以用于其他语言的开发项目。
13
+
14
+ -- 2 RBuild 的组成 --
15
+
16
+ RBuild由三部分组成:RBuild核心,RBuild插件,和RBuild配置文件(RConfig)。
17
+
18
+ RBuild核心完成DSL解析,菜单驱动等功能,RBuild插件负责输出各种文件。RBuild核心和RBuild插件由RBuild项目提供,参加scripts目录下的文件。
19
+ 而RConfig文件则需要由用户编写。RConfig文件就是用户用RBuild DSL来描述自己软件需要配置的信息,RConfig文件可以是一个或者多个散布在用户工程
20
+ 目录中,熟悉Linux内核开发的用户对于这种方式一定非常熟悉。
21
+
22
+ 最后,RConfig文件作为RBuild的输入,用于产生配置菜单,供使用者对软件进行配置。
23
+
24
+ -- 3 RConfig 语法 --
25
+
26
+ 3.1 RBuild DSL语句
27
+ RBuild DSL有四种类型:
28
+ * 第一种用于组织配置项的显示,如:'menu', 'group'。
29
+ * 第二种是用于产生配置项,如:'choice', 'config'。
30
+ * 第三种是属性描述,如:'title', 'default', 'help', 'range', 'depends', ...
31
+ * 最后一种是用于包含其他RConfig文件,如:'source'
32
+
33
+ 一个简单的RConfig文件例子:
34
+
35
+ title "Welcom to my software config system !"
36
+ menu "Package config" do
37
+ config :PACKAGE_A => "enable package A"
38
+ group "Package A options" do
39
+ depends :PACKAGE_A
40
+ config :PACKAGE_A_FUN_A => "function A"
41
+ config :PACKAGE_A_FUN_B => "function B"
42
+ end
43
+ config :PACKAGE_B => "enable package B"
44
+ choice :PACKAGE_B_PARAM => "select package B param" do
45
+ depends :PACKAGE_B
46
+ default 200
47
+ range 100, 200, 300
48
+ end
49
+ end
50
+ menu "RBuild Configuration" do
51
+ group "RBuild System Options" do
52
+ choice :RBUILD_SYS_CONFIG_FILE => "RBuild Configuration File" do
53
+ property :no_export # do not export this, it's for rbuild system internal.
54
+ default 'rb.config'
55
+ end
56
+
57
+ choice :RBUILD_PLUGIN_EXP_C_HEADER_FILE => "RBuild Export File" do
58
+ property :no_export # do not export this, it's for rbuild system internal.
59
+ default 'config.h'
60
+ end
61
+ end
62
+ end
63
+
64
+ 3.2 RConfig 语法
65
+ RConfig文件的语法非常简单,如果熟悉Ruby的语法,那么理解就更简单了,以下就是对RConfig语法的一个简单描述:
66
+
67
+ 3.2.1 do ... end: 用于限定子项目的作用范围,例如:
68
+ menu "XXX" do
69
+ config :PACKAGE_A
70
+ end
71
+
72
+ 在这里,config :PACKAGE_A 就是menu "XXX" 的子项目。当然,子项目可以是任意合法的语句,如配置项(config),选择项(choice),
73
+ 或者属性,也可以嵌套另一个menu,如:
74
+ menu "XXX" do
75
+ menu "YYY" do
76
+ ...
77
+ end
78
+ end
79
+
80
+ 通过 do ... end, RConfig就可以构筑了一个有层次的菜单系统。
81
+
82
+ 3.2.2 “:XXX” 符号
83
+ 在RConfig中,以":"开头的称为“符号”, 如 :MODULE_A, 就是一个“符号”。“符号”用于对某个 menu, group, config 或 choice 进行标识,例如:
84
+
85
+ config :MODULE_A => "enable module A"
86
+
87
+ 在这里,用 :MODULE_A 对这个‘config’进行标识。
88
+ 符号后面可以用 => "description string" 来对这个符号进行描述,这里的描述信息也会作为提示信息显示在配置菜单中。如果不带描述信息,则符号名称会作为
89
+ 描述信息出现在菜单项中。
90
+
91
+ 符号,作为对'config'或者'choice'的标识,在输出C/C++头文件的时候会被转换成宏定义。例如:
92
+ config :MODULE_A 这个选项如果被选中,那么最终产生的C/C++头文件中就会出现这么一行:
93
+ #define CONFIG_MODULE_A
94
+ 也就是说,符号前面被加上“CONFIG_”出现在头文件中。
95
+
96
+ 有时候符号可以被省略,而直接用描述信息作为标识,例如前面看到的menu实际上就是这种情况:
97
+ menu "XXX" do
98
+ ...
99
+ end
100
+ 有些情况下,你需要对一个menu进行显式的标识,如:
101
+ menu :MENU_XXX => "XXX" do
102
+ ...
103
+ end
104
+
105
+ 更多的关于如何编写RConfig文件,请参阅example目录下的例子。
106
+
107
+ 3.3.3 RBuild DSL参考
108
+ 这里列出目前所能够支持的RBuild DSL:
109
+
110
+ 3.3.3.1 属性
111
+ 从上面的例子我们可以看到,属性声明要放在do ... end 里面,如果:
112
+ choice :PACKAGE_B_PARAM => "select package B param" do
113
+ depends :PACKAGE_B
114
+ default 200
115
+ range 100, 200, 300
116
+ end
117
+ 这里的depends, default, range都是属性声明语句,他们都是作用于choice :PACKAGE_B_PARAM。
118
+
119
+ 目前RBuild实现的属性声明有:
120
+ - title: 设置描述信息
121
+ - help: 设置帮助信息
122
+ - default: 设置默认值,注意,值的类型要和被设置对象吻合
123
+ - range: 设置值的范围,通常作用于choice。range的声明方式很灵活,有以下几种形式:
124
+ range 100, 200, 300 # 只有三个选择,100, 200 或 300
125
+ range 0..100 # 从0到100的任意值(包括0和100)
126
+ range "A", "B", "C" # 字符串形式的选择项
127
+ range 0=>"Zero", 1=>"One", 2=>"Two" # 带描述信息的选择项
128
+
129
+ - depends: 声明此项目依赖于其他项目,后面的参数是被依赖项目的标识符(符号),如:
130
+ depends :MODULE_A, :MODULE_B
131
+
132
+ - select: 当本项目被选中时,主动选择另外的项目,如:
133
+ select :FUN_A, :FUN_B # 但此项目被选中是,同时也选中 :FUN_A 和 :FUN_B
134
+
135
+ - unselect: 当本项目被反选中时,也同时反选中另外的项目
136
+ - no_export: 告诉RBuild在产生输出文件时忽略此项目。
137
+ - hidden: 隐藏此项目,不在菜单上出现。
138
+ - property: 这是一个中转器,用于集中设置其他项目,使代码看起来更紧凑,如:
139
+ property :hidden, :no_export, :default => 0
140
+ 等效于:
141
+ hidden
142
+ no_export
143
+ default 0
144
+
145
+ 3.3.3.2 项目组织类
146
+ - menu: 用于产生菜单,用于隐藏子项目,当进入此菜单时,显示子项目。
147
+ - group: 对一组子项目进行归纳。和menu不同,group在当前视图中显示子项目。
148
+
149
+ 3.3.3.3 配置项目类
150
+ - config: 用于简单的配置。对于config,只有"选中"和"未选中"两种状态。当然,这两种状态对应的配置值可以用range来指定。
151
+ - choice: 用于复杂的配置哦。对于choice,要看是否为choice设置了范围(用range设置范围):
152
+ 如果range存在,则根据range的设置,从range里面选择配置。
153
+ 如果range不存在,则提示用户输入自定义的值。
154
+
155
+ 3.3.3.4 文件包含类
156
+ - source: 用于包含另外一个或者多个RConfig文件,例如:
157
+ source "src/RConfig" # 包含src目录下的RConfig文件。
158
+ 也可以在source参数中使用通配符,如:
159
+ source "*/RConfig" # 包含所有子目录下的RConfig文件。
160
+ 甚至可以这样:
161
+ source "**/*/RConfig" # 递归包含所有子目录下的RConfig文件。
162
+
163
+
164
+ -- 4 安装RBuild --
165
+
166
+ 4.1. 安装 Ruby,可以从 http://www.ruby-lang.org 处下载。或者,如果是在Debian/Ubuntu下:
167
+ sudo apt-get install ruby1.8 rake
168
+
169
+ 4.2. 把 'scripts' 目录拷贝到你的项目目录下。
170
+
171
+ 4.3. 开始编写你的RConfig文件,通常第一个RConfig文件放在你的项目目录下。
172
+
173
+ 4.4. 在项目的目录下建立一个Rakefile文件, 内容如下:
174
+ require 'scripts/rbuild'
175
+
176
+ task :menuconfig do
177
+ rconf = RBuild::RConfig.new 'RConfig'
178
+ rconf.menuconfig()
179
+ end
180
+ 4.5. 在项目目录下,键入:
181
+ rake menuconfig
182
+
183
+
184
+ -- 5 RBuild项目主页 --
185
+
186
+ http://www.sourceforge.net/projects/rbuild/
187
+
188
+
189
+
190
+ -- 6 LICENCE --
191
+
192
+ RBuild is released under GNU GPLv2.
193
+
194
+ Copy Right (c) 2008, Ricky Zheng <ricky_gz_zheng@yahoo.co.nz>
195
+
196
+
197
+