#!/usr/bin/env python3 import sys import os import os.path import glob import re if sys.version_info < (3,): def isbasestring(s): return isinstance(s,basestring) else: def isbasestring(s): return isinstance(s, (str,bytes)) def add_kel_source_files(self, sources, filetype, lib_env=None, shared=False, target_post=""): if isbasestring(filetype): dir_path = self.Dir('.').abspath filetype = sorted(glob.glob(dir_path+"/"+filetype)) for path in filetype: target_name = re.sub( r'(.*?)(\.cpp|\.c\+\+)', r'\1' + target_post, path ) if shared: target_name+='.os' sources.append( self.SharedObject( target=target_name, source=path ) ) else: target_name+='.o' sources.append( self.StaticObject( target=target_name, source=path ) ) pass def isAbsolutePath(key, dirname, env): assert os.path.isabs(dirname), "%r must have absolute path syntax" % (key,) ## Environment variables env_vars = Variables( args=ARGUMENTS ) env_vars.Add('prefix', help='Installation target location of build results and headers', default='/usr/local/', validator=isAbsolutePath ) ## Environment setup env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=['#source/forstio','#source','#','#driver'], CXX='clang++', CPPDEFINES=['SAW_UNIX'], CXXFLAGS=['-std=c++20','-g','-Wall','-Wextra'], LIBS=[]) env.__class__.add_source_files = add_kel_source_files env.Tool('compilation_db'); env.cdb = env.CompilationDatabase('compile_commands.json'); env.objects = [] env.sources = [] env.headers = [] env.tls_sources = [] env.tls_headers = [] env.driver_sources = [] env.driver_headers = [] Export('env') SConscript('driver/SConscript') SConscript('source/forstio/SConscript') # Tests SConscript('test/SConscript') env.Alias('test', env.test_program) # Clang format part env.Append(BUILDERS={'ClangFormat' : Builder(action = 'clang-format --style=file -i $SOURCE')}) env.Append(BUILDERS={'ClangTidyFix' : Builder(action = 'clang-tidy -extra-arg-before=-xc++ --fix $SOURCE -- -std=c++17 -DSAW_UNIX -Isource')}) env.format_actions = [] def format_iter(env,files): for f in files: env.format_actions.append(env.AlwaysBuild(env.ClangFormat(target=f+"-clang-format",source=f))); pass env.tidy_actions = [] def tidy_iter(env,files): string_of_files = ""; for f in files: if(f != "/home/keldu/workspace/forstio/source/forstio/async.tmpl.h" ): string_of_files = string_of_files + " " + f; # env.tidy_actions.append(env.AlwaysBuild(env.ClangTidyFix(target=f+"-clang-tidy-fix",source=f))); print(string_of_files); pass format_iter(env,env.sources + env.driver_sources + env.headers + env.driver_headers) tidy_iter(env,env.sources + env.driver_sources + env.headers + env.driver_headers) env.Alias('format', env.format_actions); env.Alias('tidy', env.tidy_actions); env.Alias('cdb', env.cdb); env.Alias('all', ['format', 'library', 'test']) env.Default('all') env.Install('$prefix/lib/', [env.library_shared, env.library_static]) env.Install('$prefix/include/forstio/', [env.headers]) env.Install('$prefix/include/forstio/tls/', [env.tls_headers]) env.Install('$prefix/include/forstio/test/', [env.test_headers]) env.Alias('install', '$prefix')