Skip to content

Commit

Permalink
package-builder/SpecParser: parse includes
Browse files Browse the repository at this point in the history
Support for source files parsing included as
%include %{SOURCE2} for example.
Added SOURCEX to the definitions list.

Change-Id: I77156866d57e1cb619e0add5790f43333cb8af69
Signed-off-by: Alexey Makhalov <[email protected]>
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/19824
Tested-by: gerrit-photon <[email protected]>
Reviewed-by: Shreenidhi Shedi <[email protected]>
  • Loading branch information
Alexey Makhalov authored and tapakund committed Mar 20, 2023
1 parent 2417e4c commit 9424f3d
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions support/package-builder/SpecParser.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# pylint: disable=invalid-name,missing-docstring
import os
import re
from StringUtils import StringUtils
from SpecStructures import dependentPackageData, Package, SpecObject
Expand Down Expand Up @@ -31,12 +32,12 @@ def __init__(self, specfile, arch):
self.macro_pattern = re.compile(r'%{(\S+?)\}')
self.specfile = specfile

self._parseSpecFile()

def _parseSpecFile(self):
self.packages["default"] = Package(self.arch)
currentPkg = "default"
with open(self.specfile) as specFile:
self.currentPkg = "default"
self._parseSpecFile(self.specfile)

def _parseSpecFile(self, file):
with open(file) as specFile:
lines = specFile.readlines()
totalLines = len(lines)
i = 0
Expand Down Expand Up @@ -77,7 +78,7 @@ def _parseSpecFile(self):
if line.startswith('%package'):
pkg = Package(self.arch, defaultpkg)
pkg.name = packageName
currentPkg = packageName
self.currentPkg = packageName
self.packages[pkg.name] = pkg
else:
if defaultpkg.name == packageName:
Expand All @@ -88,21 +89,27 @@ def _parseSpecFile(self):
continue
self.packages[packageName].updatePackageMacro(macro)
elif self._isPackageHeaders(line):
self._readPackageHeaders(line, self.packages[currentPkg])
self._readPackageHeaders(line, self.packages[self.currentPkg])
elif self._isGlobalSecurityHardening(line):
self._readSecurityHardening(line)
elif self._isChecksum(line):
self._readChecksum(line, self.packages[currentPkg])
self._readChecksum(line, self.packages[self.currentPkg])
elif self._isExtraBuildRequires(line):
self._readExtraBuildRequires(line, self.packages[currentPkg])
self._readExtraBuildRequires(line, self.packages[self.currentPkg])
elif self._isBuildRequiresNative(line):
self._readBuildRequiresNative(line, self.packages[currentPkg])
self._readBuildRequiresNative(line, self.packages[self.currentPkg])
elif self._isDefinition(line):
self._readDefinition(line)
elif self._isConditionalCheckMacro(line):
self.conditionalCheckMacroEnabled = True
elif self.conditionalCheckMacroEnabled and self._isConditionalMacroEnd(line):
self.conditionalCheckMacroEnabled = False
elif self._isInclude(line):
include = line.split()
if len(include) == 2:
includeFile = os.path.join(os.path.dirname(file), self._replaceMacros(include[1]))
# recursive parsing
self._parseSpecFile(includeFile)
else:
self.specAdditionalContent += line + "\n"
i = i + 1
Expand Down Expand Up @@ -389,6 +396,8 @@ def _readPackageHeaders(self, line, pkg):
return True
if 'source' in headerName:
pkg.sources.append(headerContent)
sourceNum = headerName[6:]
self.defs[f"SOURCE{sourceNum}"] = headerContent
return True
if 'patch' in headerName:
pkg.patches.append(headerContent)
Expand Down Expand Up @@ -514,6 +523,9 @@ def _isConditionalMacroStart(self, line):
def _isConditionalMacroEnd(self, line):
return line.strip() == "%endif"

def _isInclude(self, line):
return line.startswith("%include")

########################################################################
# SpecObject generating functions
########################################################################
Expand Down

0 comments on commit 9424f3d

Please sign in to comment.