summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2022-10-06 14:23:55 +1100
committerChris Johns <chrisj@rtems.org>2022-10-06 14:23:55 +1100
commit08061a9fda02ea091dcd9866e9d40ea794ae65b4 (patch)
tree68dfd32dc8e01b5ba483ae0b9b40cbb67e4588e4
parent78cfb1b35a7c4fff737c10e70f6b5fa208237e1f (diff)
pkg/linux: Add user config support to RPM spec file
-rw-r--r--pkg/configs.py43
-rw-r--r--pkg/linux.py47
-rw-r--r--pkg/rpm.spec.in36
3 files changed, 104 insertions, 22 deletions
diff --git a/pkg/configs.py b/pkg/configs.py
index ffb90ed..5b499db 100644
--- a/pkg/configs.py
+++ b/pkg/configs.py
@@ -63,6 +63,26 @@ def configure(conf):
conf.msg('Buildset filter', bf, color='GREEN')
+def get_config_parser():
+ try:
+ import configparser
+ config = configparser.ConfigParser(strict=False, interpolation=None)
+ except:
+ # python2
+ import ConfigParser as configparser
+ config = configparser.ConfigParser(raw=True)
+ return config
+
+
+def get_config_error():
+ try:
+ import configparser
+ except:
+ # python2
+ import ConfigParser as configparser
+ return configparser.Error
+
+
def config_path(config):
return os.path.join(path, config + '.bset')
@@ -80,16 +100,6 @@ def add_wscript_fun(ctx, fun_name, fun_func):
def configs_ini_load(bld, inis, configs):
- def get_parser():
- try:
- import configparser
- config = configparser.ConfigParser(strict=False)
- except:
- # python2
- import ConfigParser as configparser
- config = configparser.ConfigParser()
- return config
-
def parse_types(bld, value):
vs = value.lower().strip().split(' ')
if len(vs) == 1:
@@ -126,8 +136,11 @@ def configs_ini_load(bld, inis, configs):
return None
for ini in inis:
- config = get_parser()
- config.read(ini)
+ config = get_config_parser()
+ try:
+ config.read(ini)
+ except pkg.configs.get_config_error() as ce:
+ bld.fatal('configs ini parse error: ' + str(ce))
ini_dir = os.path.dirname(os.path.abspath(ini))
for d in config.defaults():
i = (d, config.defaults()[d])
@@ -141,7 +154,11 @@ def configs_ini_load(bld, inis, configs):
for section in config.sections():
for c in configs:
if section == os.path.basename(c['buildset']):
- for i in config.items(section):
+ try:
+ items = config.items(section)
+ except pkg.configs.get_config_error() as ce:
+ bld.fatal('configs ini parse error: ' + str(ce))
+ for i in items:
val = parse_types(bld, i[1])
if val is None:
bld.fatal('invalid configs item in ' + ini + ': ' +
diff --git a/pkg/linux.py b/pkg/linux.py
index 4246286..7be7cb7 100644
--- a/pkg/linux.py
+++ b/pkg/linux.py
@@ -52,15 +52,54 @@ def _esc_label(s):
return s.replace('-', '_')
+def rpm_get_config(ctx):
+ if ctx.env.RPM_CONFIG:
+ config = pkg.configs.get_config_parser()
+ try:
+ config.read(ctx.env.RPM_CONFIG)
+ except pkg.configs.get_config_error() as ce:
+ conf.fatal('rpm config parse error: ' + str(ce))
+ else:
+ config = None
+ return config
+
+
+def rpm_config_parser(bld, build):
+ config = rpm_get_config(bld)
+ no_config = '# No user configuration, see ./waf --help and --rpm-config'
+ if config is None:
+ return no_config
+ if not config.has_section(build['buildset']):
+ return no_config
+ try:
+ items = config.items(build['buildset'])
+ except pkg.configs.get_config_error() as ce:
+ bld.fatal('rpm config parse error: ' + str(ce))
+ user_config = []
+ for ci in items:
+ user_config += ['%%define %s %s' % (ci[0], ci[1])]
+ return os.linesep.join(user_config)
+
+
def rpm_configure(conf):
try:
conf.find_program('rpmbuild', var='RPMBUILD', manditory=False)
conf.env.PACKAGER = True
except:
pass
+ if conf.options.rpm_config is not None:
+ if not conf.env.PACKAGER:
+ conf.fatal('RPM config option is invalid without rpmbuild')
+ if not os.path.isfile(conf.options.rpm_config):
+ conf.fatal('RPM config does not exist or not a file: ' +
+ conf.options.rpm_config)
+ conf.msg('RPM config', conf.options.rpm_config)
+ conf.env.RPM_CONFIG = conf.options.rpm_config
+ rpm_get_config(conf)
def rpm_build(bld, build):
+ user_rpm_config = rpm_config_parser(bld, build)
bset = pkg.configs.buildset(bld, build, dry_run=False)
rpm_name = 'rpmspec/' + bset['name']
spec_file = _esc_name(build['buildset'])
@@ -84,7 +123,8 @@ def rpm_build(bld, build):
TARFILE=bset['tar'],
RSB_SET_BUILDER=bset['cmd'],
RSB_SET_BUILDER_ARGS=' '.join(bset['pkg-opts']),
- RSB_WORK_PATH=bld.path)
+ RSB_WORK_PATH=bld.path,
+ USER_RPM_CONFIG=user_rpm_config)
def rpmspec(bld):
@@ -97,7 +137,10 @@ def init(ctx):
def options(opt):
- pass
+ opt.add_option('--rpm-config',
+ default=None,
+ dest='rpm_config',
+ help='RPM configuration INI file')
def configure(conf):
diff --git a/pkg/rpm.spec.in b/pkg/rpm.spec.in
index 46dbba4..78873d0 100644
--- a/pkg/rpm.spec.in
+++ b/pkg/rpm.spec.in
@@ -46,26 +46,48 @@
%define rsb_set_builder_args @RSB_SET_BUILDER_ARGS@
%define rsb_work_path @RSB_WORK_PATH@
-
# Use a buildroot under this repo build path
%define _topdir %{rsb_buildroot}
+# User supplied RPM configuration
+@USER_RPM_CONFIG@
+
+
# Package
-%define name rtems-%{rsb_pkg_name}
%define arch noarch
+%if %{undefined rpm_name}
+ %define rpm_name rtems-%{rsb_pkg_name}
+%endif
+
+%if %{undefined rpm_version}
+ %define rpm_version %{rsb_version}
+%endif
+
+%if %{undefined rpm_revision}
+ %define rpm_revision %{rsb_revision}%{?dist}
+%endif
+
+%if %{undefined rpm_summary}
+ %define rpm_summary RTEMS tools and board support package
+%endif
+
+%if %{undefined rpm_description}
+ %define rpm_description This RPM is development tools and libraries for RTEMS
+%endif
+
# Package details
-Name: %{name}
-Version: %{rsb_version}
-Release: %{rsb_revision}%{?dist}
-Summary: RTEMS tools and board support package
+Name: %{rpm_name}
+Version: %{rpm_version}
+Release: %{rpm_revision}
+Summary: %{rpm_summary}
License: GPLv2, GPLv3, BSD-2
%description
-This RPM is development tools and BSP for RTEMS
+%{rpm_description}
%prep