Preset: auto-generate preset/zblocks from yaml files 86/124486/1 submit/tizen/20170411.104924
authorMyungJoo Ham <myungjoo.ham@samsung.com>
Tue, 11 Apr 2017 08:03:44 +0000 (17:03 +0900)
committerMyungJoo Ham <myungjoo.ham@samsung.com>
Tue, 11 Apr 2017 10:42:17 +0000 (19:42 +0900)
From Idea of YD Seo.

Change-Id: I83e208d661bd5cb0fff96b3d4fbab3533c81dbc9
Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
packaging/building-blocks.spec
packaging/platform-preset-common.inc
packaging/platform-preset-ivi.inc
packaging/platform-preset-mobile.inc
packaging/platform-preset-tv.inc
packaging/platform-preset-wearable.inc
rule_checker.py

index f799940f1929027b1fc8886431b2e51ed6af87ea..991c1aea3d0886f87b2220350070ae1042c3cc9c 100644 (file)
@@ -41,6 +41,13 @@ Source3900:  platform-preset-smart.inc
 # To get .ks files
 BuildRequires: image-configurations
 
+# To get blocked .yaml files, idea from YD Seo.
+BuildRequires: meta-common
+BuildRequires: meta-mobile
+BuildRequires: meta-wearable
+BuildRequires: meta-tv
+BuildRequires: meta-ivi
+
 # To check the rules
 BuildRequires: python
 
@@ -116,9 +123,6 @@ presets describing specific products.
 # This script writes build-spec when building the build-spec itself. :)
 # Importing .kg file with list_with_require() based on image-configuration will work
 # after Tizen:Unified starts to generate its own platform images.
-
-# TODO1: How to interpret "- pkg"? just skip? or make it conflicted?
-# TODO2: How to handle "no file error"?
 %define list_with_require() %{expand:%{lua:if posix.access(rpm.expand("%{SOURCE1001}"), "f") then \
        local start = 0 \
        if posix.access(rpm.expand("%{1}")) then \
@@ -143,6 +147,76 @@ presets describing specific products.
        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("%{SOURCE1001}"), "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 \
+                       print("Suggests: "..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("%{SOURCE1001}"), "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_"..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
 
index e1f7e6a9cd40e2a7c8d010f7deaa9b03534f0a11..7d9a9b5a27e4753ec8d7b9d65d963e8ce0d39f09 100644 (file)
@@ -10,6 +10,11 @@ Conflicts:   %{name}-sub1-Preset_sd-wearable
 Conflicts:     %{name}-sub1-Preset_sd-home_appliance
 Conflicts:     %{name}-root-Preset-iot
 Conflicts:     %{name}-sub1-Preset_sd-ivi
+
+%list_suggest /usr/share/package-groups/common/ common sub2-Preset_sd-common-
+
 %description sub1-Preset_sd-common
 Tizen Platform Presets for "Common Profile"
 %files sub1-Preset_sd-common
+
+%list_require %{_datadir}/package-groups/common/ common sub2-Preset_sd-common-
index c5ac5d15e02aa2f25ecd9dc9b22eb78a72e9d975..8b070e825805bafcb2e1a3356a5c18dbc382eda2 100644 (file)
@@ -9,10 +9,12 @@ Conflicts:    %{name}-sub1-Preset_sd-wearable
 Conflicts:     %{name}-sub1-Preset_sd-home_appliance
 Conflicts:     %{name}-root-Preset-iot
 Suggests:      %{name}-sub2-Preset_sd-ivi-proto
+%list_suggest /usr/share/package-groups/ivi/ ivi sub2-Preset_sd-ivi-
 %description sub1-Preset_sd-ivi
 Tizen IVI Platform Presets
 %files sub1-Preset_sd-ivi
 
+
 %package sub2-Preset_sd-ivi-proto
 Summary:       IVI OdroidXU3 Prototype
 # image-configuration must have this file supplied.
@@ -21,3 +23,6 @@ Summary:      IVI OdroidXU3 Prototype
 Tizen IVI Prototype Preset from OdroidXU3 as an example
 %files sub2-Preset_sd-ivi-proto
 
+
+%list_require /usr/share/package-groups/ivi/ ivi sub2-Preset_sd-ivi-
+
index 23eab092b4d075c5dbe6c803039d84657c16832b..1a83d2a204c6960cfae21188d20604c2c82a4f00 100644 (file)
@@ -11,6 +11,7 @@ Suggests:     %{name}-sub2-Preset_sd-mobile-tm1
 Suggests:      %{name}-sub2-Preset_sd-mobile-tm2_aarch64
 Suggests:      %{name}-sub2-Preset_sd-mobile-tm2_armv7l
 Suggests:      %{name}-sub2-Preset_sd-mobile-minimal
+%list_suggest /usr/share/package-groups/mobile/ mobile sub2-Preset_sd-mobile-
 %description sub1-Preset_sd-mobile
 Tizen Mobile Platform Presets
 %files sub1-Preset_sd-mobile
@@ -68,3 +69,6 @@ Tizen Mobile Minimal Platform Preset
 Mobile-PM: fill in minimal API sets for mobile profile.
 
 %files sub2-Preset_sd-mobile-minimal
+
+
+%list_require /usr/share/package-groups/mobile/ mobile sub2-Preset_sd-mobile-
index c580193ea3d3cb990a3c4d59180c1cfb505f3b3b..55796d901f1e32e4324f02edf36bbf4387593c4e 100644 (file)
@@ -9,6 +9,7 @@ Conflicts:      %{name}-sub1-Preset_sd-ivi
 Conflicts:     %{name}-sub1-Preset_sd-home_appliance
 Conflicts:     %{name}-root-Preset-iot
 Suggests:      %{name}-sub2-Preset_sd-tv-odroid
+%list_suggest /usr/share/package-groups/tv/ tv sub2-Preset_sd-tv-
 %description sub1-Preset_sd-tv
 Tizen TV Platform Presets
 %files sub1-Preset_sd-tv
@@ -22,3 +23,5 @@ Summary:      TV-Odroid
 Tizen TV Odroid Preset
 %files sub2-Preset_sd-tv-odroid
 
+
+%list_require /usr/share/package-groups/tv/ tv sub2-Preset_sd-tv-
index 1a580e39d5e1fa4a3e6b16196ed193f409ac5b06..7e9aab89254395c830ccdb82166a6f5039ec02a5 100644 (file)
@@ -9,6 +9,7 @@ Conflicts:      %{name}-sub1-Preset_sd-ivi
 Conflicts:     %{name}-sub1-Preset_sd-home_appliance
 Conflicts:     %{name}-root-Preset-iot
 Suggests:      %{name}-sub2-Preset_sd-wearable-tw2
+%list_suggest /usr/share/package-groups/wearable/ wearable sub2-Preset_sd-wearable-
 %description sub1-Preset_sd-wearable
 Tizen Wearable Platform Presets
 %files sub1-Preset_sd-wearable
@@ -22,3 +23,4 @@ Summary:      Wearable-TW2
 Tizen Wearable TW1 (Gear 2) Preset
 %files sub2-Preset_sd-wearable-tw2
 
+%list_require /usr/share/package-groups/wearable/ wearable sub2-Preset_sd-wearable-
index 2578d5f5266129fb097cdbf7db9bf84c5c91a068..c29e1162418ae159a381f81665660a3f44f77972 100755 (executable)
@@ -115,7 +115,7 @@ def ruleCheckInc(file):
                files = 0
            else:
                if re.search(r'^\s*[^#\s]+', line) and \
-                  not re.search(r'^\s*(%include)|(%endif)|(%ifarch)', line):
+                  not re.search(r'^\s*(%include)|(%endif)|(%ifarch)|(%list_require)', line):
                    error += 1
                    print("ERROR: RULE 5.3 a block must not have a file included (%files section must be empty)")
                    report(file, lc, line)