7. 7
Differ
The differ between FOO.spec and FOO-BAR.spec may small, however
packager have to maintain both of them and modify all build description
files every time.
2c2
< # spec file for package FOO
---
> # spec file for package FOO-BAR
19c19
< %define build_core_not_plugins 1
---
> %define build_core_not_plugins 0
35c35
< Name: FOO
---
> Name: FOO-BAR
9. 9
Multibuild
Combined build description files
Use the _multibuild directive to build the same source in the same
repository with different flavors
No local links anymore
A matching file for the source package container name is required
FOO
_multibuild
FOO.spec
10. 10
Multibuild
Combined build description files
Use the _multibuild directive to build the same source in the same
repository with different flavors
No local links anymore
A matching file for the source package container name is required
FOO
_multibuild
FOO.spec
FOO-BAR.spec excluded
11. 11
The _multibuild file
A xml format file defined the build flavor
<multibuild>
<package>plugins</package>
<package>doc</package>
<package>testsuite</package>
</multibuild>
$ osc r
standard x86_64 FOO succeeded
standard x86_64 FOO:plugins succeeded
standard x86_64 FOO:doc succeeded
standard x86_64 FOO:testsuite succeeded
13. 13
A real case: libproxy
Package Sources
libproxy 0.4.15.tar.gz
baselibs.conf
libproxy-plugins.changes
libproxy-plugins.spec
libproxy.changes
libproxy.spec
pre_checkin.sh
libproxy-plugins _link (local linked to libproxy)
The only differ: libproxy has %define build_core_not_plugins 1
14. 14
A real case: libproxy
Package Result
libproxy libproxy-0.4.15-6.1.src.rpm
libproxy-devel-0.4.15-6.1.x86_64.rpm
libproxy-tools-0.4.15-6.1.x86_64.rpm
libproxy1-0.4.15-6.1.x86_64.rpm
libproxy-plugins
(local linked to libproxy)
libproxy-plugins-0.4.15-6.1.src.rpm
libproxy-sharp-0.4.15-6.1.x86_64.rpm
libproxy1-config-gnome3-0.4.15-6.1.x86_64.rpm
libproxy1-config-kde-0.4.15-6.1.x86_64.rpm
libproxy1-networkmanager-0.4.15-6.1.x86_64.rpm
libproxy1-pacrunner-webkit-0.4.15-6.1.x86_64.rpm
perl-Net-Libproxy-0.4.15-6.1.x86_64.rpm
python-libproxy-0.4.15-6.1.noarch.rpm
python3-libproxy-0.4.15-6.1.noarch.rpm
15. 15
A real case: libproxy
Add _multibuild file
<multibuild>
<package>plugins</package>
</multibuild>
$ osc ls home:mlin7442:demo_multi_specs
libproxy
libproxy-plugins
$ osc r home:mlin7442:demo_multi_specs
openSUSE_Tumbleweed i586 libproxy
succeeded
openSUSE_Tumbleweed i586 libproxy-plugins
excluded
openSUSE_Tumbleweed x86_64 libproxy
succeeded
openSUSE_Tumbleweed x86_64 libproxy-plugins
excluded
16. 16
A real case: libproxy
Package overview
$osc rdelete home:mlin7442:demo_multi_build libproxy-plugins
$ osc ls home:mlin7442:demo_multi_build
libproxy
$ osc r home:mlin7442:demo_multi_build
openSUSE_Tumbleweed i586 libproxy succeeded
openSUSE_Tumbleweed i586 libproxy:plugins succeeded
openSUSE_Tumbleweed x86_64 libproxy succeeded
openSUSE_Tumbleweed x86_64 libproxy:plugins succeeded
$ osc ls home:mlin7442:demo_multi_build libproxy:plugins
Server returned an error: HTTP Error 404: Not Found
home:mlin7442:demo_multi_build/libproxy:plugins
17. 17
A real case: libproxy
libproxy and libproxy:plugins have the duplicated result
Package Result
libproxy libproxy-0.4.15-6.1.src.rpm
libproxy-devel-0.4.15-6.1.x86_64.rpm
libproxy-tools-0.4.15-6.1.x86_64.rpm
libproxy1-0.4.15-6.1.x86_64.rpmlibproxy:plugins
18. 18
A real case: libproxy
Adjust the build description file
– Combine two build description files
– Get the build flavor from @BUILD_FLAVOR@
%define flavor @BUILD_FLAVOR@%{nil}
– Use %flavor macro to control the change for main package specific or sub-
package specific
%if "%flavor" == "plugins"
XXX
%endif
20. 20
A real case: libproxy (build result)
Package Result
libproxy libproxy-0.4.15-6.1.src.rpm
libproxy-devel-0.4.15-6.1.x86_64.rpm
libproxy-tools-0.4.15-6.1.x86_64.rpm
libproxy1-0.4.15-6.1.x86_64.rpm
libproxy:plugins libproxy-plugins-0.4.15-6.1.src.rpm
libproxy-sharp-0.4.15-6.1.x86_64.rpm
libproxy1-config-gnome3-0.4.15-6.1.x86_64.rpm
libproxy1-config-kde-0.4.15-6.1.x86_64.rpm
libproxy1-networkmanager-0.4.15-6.1.x86_64.rpm
libproxy1-pacrunner-webkit-0.4.15-6.1.x86_64.rpm
perl-Net-Libproxy-0.4.15-6.1.x86_64.rpm
python-libproxy-0.4.15-6.1.noarch.rpm
python3-libproxy-0.4.15-6.1.noarch.rpm
21. 21
Tips
<bcntsynctag> tag still working
Can not have multiple _multibuild file
No effect to controlling builds on specific archs
<multibuild>
<package>plugins</package>
<package>testsuite</package>
</multibuild>
%if "%flavor" == "testsuite"
ExclusiveArch: %ix86
%define build_core_not_modules 0
%define build_main 0
%endif