diff options
author | Dmitry Selyutin <ghostmansd@gmail.com> | 2017-08-20 11:17:58 +0300 |
---|---|---|
committer | Dmitry Selyutin <ghostmansd@gmail.com> | 2017-09-08 17:27:55 +0300 |
commit | 02a1f93ea265428559d5e60b3cd79b563371e00c (patch) | |
tree | d6cb20690ee563a185050021029285e825a09212 /pygnulib/GLMakefileTable.py | |
parent | 3ba4dbaefe671991083ff46a2714ff256adf75a1 (diff) | |
download | gnulib-02a1f93ea265428559d5e60b3cd79b563371e00c.tar.gz |
[pygnulib] initial merge (including some small bug fixes)
Diffstat (limited to 'pygnulib/GLMakefileTable.py')
-rw-r--r-- | pygnulib/GLMakefileTable.py | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/pygnulib/GLMakefileTable.py b/pygnulib/GLMakefileTable.py new file mode 100644 index 0000000000..3c0e1d4e86 --- /dev/null +++ b/pygnulib/GLMakefileTable.py @@ -0,0 +1,133 @@ +#!/usr/bin/python +# encoding: UTF-8 + +#=============================================================================== +# Define global imports +#=============================================================================== +import os +import re +import sys +import codecs +import hashlib +import subprocess as sp +from . import constants +from .GLError import GLError +from .GLConfig import GLConfig +from .GLFileSystem import GLFileSystem + + +#=============================================================================== +# Define module information +#=============================================================================== +__author__ = constants.__author__ +__license__ = constants.__license__ +__copyright__ = constants.__copyright__ + + +#=============================================================================== +# Define global constants +#=============================================================================== +PYTHON3 = constants.PYTHON3 +NoneType = type(None) +APP = constants.APP +DIRS = constants.DIRS +ENCS = constants.ENCS +UTILS = constants.UTILS +FILES = constants.FILES +MODES = constants.MODES +TESTS = constants.TESTS +compiler = constants.compiler +joinpath = constants.joinpath +cleaner = constants.cleaner +string = constants.string +isabs = os.path.isabs +isdir = os.path.isdir +isfile = os.path.isfile +normpath = os.path.normpath +relpath = os.path.relpath +filter_filelist = constants.filter_filelist + + +#=============================================================================== +# Define GLMakefileTable class +#=============================================================================== +class GLMakefileTable(object): + '''This class is used to edit Makefile and store edits as table. + When user creates Makefile, he may need to use this class.''' + + def __init__(self, config): + '''GLMakefileTable.__init__(config) -> GLMakefileTable + + Create GLMakefileTable instance.''' + if type(config) is not GLConfig: + raise(TypeError('config must be a GLConfig, not %s' % \ + type(config).__name__)) + self.config = config + self.table = list() + + def __getitem__(self, y): + '''x.__getitem__(y) = x[y]''' + if type(y) is not int: + raise(TypeError('indices must be integers, not %s' % \ + type(y).__name__)) + result = self.table[y] + return(dict(result)) + + def editor(self, dir, var, val): + '''GLMakefileTable.editor(dir, var, val) + + This method is used to remember that ${dir}Makefile.am needs to be edited + to that ${var} mentions ${val}.''' + if type(dir) is bytes or type(dir) is string: + if type(dir) is bytes: + dir = dir.decode(ENCS['default']) + else: # if dir has not bytes or string type + raise(TypeError( + 'dir must be a string, not %s' % (type(dir).__name__))) + if type(var) is bytes or type(var) is string: + if type(var) is bytes: + var = var.decode(ENCS['default']) + else: # if var has not bytes or string type + raise(TypeError( + 'var must be a string, not %s' % (type(var).__name__))) + if type(val) is bytes or type(val) is string: + if type(val) is bytes: + val = val.decode(ENCS['default']) + else: # if val has not bytes or string type + raise(TypeError( + 'val must be a string, not %s' % (type(val).__name__))) + dictionary = {'dir': dir, 'var': var, 'val': val} + self.table += [dictionary] + + def parent(self): + '''GLMakefileTable.parent() + + Add a special row to Makefile.am table with the first parent directory + which contains or will contain Makefile.am file. + GLConfig: sourcebase, m4base, testsbase, testflags, makefile.''' + m4base = self.config['m4base'] + sourcebase = self.config['sourcebase'] + testsbase = self.config['testsbase'] + makefile = self.config['makefile'] + inctests = self.config.checkTestFlag(TESTS['tests']) + dir1 = string('%s%s' % (m4base, os.path.sep)) + mfd = string('Makefile.am') + if not makefile: + mfx = string('Makefile.am') + else: # if makefile + mfx = makefile + dir2 = string() + while dir1 and \ + (joinpath(self.config['destdir'], dir1, mfd) or \ + joinpath(dir1, mfd) == joinpath(sourcebase, mfx) or \ + (inctests and joinpath(dir1, mfd) == joinpath(testsbase, mfx))): + dir2 = joinpath(os.path.basename(dir1), dir2) + dir1 = os.path.dirname(dir1) + self.editor(dir1, 'EXTRA_DIST', joinpath(dir2, 'gnulib-cache.m4')) + + def count(self): + '''GLMakefileTable.count() -> int + + Count number of edits which were applied.''' + return(len(self.table)) + |