1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
# There are meta packages only.
%define __debug_install_post %{nil}
%define debug_package %{nil}
%define tizen_feature() sed -i 's#\\\(\\\"%{1}\\\".\\\+>\\\).\\\+\\\(</key>\\\)#\\\1%{2}\\\2#' %{_sysconfdir}/config/model-config.xml;
Name: building-blocks
Version: 0.0.2
Release: 0
License: Apache-2.0
Summary: The Root of All Tizen Meta Packages (building blocks)
Url: http://tizen.org
Group: Meta
Source0: %{name}-%{version}.tar.gz
# Domains are rearranged by API sets according to developer.tizen.org
#Source1001: domain-kernel.inc
#Source1002: domain-systemfw.inc
#Source1010: domain-appfw.inc
#Source1020: domain-window-system.inc
#Source1030: domain-graphics.inc
#Source1040: domain-network.inc
#Source1050: domain-multimedia.inc
#Source1060: domain-hal.inc
#Source1070: domain-service-framework.inc
#Source1080: domain-UI.inc
#Source1090: domain-UIX.inc
#Source1100: domain-security.inc
Source1200: domain-apis.inc
#Source1210: domain-csapis.inc
#Source1220: domain-webapis.inc
Source2010: epicfeature-development.inc
Source2020: epicfeature-platform.inc
Source3500: platform-preset-iot.inc
Source3800: platform-preset-boards.inc
# To get .ks files
BuildRequires: image-configurations
# To check the rules
BuildRequires: python
# Root Categories
Suggests: %{name}-category-domains
Suggests: %{name}-category-epicfeatures
Suggests: %{name}-category-Presets
%description
The root of all Tizen building block meta packages.
Every root-level Tizen building block should be included by this.
Any "minimal" required packages should be somehow (directly or indirectly)
required (included) by this package.
In Tizen building blocks,
"Requires" means mandatory package.
"Suggests" means optional package.
"Recommends" is reserved for future usage.
"Conflicts" is to unselect unconditionally.
%package category-domains
Summary: Tizen Techinical Domains
Suggests: %{name}-root-domain_API
#Suggests: %{name}-root-domain_CSAPI
#Suggests: %{name}-root-domain_WebAPI
%description category-domains
This meta package lists all Tizen blocks (meta packages) designating
technical domains.
%files category-domains
# Intentionally empty
%package category-epicfeatures
Summary: Tizen Major Features
Suggests: %{name}-root-feature_Development
Suggests: %{name}-root-feature_Platform
Suggests: %{name}-root-feature_App
%description category-epicfeatures
This meta package lists all Tizen blocks (meta packages) designating
major features that are supposed to be orthogonal to each other
and to most domains.
%files category-epicfeatures
# Intentionally empty
%package category-Preset
Summary: Tizen Presets
Suggests: %{name}-root-Preset_iot_core
Suggests: %{name}-root-Preset_iot_core_rpi3
Suggests: %{name}-root-Preset_boards
Suggests: %{name}-root-Preset_iot_headed
%description category-Preset
This meta pacakge lists all Tizen blocks (meta packages) designating
Tizen platform presets, HAL/device-support presets, and
presets describing specific products.
%files category-Preset
# Intentionally empty
# Do not try to include files unless RPMBUILD has already expanded source files to SOURCES
# Use Source1001 (domain-kernel) as the probing point.
%define include_if_mainbuild() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then print("%include "..rpm.expand("%{1}").." ") end}}
# Create a target device preset from .ks file used to create device iamge.
# This script writes build-spec when building the build-spec itself. :)
# Importing .ks file with list_with_require() based on image-configuration will work
# after Tizen:Unified starts to generate its own platform images.
%define list_with_require() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then \
local start = 0 \
if posix.access(rpm.expand("%{1}")) then \
for line in io.lines(rpm.expand("%{1}")) do \
if (string.match(line, '%%end')) then break end \
if (string.match(line, '%%packages')) then \
start = 1 \
else \
if (start == 1) then \
if (string.match(line, '#')) then \
elseif (string.sub(line, 1, 1) == '-') then \
elseif (string.len(line) == 0) then\
else \
print("Requires: "..line) \
print("\\n") \
end \
end \
end \
end \
else \
print("Requires: CANNOT_FIND_REQUIRED_FILES\\n") \
end \
end}}
# Create a target device preset from .ks file used to create device iamge.
# This script writes build-spec when building the build-spec itself. :)
# Importing .ks file with list_with_require() based on image-configuration will work
# after Tizen:Unified starts to generate its own platform images.
# Removing the target-dependent files.
%define list_with_require_nodep_device() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then \
local start = 0 \
if posix.access(rpm.expand("%{1}")) then \
for line in io.lines(rpm.expand("%{1}")) do \
if (string.match(line, '%%end')) then break end \
if (string.match(line, '%%packages')) then \
start = 1 \
else \
if (start == 1) then \
if (string.match(line, '#')) then \
elseif (string.sub(line, 1, 1) == '-') then \
elseif (string.len(line) == 0) then\
elseif (string.match(line,"model%-config")) then\
elseif (string.match(line,"pepper")) then\
elseif (string.match(line,"system%-plugin")) then\
elseif (string.match(line,"vconf%-internal%-keys%-config%-profile")) then\
else \
print("Requires: "..line) \
print("\\n") \
end \
end \
end \
end \
else \
print("Requires: CANNOT_FIND_REQUIRED_FILES\\n") \
end \
end}}
# Create Suggests List of blocks with yaml file list
# DIRECTORY, Prefix-To-Be-Removed, Prefix-for-block-name
%define list_suggest() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then \
for f in posix.files(rpm.expand("%{1}")) do \
local line = string.sub(f, string.len(rpm.expand("%{2}"))+2) \
local prefix = string.sub(f, 1, string.len(rpm.expand("%{2}"))) \
if (string.sub(line, 1, 10) == 'adaptation') then \
elseif (string.sub(line, 1, 4) == 'boot') then \
elseif (prefix == rpm.expand("%{2}")) then \
line = string.gsub(line, "-", "_")
print("Suggests: %{name}-"..rpm.expand("%{3}").."zblock_"..line) \
print("\\n") \
end \
end \
end}}
# Requires the created suggests list of blocks with yaml file list
# DIRECTORY, Prefix-To-Be-Removed, Prefix-for-block-name
%define list_suggest_linkreq() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then \
for f in posix.files(rpm.expand("%{1}")) do \
local line = string.sub(f, string.len(rpm.expand("%{2}"))+2) \
local prefix = string.sub(f, 1, string.len(rpm.expand("%{2}"))) \
if (string.sub(line, 1, 10) == 'adaptation') then \
elseif (string.sub(line, 1, 4) == 'boot') then \
elseif (prefix == rpm.expand("%{2}")) then \
line = string.gsub(line, "-", "_")
print("Requires: %{name}-"..rpm.expand("%{3}").."zblock_"..line) \
print("\\n") \
end \
end \
end}}
# Create Requires List of packages for all blocks with yaml file list
# DIRECTORY, Prefix-To-Be-Removed, Prefix-for-block-name
%define list_require() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1200}"), "f") then \
for f in posix.files(rpm.expand("%{1}")) do \
local line = string.sub(f, string.len(rpm.expand("%{2}"))+2) \
local prefix = string.sub(f, 1, string.len(rpm.expand("%{2}"))) \
if (string.sub(line, 1, 10) == 'adaptation') then \
elseif (string.sub(line, 1, 4) == 'boot') then \
elseif (prefix == rpm.expand("%{2}")) then \
local pkg = rpm.expand("%{3}").."zblock_"..string.gsub(line, "-", "_") \
local summary_available = 0 \
local filename = rpm.expand("%{1}").."/"..f \
print("\\n") \
print("%package "..pkg.."\\n") \
if posix.access(filename) then \
for tag in io.lines(filename) do \
if (string.sub(tag, 1, 8) == "Summary:") then \
print(tag) \
print("\\n") \
summary_available = 1 \
break \
end \
end \
end \
if (summary_available == 0) then \
print("Summary: "..f) \
print("\\n") \
end \
if posix.access(filename) then \
for line in io.lines(rpm.expand("%{1}").."/"..f) do \
if (string.match(line, 'Packages:')) then \
start = 1 \
elseif (string.sub(line, 1, 2) == '- ') then \
if (start == 1) then \
print("Requires: "..string.sub(line, 3)) \
print("\\n") \
end \
elseif (string.sub(line, 1, 1) == '#') then \
elseif (string.len(line) == 0) then \
else \
start = 0
end \
end \
else \
print("Requires: CANNOT_FIND_REQUIRED_FILES\\n") \
end \
print("%description "..pkg.."\\n") \
print("Auto Generated Block (zblock) of "..f.."\\n") \
print("%files "..pkg.."\\n") \
print("\\n\\n\\n") \
end \
end \
end}}
%prep
%setup
%build
# Auto require generation still requires further decision making. This shows the basic data for it in the build log.
ls -l %{_datadir}/image-configurations/*
# rule_checker returns non-zero if there is an error in *.inc, breaking the build
python ./rule_checker.py
%files
############## DOMAINS ##################
%{include_if_mainbuild %{SOURCE1200}}
#%{include_if_mainbuild %{SOURCE1210}}
#%{include_if_mainbuild %{SOURCE1220}}
############## EPIC FEATURES ######################
# Dev tools
%{include_if_mainbuild %{SOURCE2010}}
# Platform features
%{include_if_mainbuild %{SOURCE2020}}
############# PLATFORM PRESET #####################
# Tizen Platform Presets.
# Unlike Preset-Recipes of TIC, you cannot deselect packages from these presets.
%{include_if_mainbuild %{SOURCE3500}}
%{include_if_mainbuild %{SOURCE3800}}
|