forstio-window/SConstruct

108 lines
3.2 KiB
Python
Raw Permalink Normal View History

2020-10-15 01:35:31 +02:00
#!/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
2022-03-05 17:09:40 +01:00
def isAbsolutePath(key, dirname, env):
assert os.path.isabs(dirname), "%r must have absolute path syntax" % (key,)
env_vars = Variables(
args = ARGUMENTS
)
2022-03-05 17:11:15 +01:00
env_vars.Add('prefix',
2022-03-05 17:09:40 +01:00
help='Installation target location of build results and headers',
default='/usr/local',
validator=isAbsolutePath
)
2023-04-02 20:19:26 +02:00
env=Environment(ENV=os.environ, variables=env_vars, CPPPATH=['#source','#driver'],
2021-01-09 19:01:56 +01:00
CXX='clang++',
2021-12-29 20:17:33 +01:00
CPPDEFINES=['SAW_UNIX_XCB'],
CXXFLAGS=['-std=c++20','-g','-Wall','-Wextra'],
2023-04-02 20:19:26 +02:00
LIBS=['forstio-core','forstio-async','forstio-io','xcb','X11','X11-xcb'])
2020-10-15 01:35:31 +02:00
env.__class__.add_source_files = add_kel_source_files
2023-02-25 22:45:39 +01:00
env.Tool('compilation_db');
env.cdb = env.CompilationDatabase('compile_commands.json');
2020-10-15 01:35:31 +02:00
env.sources = []
env.headers = []
env.gl_sources = []
env.gl_headers = []
2020-10-15 01:35:31 +02:00
Export('env')
2021-12-29 20:17:33 +01:00
SConscript('source/forstio/window/SConscript')
2020-10-15 01:35:31 +02:00
SConscript('driver/SConscript')
# Library build
env_library = env.Clone()
env.objects_shared = []
env_library.add_source_files(env.objects_shared, env.sources, shared=True)
2020-10-27 03:16:54 +01:00
env_library.add_source_files(env.objects_shared, env.gl_sources, shared=True)
2021-12-29 20:17:33 +01:00
env.library_shared = env_library.SharedLibrary('#bin/forstio-window', [env.objects_shared])
2020-10-15 01:35:31 +02:00
env.objects_static = []
env_library.add_source_files(env.objects_static, env.sources)
2020-10-27 03:16:54 +01:00
env_library.add_source_files(env.objects_static, env.gl_sources)
2021-12-29 20:17:33 +01:00
env.library_static = env_library.StaticLibrary('#bin/forstio-window', [env.objects_static])
2020-10-15 01:35:31 +02:00
env.Alias('library', [env.library_shared, env.library_static])
env.Alias('library_shared', env.library_shared)
env.Alias('library_static', env.library_static)
env.Default('library')
# 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.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
format_iter(env,env.sources + env.headers + env.gl_sources + env.gl_headers)
2020-10-15 01:35:31 +02:00
env.Alias('format', env.format_actions)
2023-02-25 22:45:39 +01:00
env.Alias('cdb', env.cdb);
env.Alias('all', ['format', 'library_shared', 'library_static'])
2020-10-15 01:35:31 +02:00
2022-03-05 17:07:27 +01:00
env.Install('$prefix/lib/', [env.library_shared, env.library_static])
env.Install('$prefix/include/forstio/window/', [env.headers])
env.Install('$prefix/include/forstio/window/gl/', [env.gl_headers])
env.Alias('install', '$prefix')