diff --git a/mpcdf_common.py b/mpcdf_common.py index c9f6f8a63ba5c6ba8235e841271137dcbfde7975..a45091e94f33c45e15553b1e504694a2f9e89a3f 100644 --- a/mpcdf_common.py +++ b/mpcdf_common.py @@ -48,22 +48,45 @@ compiler_parallel_studio = {value["compiler"]: dict({"ps": key}, **value) for ke prjconf_start_marker = "# Autogenerated by osc mpcdf_setup_repos, do not edit till end of section\n" prjconf_end_marker = "# End of autogenerated section\n" -centos_prjconf_tags = textwrap.dedent( - """ - Prefer: perl-Error - Substitute: c_compiler gcc - Substitute: c++_compiler gcc-c++ - Substitute: ca-certificates-mozilla ca-certificates - """).strip() -centos_macros = textwrap.dedent( - """ - # Disable all problematic automatic RPM stuff - # like byte-compiling (with the wrong Python version) - # or debug packages that fail for many binary-only packages - %__no_python_bytecompile 1 - %debug_package %{nil} - """).strip() +def dist_prjconf_tags(distribution): + centos_prjconf_tags = textwrap.dedent( + """ + Prefer: perl-Error + Substitute: c_compiler gcc + Substitute: c++_compiler gcc-c++ + Substitute: ca-certificates-mozilla ca-certificates + """).strip() + + centos8_prjconf_tags = textwrap.dedent( + """ + ExpandFlags: module:python36-3.6 + """).strip() + + res = "" + if "CentOS" in distribution: + res += centos_prjconf_tags + if "CentOS_8" in distribution: + res += "\n" + centos8_prjconf_tags + + return res + + +def dist_prjconf_macros(distribution): + centos_macros = textwrap.dedent( + """ + # Disable all problematic automatic RPM stuff + # like byte-compiling (with the wrong Python version) + # or debug packages that fail for many binary-only packages + %__no_python_bytecompile 1 + %debug_package %{nil} + """).strip() + + res = "" + if "CentOS" in distribution: + res += centos_macros + + return res def check_for_update(): @@ -575,11 +598,10 @@ def mpcdf_setup_subproject(api_url, project, distribution, microarchitecture, prjconf_ours.append("Preinstall: mpcdf_{0}_directory".format(microarchitecture)) prjconf_ours.append("PublishFilter: ^mpcdf_.*$") - if "CentOS" in distribution: - prjconf_ours.append(centos_prjconf_tags) - extra_macros = centos_macros - else: - extra_macros = "" + extra_tags = dist_prjconf_tags(distribution) + if extra_tags: + prjconf_ours.append(extra_tags) + extra_macros = dist_prjconf_macros(distribution) prjconf_ours.append(""" Macros: diff --git a/mpcdf_setup_software_project.py b/mpcdf_setup_software_project.py index a87dc0c3c81d55bb61cb5ab0dbac420933277961..8238aa8a1db2459f44b2a5e04d478f96c97519ef 100644 --- a/mpcdf_setup_software_project.py +++ b/mpcdf_setup_software_project.py @@ -59,17 +59,21 @@ def do_mpcdf_setup_software_project(self, subcmd, opts, *args): prjconf.append("Preinstall: brp_mpcdf_modules") software_meta = mpcdf_common.project_meta(api_url, "software") - distributions = (repo.get("name") for repo in software_meta.findall('./repository')) - centos_distributions = list(distro for distro in distributions if "CentOS" in distro) - if centos_distributions: - prjconf.append("") - prjconf.append("%if {0}".format(" || ".join('"%_repository" == "{0}"'.format(c) for c in centos_distributions))) - prjconf.append(mpcdf_common.centos_prjconf_tags) - prjconf.append("") - prjconf.append("Macros:") - prjconf.append(mpcdf_common.centos_macros) - prjconf.append(":Macros") - prjconf.append("%endif") + + distributions = sorted(repo.get("name") for repo in software_meta.findall('./repository')) + for distribution in distributions: + extra_tags = mpcdf_common.dist_prjconf_tags(distribution) + extra_macros = mpcdf_common.dist_prjconf_macros(distribution) + + if len(extra_tags) > 0 or len(extra_macros) > 0: + prjconf.append("") + prjconf.append("%if \"%_repository\" == \"{0}\"".format(distribution)) + prjconf.append(extra_tags) + prjconf.append("") + prjconf.append("Macros:") + prjconf.append(extra_macros) + prjconf.append(":Macros") + prjconf.append("%endif") prjconf.append(end_marker) prjconf = prjconf_head + "\n".join(prjconf) + prjconf_tail