T3689: Add abi compliance checker to CI

Sandro Knauß noreply at phabricator.kde.org
Thu Dec 13 15:08:35 GMT 2018


knauss added a comment.


  @bcooksley for akonadi-search we need some special settings for the abi-create step. Where we should  store such settings?
  
  This is a more general solution, that we can also modify the settings for other platforms etc.
  
  `ci-tooling/local-metadata/abi-complience-checker.yaml`:
  
    gcc_options:
        - "-std=c++11"
        - "-fPIC"
    skip_include_paths:
        - /usr/lib/python3.6/site-packages/utils/fake_libc_include
        - /usr/include/clang/AST
        - /usr/lib64/clang/6.0.1/include
    add_include_paths:
        - /usr/lib64/qt5/mkspecs/linux-g++
    
    # "SUSEQt5.10":    # platform specific
    # gcc_options:
    #    - "-DSUSE5.10"
    
    #"kde/*":    # special settings for all repos in kde (fnmatch)
    #   gcc_options:
    #       - "-DKDE"
    
    #"kde/pim/*":    # special settings for all repos in kde/pim
    #   gcc_options:
    #       - "-DKDEPIM"
    #  "SUSEQt5.10":   # for one specific platform
    #     gcc_options:
    #         - "-DKDEPIMSUSEQT5.10"
    
    "kde/pim/akonadi-search":     # for one repo
      "SUSEQt5.10":   # for one specific platform
        gcc_options:
          - "-std=c++11"
          - "-fPIC"
          - "-DQT_NO_KEYWORDS"
  
  and the Python code to handle this:
  rules are:
  
  - anthing overwrites defauls (outer level)
  - most matching path overwrites less matching path
  - platform specific overwrites non platform stuff
  
  general -> specific
  default -> "basepath/*" -> "basepath/* - platform" -> "basepath/repo" ->  "basepath/* - platform"
  
    import yaml, fnmatch, copy
    
    metadata = yaml.load(open('local-metadata/abi-complience-checker.yaml'))
    
    def getSettings(path, platform):
        
        entries = []
        for key in metadata:
            if fnmatch.fnmatch(path, key):
                entries.append(key)
    
        # sorting all entries - the entries at the end overwrites the former settings
        # len is efficient, but would fail if we have single letter repo names
        entries.sort(key=len)
        entries.insert(0, platform) # add platform settings at the start
    
        d = copy.copy(metadata)     # load default settings
        for entry in entries:
            try:
              content = metadata[entry]
              d.update(content)
              d.update(content[platform]) # try to load platform specific settings
            except KeyError:
              pass
        return d    
    
    getSettings("kde/pim/akonadi-search",  "SUSEQt5.10")

TASK DETAIL
  https://phabricator.kde.org/T3689

To: knauss
Cc: dfaure, kde-frameworks-devel, bcooksley, sysadmin, scarlettclark, aacid, knauss, alexeymin, kaning, blazquez
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20181213/94d58b35/attachment.html>


More information about the Kde-frameworks-devel mailing list