1# Copyright 2010 Baptiste Lepilleur and The JsonCpp Authors
2# Distributed under MIT license, or public domain if desired and
3# recognized in your jurisdiction.
4# See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
5
6from __future__ import print_function
7import os.path
8import sys
9
10def fix_source_eol(path, is_dry_run = True, verbose = True, eol = '\n'):
11    """Makes sure that all sources have the specified eol sequence (default: unix)."""
12    if not os.path.isfile(path):
13        raise ValueError('Path "%s" is not a file' % path)
14    try:
15        f = open(path, 'rb')
16    except IOError as msg:
17        print("%s: I/O Error: %s" % (file, str(msg)), file=sys.stderr)
18        return False
19    try:
20        raw_lines = f.readlines()
21    finally:
22        f.close()
23    fixed_lines = [line.rstrip('\r\n') + eol for line in raw_lines]
24    if raw_lines != fixed_lines:
25        print('%s =>' % path, end=' ')
26        if not is_dry_run:
27            f = open(path, "wb")
28            try:
29                f.writelines(fixed_lines)
30            finally:
31                f.close()
32        if verbose:
33            print(is_dry_run and ' NEED FIX' or ' FIXED')
34    return True
35##
36##
37##
38##def _do_fix(is_dry_run = True):
39##    from waftools import antglob
40##    python_sources = antglob.glob('.',
41##        includes = '**/*.py **/wscript **/wscript_build',
42##        excludes = antglob.default_excludes + './waf.py',
43##        prune_dirs = antglob.prune_dirs + 'waf-* ./build')
44##    for path in python_sources:
45##        _fix_python_source(path, is_dry_run)
46##
47##    cpp_sources = antglob.glob('.',
48##        includes = '**/*.cpp **/*.h **/*.inl',
49##        prune_dirs = antglob.prune_dirs + 'waf-* ./build')
50##    for path in cpp_sources:
51##        _fix_source_eol(path, is_dry_run)
52##
53##
54##def dry_fix(context):
55##    _do_fix(is_dry_run = True)
56##
57##def fix(context):
58##    _do_fix(is_dry_run = False)
59##
60##def shutdown():
61##    pass
62##
63##def check(context):
64##    # Unit tests are run when "check" target is used
65##    ut = UnitTest.unit_test()
66##    ut.change_to_testfile_dir = True
67##    ut.want_to_see_test_output = True
68##    ut.want_to_see_test_error = True
69##    ut.run()
70##    ut.print_results()
71