mirror of
https://https.git.savannah.gnu.org/git/gnulib.git
synced 2026-09-01 11:16:02 +00:00
Follow gnulib-tool change 2012-08-26 Bruno Haible <bruno@clisp.org> gnulib-tool: Remove no-op option --no-changelog. * pygnulib/constants.py: Remove FILES dictionary. * pygnulib/*: Update.
132 lines
4.7 KiB
Python
132 lines
4.7 KiB
Python
#!/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
|
|
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))
|