astyle/wscript
Peter Vingelmann 4721872e16 Fix wscript
2017-04-01 00:19:06 +02:00

92 lines
2.8 KiB
Python

#! /usr/bin/env python
# encoding: utf-8
import os
import difflib
import sys
import subprocess
import shutil
from waflib.TaskGen import feature, after_method
from waflib import Errors
APPNAME = 'astyle'
VERSION = '0.1.0'
def build(bld):
bld.env.append_unique(
'DEFINES_STEINWURF_VERSION',
'STEINWURF_ASTYLE_VERSION="{}"'.format(VERSION))
if bld.is_toplevel():
static_libs = []
if bld.is_mkspec_platform('windows'):
static_libs = ['Shell32']
bld.program(
features='cxx test_astyle',
source=bld.path.ant_glob('src/*.cpp'),
lib=static_libs,
target='astyle')
@feature('test_astyle')
@after_method('apply_link')
def test_astyle(self):
# Only execute the tests within the current project
if self.path.is_child_of(self.bld.srcnode):
if self.bld.has_tool_option('run_tests'):
self.bld.add_post_fun(run_astyle_tests)
def run_command(args):
print("Running: {}".format(args))
sys.stdout.flush()
subprocess.check_call(args)
def run_astyle_tests(bld):
astyle = bld.get_tgen_by_name('astyle').link_task.outputs[0].abspath()
options = "--options={}".format(bld.path.find_node('.astylerc').abspath())
if os.path.isdir('test'):
test_folder = os.path.join(os.getcwd(), 'test')
correct_style = os.path.join(test_folder, 'correct_style.cpp')
# Read the input file using universal newlines (so the line endings
# are seen as '\n', even if git checks out the code with '\r\n')
correct_lines = open(correct_style, 'rU').readlines()
temp_folder = os.path.join(test_folder, 'temp')
# Make sure that the temp folder is deleted before copytree
if os.path.isdir(temp_folder):
shutil.rmtree(temp_folder)
shutil.copytree(test_folder, temp_folder)
incorrect_files = 0
# Run astyle to format each test file
for file in sorted(os.listdir(temp_folder)):
test_file = os.path.join(temp_folder, file)
if os.path.isfile(test_file):
print('Test file: '+test_file)
run_command([astyle, options, test_file])
# Compare the formatted file with the correct style
test_lines = open(test_file, 'r').readlines()
diff = difflib.unified_diff(correct_lines, test_lines)
diff_lines = ''.join(diff)
if len(diff_lines) > 0:
incorrect_files += 1
print('\nIncorrect formatting: {}'.format(test_file))
print(diff_lines)
# Clean up the temp directory
shutil.rmtree(temp_folder)
if incorrect_files > 0:
raise Errors.WafError('Number of incorrectly formatted '
'files: {}'.format(incorrect_files))