#!/usr/bin/env python3 """Try to change from GCC10 to GCC11 For it, you need - Python3 """ import argparse releases = { 'ATK': ['2.36.0', '2.36.0'], 'AT-SPI2-ATK': ['2.34.2', '2.38.0'], 'AT-SPI2-core': ['2.36.0', '2.40.3'], 'Autotools': ['20200321', '20210726'], 'binutils': ['2.36.1', '2.37'], 'Bison': ['3.7.6', '3.7.6'], 'Boost': ['1.74.0', '1.78.0'], 'Boost.Python': ['1.74.0', '1.78.0'], 'cairo': ['1.17.2', '1.16.0'], 'CMake': ['3.18.0', '3.21.1'], 'Coreutils': ['8.32', '9.0'], 'CUDA': ['11.3', '11.5'], 'cuDNN': ['8.2.1.32', '8.2.2.26'], 'cURL': ['7.71.1', '7.78.0'], 'dask': ['2.22.0', '2021.9.1'], 'DBus': ['1.12.20', '1.13.18'], 'Eigen': ['3.3.7', '3.3.9'], 'FFmpeg': ['4.3.1', '4.4.1'], 'FFTW': ['3.3.8', '3.3.10'], 'Flask': ['1.1.4', '2.0.2'], 'flex': ['2.6.4', '2.6.4'], 'FLTK': ['1.3.5', '1.3.7'], 'fontconfig': ['2.13.92', '2.13.94'], 'freetype': ['2.10.1', '2.11.0'], 'FriBidi': ['1.0.9', '1.0.10'], 'gc': ['8.0.2', '8.2.0'], 'GCC': ['10.3.0', '11.2.0'], 'gcccoremkl': ['10.3.0-2021.2.0', '11.2.0-2021.4.0'], 'Gdk-Pixbuf': ['2.40.0', '2.42.6'], 'GEOS': ['3.8.1', '3.9.1'], 'Ghostscript': ['9.52', '9.54.0'], 'GLib': ['2.64.4', '2.69.1'], 'GMP': ['6.2.0', '6.2.1'], 'Go': ['1.15.3', '1.17.3'], 'GObject-Introspection': ['1.64.1', '1.68.0'], 'gomkl': ['2021', '2021b'], 'gpsmkl': ['2021', '2021b'], 'gpsmpi': ['2021', '2021b'], 'GSL': ['2.6', '2.7'], 'GTK+': ['3.24.17', '3.24.23'], 'GTS': ['0.7.6', '0.7.6'], 'HarfBuzz': ['2.6.7', '2.8.2'], 'HTSLib': ['1.1.4', '1.1.4'], 'ICU': ['67.1', '70.1'], 'ImageMagick': ['7.0.10-25', '7.1.0.13'], 'imkl': ['2021.2.0', '2021.4.0'], 'intltool': ['0.51.0', '0.51.0'], 'ispc': ['1.12.0', '1.16.1'], 'JasPer': ['2.0.19', '2.0.33'], 'Java': ['15', '15'], 'libcroco': ['0.6.13', '0.6.13'], 'libdrm': ['2.4.106', '2.4.107'], 'libepoxy': ['1.5.4', '1.5.9'], 'libffi': ['3.3', '3.4.2'], 'libgd': ['2.3.0', '2.3.1'], 'libjpeg-turbo': ['2.0.5', '2.1.1'], 'libreadline': ['8.0', '8.1'], 'librsvg': ['2.48.8', '2.51.2'], 'LibTIFF': ['4.1.0', '4.3.0'], 'libxc': ['5.1.5', '5.1.6'], 'libxml2': ['2.9.10', '2.9.10'], 'LLVM': ['10.0.1', '13.0.0'], 'M4': ['1.4.18', '1.4.19'], 'Mako': ['1.1.3', '1.1.4'], 'matplotlib': ['3.4.2', '3.4.3'], 'Meson': ['0.55.0', '0.58.2'], 'MPFR': ['4.1.0', '4.1.0'], 'NASM': ['2.15.03', '2.15.05'], 'Ninja': ['1.10.0', '1.10.2'], 'NSS': ['3.51', '3.69'], 'numactl': ['2.0.13', '2.0.14'], 'OpenEXR': ['2.5.2', '3.1.1'], 'OpenGL': ['2020', '2021b'], 'Pango': ['1.44.7', '1.48.8'], 'parallel': ['20201122', '20210722'], 'PCRE2': ['10.34', '10.37'], 'PCRE': ['8.44', '8.45'], 'Perl': ['5.32.0', '5.34.0'], 'pkg-config': ['0.29.2', '0.29.2'], 'pkgconfig': ['1.5.4', '1.5.5'], 'PROJ': ['7.1.0', '8.1.0'], 'protobuf': ['3.14.0', '3.17.3'], 'psmpi': ['5.4.9-1', '5.5.0-1'], 'pybind11': ['2.5.0', '2.7.1'], 'pyproj': ['2.6.1.post1', '3.3.0'], 'Python': ['3.8.5', '3.9.6'], 'Qt5': ['5.14.2', '5.15.2'], 'RDFlib': ['5.0.0', '6.0.2'], 're2c': ['1.3', '2.2'], 'Rust': ['1.47.0', '1.54.0'], 'Scikit': ['2021', '2022'], 'SciPy': ['2021', '2021b'], 'Shapely': ['1.7.1', '1.8.0'], 'SuiteSparse': ['5.7.1', '5.10.1'], 'snappy': ['1.1.8', '1.1.9'], 'SQLite': ['3.32.3', '3.36'], 'Tcl': ['8.6.10', '8.6.11'], 'texinfo': ['6.7', '6.8'], 'texlive': ['20200406', '20200406'], 'tqdm': ['4.62.3', '4.62.3'], 'X11': ['20200222', '20210802'], 'x264': ['20200912', '20210613'], 'XServer': ['1.20.9', '1.20.13'], 'zlib': ['1.2.11', '1.2.11'], 'zstd': ['1.4.9', '1.5.0'], } def parse_arguments(): """Receives command line input""" parser = argparse.ArgumentParser(description='Command line options.') parser.add_argument('-i', metavar='INPUT', default="", type=str, help='Input File') parser.add_argument('-o', metavar='OLDRELEASE', default="", type=str, help='Current version of given software to be replaced') parser.add_argument('-n', metavar='LATESTRELEASE', default="", type=str, help='Most recent version of given software') return parser.parse_args() def updateFileName(fileName, current, latest): """Tries to bring filename automatically to the latest toolchain""" if current and latest: fileName = fileName.replace(current, latest, 1) if fileName: fileName = fileName.replace(releases['GCC'][0], releases['GCC'][1], 1) if 'gcccoremkl' in fileName: fileName = fileName.replace( releases['imkl'][0], releases['imkl'][1], 1) elif 'gomkl' in fileName: fileName = fileName.replace( releases['gomkl'][0], releases['gomkl'][1], 1) elif 'gpsmpi' in fileName: fileName = fileName.replace( releases['gpsmpi'][0], releases['gpsmpi'][1], 1) elif 'gpsmkl' in fileName: fileName = fileName.replace( releases['gpsmkl'][0], releases['gpsmkl'][1], 1) fileName = fileName.replace( '-Python-3.8.5', '', 1) return fileName def updateFile(oldName, newName, current, latest): versionSuffixIsPython = False """Replaces toolchain, cleans up site_contacts and goes through the list of releases with the new one""" if newName is not oldName: newFile = open(newName, 'w') with open(oldName) as file: for line in file: if current and latest: if line.startswith('version'): print("Changing package version...") line = line.replace(current, latest, 1) if line.startswith('toolchain'): print("Fixing toolchain...") line = line.replace( releases['GCC'][0], releases['GCC'][1], 1) line = line.replace( releases['imkl'][0], releases['imkl'][1], 1) line = line.replace( releases['gomkl'][0], releases['gomkl'][1], 1) line = line.replace( releases['gpsmpi'][0], releases['gpsmpi'][1], 1) line = line.replace( releases['gcccoremkl'][0], releases['gcccoremkl'][1], 1) if line.startswith('site_contacts'): print("Removing site_contacts") line = "" for key in releases: if key in line: print("Changing", key, "from", releases[key][0], "to", releases[key][1]) line = line.replace( releases[key][0], releases[key][1], 1) if line.startswith("versionsuffix = '-Python"): print("Removing python version suffix") versionSuffixIsPython = True line = '' if versionSuffixIsPython: line = line.replace(', versionsuffix', '', 1) newFile.write(line) newFile.close() return True else: print("Files are the same") return False if __name__ == "__main__": args = parse_arguments() newFile = updateFileName(args.i, args.o, args.n) if updateFile(args.i, newFile, args.o, args.n): print("Updated", args.i, ' to GCC', releases['GCC'][1], 'and to version', args.n) print("Run: \n\neb -l %s" % newFile)