Skip to content
Snippets Groups Projects
Select Git revision
  • af564eaa0ccd01883b38b2bde1db47272c373ea6
  • 2023 default protected
2 results

gcc11ize.py

Blame
  • Alexandre Strube's avatar
    Alexandre Strube authored
    af564eaa
    History
    gcc11ize.py 6.03 KiB
    #!/usr/bin/env python3
    """Try to change from GCC10 to GCC11
    
    For it, you need
    
    - Python3
    """
    
    import argparse
    
    releases = {
        'Autotools':                ['20200321',    '20210726'],
        'Coreutils':                ['8.32',        '9.0'],
        'GCC':                      ['10.3.0',      '11.2.0'],
        'CMake':                    ['3.18.0',      '3.21.1'],
        'imkl':                     ['2021.2.0',    '2021.4.0'],
        'gomkl':                    ['2021',        '2022'],
        'gpsmpi':                   ['2021',        '2022'],
        'binutils':                 ['2.36.1',      '2.37'],
        'Bison':                    ['3.7.6',       '3.7.6'],
        'libdrm':                   ['2.4.106',     '2.4.107'],
        'Java':                     ['15',          '15'],
        'CUDA':                     ['11.3',        '11.5'],
        'cuDNN':                    ['8.2.1.32',    '8.2.2.26'],
        'Scikit':                   ['2021',        '2022'],
        'SciPy':                    ['2021',        '2022'],
        'protobuf':                 ['3.14.0',      '3.17.3'],
        'libxc':                    ['5.1.5',       '5.1.6'],
        'Python':                   ['3.8.5',       '3.9.6'],
        'cURL':                     ['7.71.1',      '7.78.0'],
        'PCRE':                     ['8.44',        '8.45'],
        'PCRE2':                    ['10.34',       '10.37'],
        'Qt5':                      ['5.14.2',      '5.15.2'],
        'Ninja':                    ['1.10.0',      '1.10.2'],
        're2c':                     ['1.3',         '2.2'],
        'GLib':                     ['2.64.4',      '2.69.1'],
        'X11':                      ['20200222',    '20210802'],
        'fontconfig':               ['2.13.92',     '2.13.94'],
        'DBus':                     ['1.12.20',     '1.13.18'],
        'libjpeg-turbo':            ['2.0.5',       '2.0.6'],
        'NSS':                      ['3.51',        '3.69'],
        'JasPer':                   ['2.0.19',      '2.0.33'],
        'snappy':                   ['1.1.8',       '1.1.9'],
        'PROJ':                     ['7.1.0',       '8.1.0'],
        'SQLite':                   ['3.32.3',      '3.36'],
        'LibTIFF':                  ['4.1.0',       '4.3.0'],
        'libgd':                    ['2.3.0',       '2.3.1'],
        'zlib':                     ['1.2.11',      '1.2.11'],
        'Meson':                    ['0.55.0',      '0.58.2'],
        'pkg-config':               ['0.29.2',      '0.29.2'],
        'flex':                     ['2.6.4',       '2.6.4'],
        'libffi':                   ['3.3',         '3.4.2'],
        'GObject-Introspection':    ['1.64.1',      '1.68.0'],
        'cairo':                    ['1.17.2',      '1.16.0'],
        'ATK':                      ['2.36.0',      '2.36.0'],
        'AT-SPI2-core':             ['2.36.0',      '2.40.3'],
        'AT-SPI2-ATK':              ['2.34.2',      '2.38.0'],
        'intltool':                 ['0.51.0',      '0.51.0'],
        'GTK+':                     ['3.24.17',     '3.24.23'],
    }
    
    
    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)
            fileName = fileName.replace(
                releases['imkl'][0], releases['imkl'][1], 1)
            fileName = fileName.replace(
                releases['gomkl'][0], releases['gomkl'][1], 1)
            fileName = fileName.replace(
                releases['gpsmpi'][0], releases['gpsmpi'][1], 1)
            fileName = fileName.replace(
                releases['Python'][0], releases['Python'][1], 1)
        return fileName
    
    
    def updateFile(oldName, newName, current, latest):
        """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)
                    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)
                    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)