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/GLInfo.py | |
parent | 3ba4dbaefe671991083ff46a2714ff256adf75a1 (diff) | |
download | gnulib-02a1f93ea265428559d5e60b3cd79b563371e00c.tar.gz |
[pygnulib] initial merge (including some small bug fixes)
Diffstat (limited to 'pygnulib/GLInfo.py')
-rw-r--r-- | pygnulib/GLInfo.py | 302 |
1 files changed, 302 insertions, 0 deletions
diff --git a/pygnulib/GLInfo.py b/pygnulib/GLInfo.py new file mode 100644 index 0000000000..dd6b2675c4 --- /dev/null +++ b/pygnulib/GLInfo.py @@ -0,0 +1,302 @@ +#!/usr/bin/python +# encoding: UTF-8 + +#=============================================================================== +# Define global imports +#=============================================================================== +import os +import re +import sys +import locale +import codecs +import subprocess as sp +from . import constants + + +#=============================================================================== +# 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 + + +#=============================================================================== +# Define GLInfo class +#=============================================================================== +class GLInfo(object): + '''This class is used to get fromatted information about gnulib-tool. + This information is mainly used in stdout messages, but can be used + anywhere else. The return values are not the same as for the module, + but still depends on them.''' + + def __repr__(self): + '''x.__repr__ <==> repr(x)''' + result = '<pygnulib.GLInfo %s>' % hex(id(self)) + return(result) + + def package(self): + '''Return formatted string which contains name of the package.''' + result = 'GNU gnulib' + return(result) + + def authors(self): + '''Return formatted string which contains authors. + The special __author__ variable is used (type is list).''' + result = string() + for item in __author__: + if item == __author__[-2]: + result += '%s ' % item + elif item == __author__[-1]: + result += 'and %s' % item + else: + result += '%s, ' % item + return(result) + + def license(self): + '''Return formatted string which contains license and its description.''' + result = 'License GPLv3+: GNU GPL version 3 or later' + result += ' <http://gnu.org/licenses/gpl.html>\n' + result += 'This is free software: you are free' + result += ' to change and redistribute it.\n' + result += 'There is NO WARRANTY, to the extent permitted by law.' + return(result) + + def copyright(self): + '''Return formatted string which contains copyright. + The special __copyright__ variable is used (type is str).''' + result = 'Copyright (C) %s' % __copyright__ + return(result) + + def date(self): + '''Return formatted string which contains date and time in GMT format.''' + if isdir(DIRS['git']): + counter = int() # Create counter + result = string() # Create string + args = ['git', 'log'] + result = sp.check_output(args).decode(ENCS['shell']) + # Get date as "Fri Mar 21 07:16:51 2008 -0600" from string + pattern = re.compile('Date:[\t ]*(.*?)$', re.S | re.M) + result = pattern.findall(result)[0] + # Turn "Fri Mar 21 07:16:51 2008 -0600" into "Mar 21 2008 07:16:51 -0600" + pattern = re.compile('^[^ ]* ([^ ]*) ([0-9]*) ([0-9:]*) ([0-9]*) ') + result = pattern.sub('\\1 \\2 \\4 \\3 ', result) + # Use GNU date to compute the time in GMT + args = ['date', '-d', result, '-u', '+%Y-%m-%d %H:%M:%S'] + proc = sp.check_output(args) + result = string(proc, ENCS['shell']) + result = result.rstrip(os.linesep) + return(result) + + def usage(self): + '''Show help message.''' + result = '''\ +Usage: gnulib-tool --list + gnulib-tool --find filename + gnulib-tool --import [module1 ... moduleN] + gnulib-tool --add-import [module1 ... moduleN] + gnulib-tool --remove-import [module1 ... moduleN] + gnulib-tool --update + gnulib-tool --create-testdir --dir=directory [module1 ... moduleN] + gnulib-tool --create-megatestdir --dir=directory [module1 ... moduleN] + gnulib-tool --test --dir=directory module1 ... moduleN + gnulib-tool --megatest --dir=directory [module1 ... moduleN] + gnulib-tool --extract-description module + gnulib-tool --extract-comment module + gnulib-tool --extract-status module + gnulib-tool --extract-notice module + gnulib-tool --extract-applicability module + gnulib-tool --extract-filelist module + gnulib-tool --extract-dependencies module + gnulib-tool --extract-autoconf-snippet module + gnulib-tool --extract-automake-snippet module + gnulib-tool --extract-include-directive module + gnulib-tool --extract-link-directive module + gnulib-tool --extract-license module + gnulib-tool --extract-maintainer module + gnulib-tool --extract-tests-module module + gnulib-tool --copy-file file [destination] + +Operation modes: + + --list print the available module names + --find find the modules which contain the specified file + --import import the given modules into the current package + --add-import augment the list of imports from gnulib into the + current package, by adding the given modules; + if no modules are specified, update the current + package from the current gnulib + --remove-import reduce the list of imports from gnulib into the + current package, by removing the given modules + --update update the current package, restore files omitted + from version control + --create-testdir create a scratch package with the given modules + (pass --with-tests to include the unit tests) + --create-megatestdir create a mega scratch package with the given modules + one by one and all together + (pass --with-tests to include the unit tests) + --test test the combination of the given modules + (pass --with-tests to include the unit tests) + (recommended to use CC=\"gcc -Wall\" here) + --megatest test the given modules one by one and all together + (pass --with-tests to include the unit tests) + (recommended to use CC=\"gcc -Wall\" here) + --extract-description extract the description + --extract-comment extract the comment + --extract-status extract the status (obsolete etc.) + --extract-notice extract the notice or banner + --extract-applicability extract the applicability + --extract-filelist extract the list of files + --extract-dependencies extract the dependencies + --extract-autoconf-snippet extract the snippet for configure.ac + --extract-automake-snippet extract the snippet for library makefile + --extract-include-directive extract the #include directive + --extract-link-directive extract the linker directive + --extract-license report the license terms of the source files + under lib/ + --extract-maintainer report the maintainer(s) inside gnulib + --extract-tests-module report the unit test module, if it exists + --copy-file copy a file that is not part of any module + --help Show this help text. + --version Show version and authorship information. + +General options: + + --dir=DIRECTORY Specify the target directory. + For --import, this specifies where your + configure.ac can be found. Defaults to current + directory. + --local-dir=DIRECTORY Specify a local override directory where to look + up files before looking in gnulib's directory. + --cache-modules Enable module caching optimization. + --no-cache-modules Disable module caching optimization. + --verbose Increase verbosity. May be repeated. + --quiet Decrease verbosity. May be repeated. + +Options for --import, --add/remove-import, --update: + + --dry-run Only print what would have been done. + +Options for --import, --add/remove-import, + --create-[mega]testdir, --[mega]test: + + --with-tests Include unit tests for the included modules. + --with-obsolete Include obsolete modules when they occur among the + dependencies. By default, dependencies to obsolete + modules are ignored. + --with-c++-tests Include even unit tests for C++ interoperability. + --with-longrunning-tests + Include even unit tests that are long-runners. + --with-privileged-tests + Include even unit tests that require root + privileges. + --with-unportable-tests + Include even unit tests that fail on some platforms. + --with-all-tests Include all kinds of problematic unit tests. + --avoid=MODULE Avoid including the given MODULE. Useful if you + have code that provides equivalent functionality. + This option can be repeated. + --conditional-dependencies + Support conditional dependencies (may save configure + time and object code). + --no-conditional-dependencies + Don't use conditional dependencies. + --libtool Use libtool rules. + --no-libtool Don't use libtool rules. + +Options for --import, --add/remove-import: + + --lib=LIBRARY Specify the library name. Defaults to 'libgnu'. + --source-base=DIRECTORY + Directory relative to --dir where source code is + placed (default \"lib\"). + --m4-base=DIRECTORY Directory relative to --dir where *.m4 macros are + placed (default \"m4\"). + --po-base=DIRECTORY Directory relative to --dir where *.po files are + placed (default \"po\"). + --doc-base=DIRECTORY Directory relative to --dir where doc files are + placed (default \"doc\"). + --tests-base=DIRECTORY + Directory relative to --dir where unit tests are + placed (default \"tests\"). + --aux-dir=DIRECTORY Directory relative to --dir where auxiliary build + tools are placed (default comes from configure.ac). + --lgpl[=2|=3] Abort if modules aren't available under the LGPL. + Also modify license template from GPL to LGPL. + The version number of the LGPL can be specified; + the default is currently LGPLv3. + --makefile-name=NAME Name of makefile in automake syntax in the + source-base and tests-base directories + (default \"Makefile.am\"). + --macro-prefix=PREFIX Specify the prefix of the macros 'gl_EARLY' and + 'gl_INIT'. Default is 'gl'. + --po-domain=NAME Specify the prefix of the i18n domain. Usually use + the package name. A suffix '-gnulib' is appended. + --witness-c-macro=NAME Specify the C macro that is defined when the + sources in this directory are compiled or used. + --vc-files Update version control related files. + --no-vc-files Don't update version control related files + (.gitignore and/or .cvsignore). + --no-changelog Don't update or create ChangeLog files. + +Options for --create-[mega]testdir, --[mega]test: + + --without-c++-tests Exclude unit tests for C++ interoperability. + --without-longrunning-tests + Exclude unit tests that are long-runners. + --without-privileged-tests + Exclude unit tests that require root privileges. + --without-unportable-tests + Exclude unit tests that fail on some platforms. + --single-configure Generate a single configure file, not a separate + configure file for the tests directory. + +Options for --import, --add/remove-import, --update, + --create-[mega]testdir, --[mega]test: + + -s, --symbolic, --symlink Make symbolic links instead of copying files. + --local-symlink Make symbolic links instead of copying files, only + for files from the local override directory. + +Options for --import, --add/remove-import, --update: + + -S, --more-symlinks Make symbolic links instead of copying files, and + don't replace copyright notices. + +Report bugs to <bug-gnulib@gnu.org>.''' + return(result) + + def version(self): + '''Return formatted string which contains git or CVS version.''' + if isdir(DIRS['git']): + version_gen = joinpath(DIRS['build-aux'], 'git-version-gen') + args = [version_gen, DIRS['root']] + result = sp.check_output(args).decode(ENCS['shell']) + result = result.strip() + if result == 'UNKNOWN': + result = string() + return(result) + |