Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion linuxexternals/find_linux_externals.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
95 changes: 95 additions & 0 deletions linuxexternals/make_rpm_spec.py
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>
- 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()
24 changes: 14 additions & 10 deletions linuxexternals/packagelist
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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