diff --git a/linuxexternals/find_linux_externals.py b/linuxexternals/find_linux_externals.py index abdb03a..5ded1b1 100644 --- a/linuxexternals/find_linux_externals.py +++ b/linuxexternals/find_linux_externals.py @@ -129,7 +129,7 @@ def runversion(self, cmd): elif cmd.startswith("lib"): cmd = f"ls -l /lib/*-gnu/ /usr/lib*/ 2>/dev/null | grep -i '/{cmd}\\.' | perl -pe 's/.*{cmd}.[a-z]*\\.//i;'" else: - cmd = f"{cmd} --version" + cmd = f"{cmd} --version || {cmd} -v" #print(f"runcmd: cmd: {cmd}") #sys.stdout.flush() diff --git a/linuxexternals/make_rpm_spec.py b/linuxexternals/make_rpm_spec.py new file mode 100644 index 0000000..b3cfb90 --- /dev/null +++ b/linuxexternals/make_rpm_spec.py @@ -0,0 +1,95 @@ +#!/usr/bin/python3 + +import os +import os.path +import re +import sys + +PREFIX=os.path.dirname(os.path.dirname(__file__)) + +PREFACE=""" +Name: deluxe_build_bundle +Version: VERSION +Release: 1%{?dist} +Summary: Every xxx-devel package you might need +Group: Development/Languages +License: GPLv2+ +URL: https://github.org/marcmengel/spack-linuxexternals/ +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +""" + +SUFFIX=""" +%description +Bundle of xxx-devel rpms you might need as Spack externals +%prep + +%build + +%install + +%clean + +%files + +%changelog +* Mon Nov 22 2024 Marc Mengel +- First draft from fermi-spack-tools list +""" +def write_specfile(fname = "deluxe_build_bundle.spec", version="0.2"): + with open(fname, "w") as of: + of.write(PREFACE.replace("VERSION", version)) + for rpmname in get_rpmlist(): + of.write(f"Requires: {rpmname}\n") + of.write(SUFFIX) + +def get_yum_packages( yum_cmd ): + candidates = [] + + with os.popen(yum_cmd,"r") as yf: + in_packages = False + for line in yf.readlines(): + if line.find('Installed Packages') >= 0 or line.find('Available Packages') >= 0: + in_packages = True + continue + if in_packages: + pkg, rest = line.split('.',1) + candidates.append(pkg) + # print(f"get_yum_packages: yum_cmd: '{yum_cmd}' candidates: {repr(candidates)}") + return candidates + +def yum_expand(pat, devbits): + yum_wc = pat + #print(f"before: {yum_wc}") + yum_wc = re.sub("\([^(]*\)\?", "*", yum_wc) + yum_wc = re.sub("\[[^[]*\]\*", "*", yum_wc) + yum_wc = re.sub("\.\*", "*", yum_wc) + yum_wc = re.sub(".\?", "*", yum_wc) + yum_wc = re.sub("[()]", "", yum_wc) + #print(f"after: {yum_wc}") + yum_wc_devel = devbits.replace('$0',yum_wc) + candidates = get_yum_packages(f"yum list '{yum_wc}' '{yum_wc_devel}'") + res = [] + devpat = devbits.replace('$0',pat) + for cand in candidates: + if re.match(pat+'$', cand) or re.match(devpat + '$', cand): + res.append(cand) + return res + +def get_rpmlist(): + packagelistf = f"{PREFIX}/linuxexternals/packagelist" + rpmset = set() + with open(packagelistf,"r") as pl: + for line in pl.readlines(): + if line.strip()[0] == "#": + continue + pat, spackname, devbits = line.strip().split(":") + plist = yum_expand(pat, devbits) + for p in plist: + rpmset.add(p) + rpmlist = list(rpmset) + rpmlist.sort() + return rpmlist + + +if __name__ == '__main__': + write_specfile() diff --git a/linuxexternals/packagelist b/linuxexternals/packagelist index f859220..3564b2c 100644 --- a/linuxexternals/packagelist +++ b/linuxexternals/packagelist @@ -18,12 +18,13 @@ asciidoc:asciidoc:$0 autoconf:autoconf:$0 autogen:autogen:$0 automake:automake:$0 -(xorg-x11-font-utils|bdftopcf):bdftopcf:$0 +xorg-x11-font-utils:bdftopcf:$0 +bdftopcf:bdftopcf:$0 libdb:berkeley-db:$0-devel binutils:binutils:$0 bison:bison:$0 cigetcert:cigetcert:$0 -cmake|cmake[0-9]:cmake:$0 +cmake[0-9]*:cmake:$0 coreutils:coreutils:$0 libcurl:curl:$0-devel (xorg-)?x11-?proto-dev(el)?:damageproto:$0 @@ -35,6 +36,7 @@ xorg-x11-(font-)?utils:font-util:$0 fontconfig:fontconfig:$0-devel freetype[0-9]*:freetype:$0-devel gawk:gawk:$0 +gcc(-c\+\+|-gfortran)?:gcc:$0 gdb:gdb:$0 gdbm:gdbm:$0-devel gettext:gettext:$0-devel @@ -57,7 +59,7 @@ lib[Ss][Mm][0-9]*:libsm:$0-devel libtirpc:libtirpc:$0-devel libtool:libtool:$0-ltdl-devel (lib)?uuid:libuuid:$0-devel -lib[Xx]11(-[0-9]*):libx11:$0-devel +lib[Xx]11(-[0-9]*)?:libx11:$0-devel lib[Xx]au:libxau:$0-devel libxcb:libxcb:$0-devel lib[Xx]dmcp:libxdmcp:$0-devel @@ -79,20 +81,22 @@ m4:m4:$0 mesa-libGLU:mesa-glu:$0-devel mesa-libGL:mesa:$0-devel meson:meson:$0 -(xorg-x11-font-utils|mkfontscale):mkfontdir:$0 -(xorg-x11-font-utils|mkfontscale):mkfontscale:$0 -(lib)?motif(-dev):motif:$0 -mpich-[0-9.]+|mpich:mpich:$0-devel +xorg-x11-font-utils:mkfontdir:$0 +mkfontscale:mkfontdir:$0 +xorg-x11-font-utils:mkfontscale:$0 +mkfontscale:mkfontscale:$0 +(lib)?motif:motif:$0-devel +mpich(-[0-9.]+)?|mpich:mpich:$0-devel nasm:nasm:$0 ninja-build:ninja:$0 ncurses:ncurses:$0-devel openssh-clients:openssh:$0 -(openssl[0-9a-z]*)-libs:openssl:$0-devel +openssl[0-9a-z]*(-libs)?:openssl:$0-devel patchelf:patchelf:$0 perl:perl:$0-devel (pkgconfig|pkgconf-pkg-config):pkg-config:$0 pkgconf:pkgconf:$0 -python[0-9]|python[0-9]*-python|python:python:$0-devel +python[0-9]*(-python)?:python:$0-devel readline(-common)?:readline:$0-devel tar:tar:$0 tcl:tcl:$0-devel @@ -110,4 +114,4 @@ xorg-x11-util-macros:util-macros:$0 (xorg-)?x11-?proto-dev(el)?:xproto:$0 lib[Xx]randr[0-9]*:xrandr:$0-devel xorg-x11-xtrans-devel:xtrans:$0 -zlib[0-9]*[a-z]?:zlib:$0-devel +zlib[0-9]*([a-z])?:zlib:$0-devel