summaryrefslogtreecommitdiff
path: root/pygnulib/GLMakefileTable.py
diff options
context:
space:
mode:
authorDmitry Selyutin <ghostmansd@gmail.com>2017-08-20 11:17:58 +0300
committerDmitry Selyutin <ghostmansd@gmail.com>2017-09-08 17:27:55 +0300
commit02a1f93ea265428559d5e60b3cd79b563371e00c (patch)
treed6cb20690ee563a185050021029285e825a09212 /pygnulib/GLMakefileTable.py
parent3ba4dbaefe671991083ff46a2714ff256adf75a1 (diff)
downloadgnulib-02a1f93ea265428559d5e60b3cd79b563371e00c.tar.gz
[pygnulib] initial merge (including some small bug fixes)
Diffstat (limited to 'pygnulib/GLMakefileTable.py')
-rw-r--r--pygnulib/GLMakefileTable.py133
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))
+