2
2
# -*- coding: utf-8 -*-
3
3
#
4
4
# Unified Build Tool
5
- # Copyright (C) 2021-2025 by Thomas Dreibholz
5
+ # Copyright (C) 2021-2024 by Thomas Dreibholz
6
6
#
7
7
# This program is free software: you can redistribute it and/or modify
8
8
# it under the terms of the GNU General Public License as published by
@@ -370,10 +370,12 @@ def readRPMPackagingInformation():
370
370
rpm_spec_names = glob .glob ('rpm/*.spec' )
371
371
if len (rpm_spec_names ) == 1 :
372
372
packageInfo ['rpm_spec_name' ] = rpm_spec_names [0 ]
373
+ packageInfo ['rpm_packages' ] = [ ]
373
374
374
375
re_rpm_name = re .compile (r'^(Name:[ \t]*)(\S+)' )
375
376
re_rpm_version = re .compile (r'^(Version:[ \t]*)(\d+)\.(\d+)\.(\d+)(.*|)' )
376
377
re_rpm_release = re .compile (r'^(Release:[ \t]*)(\d+)' )
378
+ re_rpm_package = re .compile (r'^(%package[ \t]+)([a-zA-Z0-9+-]+)' )
377
379
try :
378
380
rpmSpecFile = open (packageInfo ['rpm_spec_name' ], 'r' , encoding = 'utf-8' )
379
381
rpmSpecFileContents = rpmSpecFile .readlines ()
@@ -397,17 +399,32 @@ def readRPMPackagingInformation():
397
399
match = re_rpm_name .match (line )
398
400
if match != None :
399
401
packageInfo ['rpm_package_name' ] = match .group (2 )
402
+ else :
403
+ match = re_rpm_package .match (line )
404
+ if match != None :
405
+ packageInfo ['rpm_packages' ].append (
406
+ packageInfo ['rpm_package_name' ] + '-' + \
407
+ match .group (2 ) + '-' + \
408
+ packageInfo ['rpm_version_string' ] + '-' + \
409
+ str (packageInfo ['rpm_version_packaging' ]))
410
+
400
411
rpmSpecFile .close ()
401
412
402
413
except Exception as e :
403
414
sys .stderr .write ('ERROR: Unable to read ' + packageInfo ['rpm_spec_name' ] + ': ' + str (e ) + '\n ' )
404
415
sys .exit (1 )
405
416
406
417
# ====== Check whether information is complete ========================
407
- if ( (not 'rpm_package_name' in packageInfo ) or
408
- (not 'rpm_version_packaging' in packageInfo ) ):
418
+ if ( (not 'rpm_package_name' in packageInfo ) or
419
+ (not 'rpm_version_packaging' in packageInfo ) or
420
+ (not 'rpm_version_string' in packageInfo ) ):
409
421
sys .stderr .write ('ERROR: Cannot find required package versioning details in ' + packageInfo ['rpm_spec_name' ] + '!\n ' )
410
422
sys .exit (1 )
423
+ packageInfo ['rpm_packages' ].append (
424
+ packageInfo ['rpm_package_name' ] + '-' +
425
+ packageInfo ['rpm_version_string' ] + '-' +
426
+ str (packageInfo ['rpm_version_packaging' ]))
427
+ print (packageInfo ['rpm_packages' ])
411
428
412
429
elif len (rpm_spec_names ) > 1 :
413
430
sys .stderr .write ('ERROR: More than one spec file found: ' + str (rpm_spec_names ) + '!\n ' )
@@ -1607,19 +1624,20 @@ def buildRPM(packageInfo, releases, architectures, skipPackageSigning, summaryFi
1607
1624
for buildArchitecture in architectures :
1608
1625
for release in releases :
1609
1626
1610
- printSubsection ('Creating binary RPM package for ' + release + '/' + buildArchitecture )
1627
+ printSubsection ('Creating binary RPM package(s) for ' + release + '/' + buildArchitecture )
1611
1628
1612
1629
# ====== Check for mock configuration file =========================
1613
1630
configuration = release + '-' + buildArchitecture
1614
1631
if not os .path .isfile ('/etc/mock/' + configuration + '.cfg' ):
1615
1632
sys .stderr .write ('ERROR: Configuration ' + '/etc/mock/' + configuration + '.cfg does not exist!\n ' )
1616
1633
sys .exit (1 )
1617
1634
1618
- # ====== Delete old RPM ============================================
1619
- rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1620
- packageInfo ['rpm_package_name' ] + '-' + \
1621
- packageInfo ['rpm_version_string' ] + '-' + str (packageInfo ['rpm_version_packaging' ]) + '.' + \
1622
- buildArchitecture + '.rpm'
1635
+ # ====== Delete old RPMs ===========================================
1636
+ for rpmFilePrefix in packageInfo ['rpm_packages' ]:
1637
+ for architecture in [ 'noarch' , buildArchitecture ]:
1638
+ rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1639
+ rpmFilePrefix + '.' + \
1640
+ architecture + '.rpm'
1623
1641
try :
1624
1642
os .unlink (rpmFile )
1625
1643
except FileNotFoundError :
@@ -1642,38 +1660,49 @@ def buildRPM(packageInfo, releases, architectures, skipPackageSigning, summaryFi
1642
1660
sys .exit (1 )
1643
1661
1644
1662
# ------ Check resulting RPM =======================================
1645
- if not os .path .isfile (rpmFile ):
1646
- sys .stderr .write ('ERROR: RPM ' + rpmFile + ' not found!\n ' )
1647
- sys .exit (1 )
1648
-
1649
- # ====== Sign SRPM =================================================
1650
- if skipPackageSigning == False :
1651
- rpmsign = [ 'rpmsign' ,
1652
- '--define' , '_gpg_name ' + packageInfo ['packaging_maintainer_key' ],
1653
- '--addsign' , rpmFile ]
1654
- print (rpmsign )
1655
- try :
1656
- subprocess .run (rpmsign , check = True )
1657
- except Exception as e :
1658
- sys .stderr .write ('ERROR: RPMSign run failed: ' + str (e ) + '\n ' )
1663
+ for rpmFilePrefix in packageInfo ['rpm_packages' ]:
1664
+ rpmArchitecture = None
1665
+ found = False
1666
+ for architecture in [ 'noarch' , buildArchitecture ]:
1667
+ rpmFile = '/var/lib/mock/' + configuration + '/result/' + \
1668
+ rpmFilePrefix + '.' + \
1669
+ architecture + '.rpm'
1670
+ if os .path .isfile (rpmFile ):
1671
+ rpmArchitecture = architecture
1672
+ found = True
1673
+ break
1674
+ if not found :
1675
+ sys .stderr .write ('ERROR: RPM ' + rpmFile + ' not found!\n ' )
1659
1676
sys .exit (1 )
1660
1677
1661
- # ====== Run RPM Lint ==============================================
1662
- if shutil .which ('rpmlint' ) != None :
1663
- rpmlintCommand = 'rpmlint -P ' + rpmFile
1664
- printSubsection ('Running RPM Lint' )
1665
- print ('=> ' + rpmlintCommand )
1666
- try :
1667
- subprocess .run (rpmlintCommand , check = False , shell = True )
1668
- except Exception as e :
1669
- sys .stderr .write ('ERROR: RPM Lint run failed: ' + str (e ) + '\n ' )
1670
- sys .exit (1 )
1671
- else :
1672
- sys .stderr .write ('NOTE: RPM Lint is not installed -> checks skipped!\n ' )
1678
+ # ====== Sign SRPM ==============================================
1679
+ if skipPackageSigning == False :
1680
+ rpmsign = [ 'rpmsign' ,
1681
+ '--define' , '_gpg_name ' + packageInfo ['packaging_maintainer_key' ],
1682
+ '--addsign' , rpmFile ]
1683
+ print (rpmsign )
1684
+ try :
1685
+ subprocess .run (rpmsign , check = True )
1686
+ except Exception as e :
1687
+ sys .stderr .write ('ERROR: RPMSign run failed: ' + str (e ) + '\n ' )
1688
+ sys .exit (1 )
1689
+
1690
+ # ====== Run RPM Lint ===========================================
1691
+ if shutil .which ('rpmlint' ) != None :
1692
+ rpmlintCommand = 'rpmlint -P ' + rpmFile
1693
+ printSubsection ('Running RPM Lint' )
1694
+ print ('=> ' + rpmlintCommand )
1695
+ try :
1696
+ subprocess .run (rpmlintCommand , check = False , shell = True )
1697
+ except Exception as e :
1698
+ sys .stderr .write ('ERROR: RPM Lint run failed: ' + str (e ) + '\n ' )
1699
+ sys .exit (1 )
1700
+ else :
1701
+ sys .stderr .write ('NOTE: RPM Lint is not installed -> checks skipped!\n ' )
1673
1702
1674
- # ====== Add RPM file to summary === ================================
1675
- if summaryFile != None :
1676
- summaryFile .write ('rpmFile: ' + rpmFile + ' ' + release + ' ' + buildArchitecture + '\n ' )
1703
+ # ====== Add RPM file to summary ================================
1704
+ if summaryFile != None :
1705
+ summaryFile .write ('rpmFile: ' + rpmFile + ' ' + release + ' ' + rpmArchitecture + '\n ' )
1677
1706
1678
1707
1679
1708
0 commit comments