6c63a5b Add the %pycached macro

Authored and Committed by churchyard 4 years ago
    Add the %pycached macro
    
    Usage:
    
      %files
      ...
      %pycached %{python3_sitelib}/foo.py
    
    This will list:
    
      /usr/lib/python3.8/site-packages/foo.py
      /usr/lib/python3.8/site-packages/__pycache__/foo.cpython-38{,.opt-?}.pyc
    
    Assuming the Python 3 version is 3.8.
    The bytecode files are globbed, their presence is not checked.
    
    This will fail:
    
      %pycached %{python3_sitelib}/foo
    
    error: %pycached can only be used with paths explicitly ending with .py
    
    And so will any of this:
    
      %pycached %{python3_sitelib}/*
      %pycached %{python3_sitelib}/foo.*
      %pycached %{python3_sitelib}/foo.p?
      %pycached %{python3_sitelib}/foo.?y
      %pycached %{python3_sitelib}/foo.??
    
    But this will work:
    
      %pycached %{python3_sitelib}/foo*.py
    
    And it will generate the following globs:
    
      /usr/lib/python3.8/site-packages/foo*.py
      /usr/lib/python3.8/site-packages/__pycache__/foo*.cpython-38{,.opt-?}.pyc
    
    When used with paths that include Python 3 version, it globs with the version:
    
      %pycached /opt/python3.10/foo.py
    
    Generates:
    
      /opt/python3.10/foo.py
      /opt/python3.10/__pycache__/foo.cpython-310{,.opt-?}.pyc
    
    While paths without version have less strict globs:
    
      %pycached /custom/foo.py
      /custom/foo.py
      /custom/__pycache__/foo.cpython-3*{,.opt-?}.pyc
    
    This will generate a warning in RPM build:
    
    warning: File listed twice: /custom/__pycache__/foo.cpython-38.opt-1.pyc
    
    However it ensures the optimized bytecode is there.
    
        
file modified
+15 -0
file modified
+1 -0