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