On 7/14/20 10:10 AM, y...@freebsd.org wrote:
On 2020-07-14 09:59, Don Wilde wrote:
Hi, Yuri -- I understand that you maintain the png++ "C++ wrapper for libpng"?

There's a game engine I'm trying to work with on my 12-stable system, called Drag[en]gine.

https://dragondreams.ch/

It's a complicated port, and I'll end up tweaking some heavy-duty OpenGL graphics to get it to do stuff for me. The first issue is that our libpng16 library is missing a C++ call: png_access_version_number(), which causes its setup program (a Python script)to crash.

I have both png and png++ installed and both libpng16.so and libpng16.a are present.

I'm in the process of (also) installing it on my Ubuntu 18.04.4 machine. It hasn't given me this libpng16 issue.

What do you think of this problem? Is this yours or is it the actual libpng library itself?


Hi Don,


I used png++ on both Linux (CentOS) and FreeBSD without any problems.


I also can't find png_access_version_number() call in the png++ sources.

Okay, this must actually be a call in the actual libpng sources.



Could you please provide an example code that exhibits the problem?

Here's what happens, though there's evidently quite a bit of construction that happens in the middle.

scons is Yet Another Super-Make, and it's plus (evidently) is that it can also generate Android and Windows code.

I type 'scons -h', and the output is:
scons: Reading SConscript files ...
Checking for zlibVersion() in C++ library z... yes
Checking for png_access_version_number() in C++ library png16... no
KeyError: 'forceRuntimeLibs':
  File "/opt/dragengine/SConstruct", line 633:
    duplicate=0, exports='parent_env parent_targets parent_report' )
  File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 660:
    return method(*args, **kw)
  File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/usr/local/lib/python3.7/site-packages/SCons/Script/SConscript.py", line 286:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/opt/dragengine/extern/libpng/SConscript", line 120:
forceRuntimeLibs.extend(parent_targets['lib_zlib']['forceRuntimeLibs'])

The SConscript files are generated from the (attached) custom.py, from what I understand. The error happens in the construct between lines 631 - 633 of that attached SConscript file (which acts like Makefile does for C and C++).

Don Wilde
****************************************************
* What is the Internet of Things but a system      *
* of systems including humans?                     *
****************************************************

from SConsCommon import *
from SConsPlatformAndroid import androidUpdateEnv

# create environment
tools = ARGUMENTS.get( 'tools', '' )
if tools:
        if tools == 'mingw64':
                parent_env = Environment( CPPPATH='.', LIBPATH='.', 
tools=['mingw'] )
                
                compiler = 'x86_64-w64-mingw32'
                if not parent_env.Detect( '{}-g++'.format( compiler ) ):
                        print( 'Windows 64-bit Cross-Compiler not found.' )
                        Return()
                
                parent_env.Replace( CC = '{}-gcc'.format( compiler ) )
                parent_env.Replace( CXX = '{}-g++'.format( compiler ) )
                parent_env.Replace( LD = '{}-ld'.format( compiler ) )
                parent_env.Replace( AR = '{}-ar'.format( compiler ) )
                parent_env.Replace( STRIP = '{}-strip'.format( compiler ) )
                #parent_env.Replace( MAKE = '{}-make'.format( compiler ) )
                parent_env.Replace( RANLIB = '{}-ranlib'.format( compiler ) )
                parent_env.Replace( NM = '{}-nm'.format( compiler ) )
                parent_env.Replace( RC = '{}-windres'.format( compiler ) )
                parent_env.Replace( DLLTOOL = '{}-dlltool'.format( compiler ) )
                
                parent_env.Replace( SHCCFLAGS = [ '$CCFLAGS' ] ) # remove -fPIC 
if included. just to silence misleading warnings
                parent_env.Replace( SHLIBPREFIX = '' ) # fix prefix since the 
environment is set up for unix
                parent_env.Replace( SHLIBSUFFIX = '.dll' ) # fix suffix since 
the environment is set up for unix
                parent_env.Replace( LIBPREFIX = '' ) # fix prefix since the 
environment is set up for unix
                parent_env.Replace( LIBPREFIXES = [ '' ] ) # fix prefix since 
the environment is set up for unix
                parent_env.Replace( LIBSUFFIX = '.lib' )
                parent_env.Replace( LIBSUFFIXES = [ '.lib', '.a' ] )
                
                parent_env[ 'OS_NAME' ] = 'win32'
                parent_env[ 'SYS_PLATFORM' ] = 'win32'
                parent_env[ 'CROSSCOMPILE_HOST' ] = compiler
                parent_env[ 'CROSSCOMPILE_SYSROOT' ] = '/usr/{}'.format( 
compiler )
                
                # prevent stdc++6 problems with missnig symbols on different 
compilers
                #parent_env.Append( CPPFLAGS = [ '-std=c++11' ] )
                #parent_env.Append( CROSSCOMPILE_CFLAGS = [ '-std=c++11' ] )
                #parent_env.Append( CROSSCOMPILE_CPPFLAGS = [ '-std=c++11' ] )
                
                print( '*** Using Windows 64 Cross Compiler' )
                
        else:
                parent_env = Environment( CPPPATH='.', LIBPATH='.', tools=[ 
tools ] )
                parent_env[ 'OS_NAME' ] = os.name
                parent_env[ 'SYS_PLATFORM' ] = sys.platform

elif sys.platform == 'win32':
        print( 'Windows detected. Setting up MinGW64 toolchain' )
        parent_env = Environment( CPPPATH='.', LIBPATH='.', tools=[ 'mingw' ] )
        """parent_env.Replace( CC = 'x86_64-w64-mingw32-gcc.exe' )
        parent_env.Replace( CXX = 'x86_64-w64-mingw32-g++.exe' )
        parent_env.Replace( LD = 'x86_64-w64-mingw32-g++.exe' )
        parent_env.Replace( AR = 'x86_64-w64-mingw32-ar' )
        parent_env.Replace( STRIP = 'x86_64-w64-mingw32-strip' )
        parent_env.Replace( MAKE = 'x86_64-w64-mingw32-make' )
        parent_env.Replace( RC = 'x86_64-w64-mingw32-windres' )
        parent_env.Replace( RC = 'x86_64-w64-mingw32-dlltool' )"""
        #parent_env.Append( ENV = { 'PATH' : 
'C:\\MinGW\\x86_64-w64-mingw32\\bin\\' } )
        #parent_env.Append( ENV = { 'PATH' : 
'C:\MinGW\bin;C:\MinGW\libexec\gcc\x86_64-w64-mingw32\4.8.3;' + os.environ[ 
'PATH' ] } )
        ##parent_env.Append( ENV = { 'PATH' : 'C:\MinGW\bin;' + os.environ[ 
'PATH' ] } )
        parent_env[ 'OS_NAME' ] = os.name
        parent_env[ 'SYS_PLATFORM' ] = sys.platform

else:
        parent_env = Environment( CPPPATH='.', LIBPATH='.' )
        parent_env[ 'OS_NAME' ] = os.name
        parent_env[ 'SYS_PLATFORM' ] = sys.platform

parent_env.Tool('logStdOut')
if parent_env['LogStdOut_Enabled']:
        parent_env['LOG_STD_OUT_FILE'] = open('build.log', 'w')

parent_env.Tool('runIsolated')

parent_env.Tool('macos_bundle')

InitCommon( parent_env )
#print('os.name', os.name)
#print('sys.platform', sys.platform)

# append flags
parent_env.Replace( MODULE_CPPFLAGS = [] )
parent_env.Replace( MODULE_LINKFLAGS = [] )

if 'CPPFLAGS' in os.environ:
        parent_env.Append( CPPFLAGS = os.environ[ 'CPPFLAGS' ] )

if 'LDFLAGS' in os.environ:
        parent_env.Append( LINKFLAGS = os.environ[ 'LDFLAGS' ] )

if parent_env['OSPosix']:
        parent_env.Append( CPPFLAGS = [ '-DOS_UNIX' ] )

if parent_env['OSWindows']:
        parent_env.Append( CPPFLAGS = [ '-DOS_W32', '-mwindows' ] )
        # mingw requires this to recognize wWinMain
        parent_env.Append( CPPFLAGS = [ '-municode' ] )
        
elif parent_env['OSBeOS']:
        parent_env.Append( CPPFLAGS = [ '-DOS_BEOS' ] )
        parent_env.Append( LINKFLAGS = [ '-L/boot/common/lib' ] )
        
elif parent_env['OSMacOS']:
        parent_env.Append(CPPFLAGS = ['-DOS_MACOS'])

if not (parent_env['OSPosix'] or parent_env['OSWindows'] or 
parent_env['OSBeOS'] or parent_env['OSMacOS']):
        Exit( 'No supported OS found!')

# parameters
#params = Variables( [ 'parameters.cache', 'custom.py' ] )
params = Variables( [ 'custom.py' ] )

params.Add( EnumVariable( 'platform_android', 'Build for Android platform', 
'no', ['no','armv7','x86'] ) )
params.Add( BoolVariable( 'with_tests', 'Build engine tests', False ) )
params.Add( BoolVariable( 'with_debug', 'Build with debug symbols for GDB 
usage', False ) )
params.Add( BoolVariable( 'with_warnerrors', 'Treat warnings as errors ( 
dev-builds )', False ) )
params.Add( BoolVariable( 'with_sanitize', 'Enable sanitizing (dev-builds)', 
False ) )
params.Add( BoolVariable( 'with_sanitize_thread', 'Enable thread sanitizing 
(dev-builds)', False ) )
params.Add( BoolVariable( 'with_verbose', 'Verbose compilation showing command 
lines( dev-builds )', False ) )
params.Add(StringVariable('force_version', 'Force version (empty to disable)', 
''))

params.Add( TernaryVariable( 'with_system_zlib', 'Use System Zlib' ) )
params.Add( TernaryVariable( 'with_system_libpng', 'Use System libpng' ) )
params.Add( TernaryVariable( 'with_system_sndio', 'Use System sndio' ) )
params.Add( TernaryVariable( 'with_system_libapng', 'Use System libapng' ) )
params.Add( TernaryVariable( 'with_system_libjpeg', 'Use System JPEG' ) )
params.Add( TernaryVariable( 'with_system_openal', 'Use System OpenAL' ) )
params.Add( ListVariable( 'with_openal_backends', 'When compiling OpenAL what 
backends are required',
        [], ['alsa', 'pulseaudio', 'portaudio', 'oss'] ) )
params.Add( TernaryVariable( 'with_system_libogg', 'Use System libogg' ) )
params.Add( TernaryVariable( 'with_system_libvorbis', 'Use System libvorbis' ) )
params.Add( TernaryVariable( 'with_system_libtheora', 'Use System libtheora' ) )
params.Add( TernaryVariable( 'with_system_fox', 'Use System FOX Toolkit' ) )
params.Add( TernaryVariable( 'with_system_dragonscript', 'Use System 
DragonScript' ) )
params.Add( PathVariable( 'with_dragonscript_inc',
        'Path to DragonScript include files or empty to use system default',
        '', PathVariable.PathAccept ) )
params.Add( PathVariable( 'with_dragonscript_lib',
        'Path to DragonScript library files or empty to use system default',
        '', PathVariable.PathAccept ) )
params.Add( TernaryVariable( 'with_system_libffi', 'Use System libffi' ) )
params.Add( TernaryVariable( 'with_system_libltdl', 'Use System libltdl' ) )
params.Add( TernaryVariable( 'with_system_libsigsegv', 'Use System libsigsegv' 
) )
params.Add( TernaryVariable( 'with_system_smalltalk', 'Use System Smalltalk' ) )
params.Add( TernaryVariable( 'with_system_libevdev', 'Use System libevdev' ) )
params.Add( TernaryVariable( 'with_system_libusb', 'Use System libusb' ) )
params.Add( TernaryVariable( 'with_system_libhidapi', 'Use System libhidapi' ) )
params.Add( TernaryVariable( 'with_system_libopenhmd', 'Use System libopenhmd' 
) )
params.Add( TernaryVariable( 'with_system_fftw', 'Use System fftw' ) )

params.Add( TernaryVariable( 'with_opengl', 'Use OpenGL' ) )
params.Add( TernaryVariable( 'with_python', 'Use Python' ) )
params.Add( TernaryVariable( 'with_npapisdk', 'Use NPAPI SDK' ) )
params.Add( TernaryVariable( 'build_audio_openal', 'Build OpenAL Audio Module' 
) )
params.Add( TernaryVariable( 'build_cr_basic', 'Build Basic Crash-Recovery 
Module' ) )
params.Add( TernaryVariable( 'build_graphics_opengl', 'Build OpenGL Graphics 
Module' ) )
params.Add( TernaryVariable( 'build_image_png', 'Build PNG Image Module' ) )
params.Add( TernaryVariable( 'build_image_png3d', 'Build PNG-3D Image Module' ) 
)
params.Add( TernaryVariable( 'build_image_jpeg', 'Build JPEG Image Module' ) )
params.Add( TernaryVariable( 'build_input_x', 'Build X Input Module' ) )
params.Add( TernaryVariable( 'build_input_w32', 'Build Windows Input Module' ) )
params.Add( TernaryVariable( 'build_input_beos', 'Build BeOS Input Module' ) )
params.Add( TernaryVariable( 'build_input_macos', 'Build MacOS Input Module' ) )
params.Add( TernaryVariable( 'build_input_android', 'Build Android Input 
Module' ) )
params.Add( TernaryVariable( 'build_physics_bullet', 'Build Bullet Physics 
Module', True ) )
params.Add( TernaryVariable( 'build_script_ds', 'Build DragonScript Script 
Module' ) )
params.Add( TernaryVariable( 'build_script_python', 'Build Python Script 
Module' ) )
params.Add( TernaryVariable( 'build_script_smalltalk', 'Build Smalltalk Script 
Module' ) )
params.Add( TernaryVariable( 'build_sound_ogg', 'Build OGG Vorbis Sound Module' 
) )
params.Add( TernaryVariable( 'build_video_theora', 'Build Theora Video Module' 
) )
params.Add( TernaryVariable( 'build_video_apng', 'Build Animated PNG Video 
Module' ) )
params.Add( TernaryVariable( 'build_igde', 'Build IGDE' ) )
params.Add( TernaryVariable( 'build_guilauncher', 'Build GUI Launcher' ) )
params.Add( TernaryVariable( 'build_launcher_android', 'Build Android Launcher' 
) )
params.Add( TernaryVariable( 'build_archive_delga', 'Build DELGA Archive 
Module' ) )

params.Add( EnumVariable( 'archive_format', 'Archive file format', 'tarbz2', 
['tarbz2', 'zip'] ) )
params.Add( StringVariable( 'archive_name_engine',
        'Archive file name without extension for Drag[en]gine archive', 
'dragengine' ) )
params.Add( StringVariable( 'archive_name_engine_dev',
        'Archive file name without extension for Drag[en]gine Development 
archive', 'dragengine-dev' ) )
params.Add( StringVariable( 'archive_name_igde',
        'Archive file name without extension for IGDE archive', 'deigde' ) )
params.Add( StringVariable( 'archive_name_igde_dev',
        'Archive file name without extension for IGDE Development archive', 
'deigde_dev' ) )
params.Add( StringVariable( 'archive_name_special',
        'Archive file name without extension for Special archive', 'despecial' 
) )
params.Add( StringVariable( 'installer_name_engine',
        'Installer file name without extension for Drag[en]gine installer', 
'install-dragengine' ) )
params.Add( StringVariable( 'installer_name_engine_dev',
        'Installer file name without extension for Drag[en]gine Development 
installer', 'install-dragengine-dev' ) )
params.Add( StringVariable( 'installer_name_igde',
        'Installer file name without extension for IGDE installer', 
'install-deigde' ) )
params.Add( StringVariable( 'installer_name_igde_dev',
        'Installer file name without extension for IGDE Development installer', 
'install-deigde-dev' ) )


if parent_env['OSMacOS']:
        params.Add( TernaryVariable( 'with_dl', 'Use the dynamic library 
system' ) )
        params.Add( TernaryVariable( 'with_pthread', 'Use pthread' ) )
        params.Add( TernaryVariable( 'with_x', 'Use the X Window System' ) )
        
        params.Add(EnumVariable('igde_toolkit', 'ToolKit to use for building 
IGDE', 'null', ['null']))
        
        params.Add( PathVariable( 'prefix', 'System path', '/usr', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'libdir', 'System libraries', 
'${prefix}/lib', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'includedir', 'System includes', 
'${prefix}/include', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'datadir', 'System shares', 
'${prefix}/share', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysconfdir', 'System configuration', '/etc', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'execdir', 'System binaries', 
'/Applications', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysvardir', 'System var', '${prefix}/var', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'cachedir', 'System cache', 
'${sysvardir}/lib', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_de_bin', 'Path to the Drag[en]gine 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_lib', 'Path to the Drag[en]gine 
libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_include', 'Path to the Drag[en]gine 
headers',
                '${includedir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_config', 'Path to the Drag[en]gine 
configuration',
                '${sysconfdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_data', 'Path to the Drag[en]gine 
data',
                '${libdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_share', 'Path to the Drag[en]gine 
shares',
                '${datadir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_cache', 'Path to the Drag[en]gine 
cache',
                '${cachedir}/dragengine', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_igde_bin', 'Path to the IGDE binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_lib', 'Path to the IGDE libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_include', 'Path to the IGDE 
headers',
                '${includedir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_config', 'Path to the IGDE 
configuration',
                '${sysconfdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_data', 'Path to the IGDE data',
                '${libdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_share', 'Path to the IGDE shares',
                '${datadir}/deigde', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_launcher_bin', 'Path to the Launcher 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_bin_lib', 'Path to the 
Launcher binary libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_config', 'Path to the Launcher 
configuration',
                '${sysconfdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_data', 'Path to the Launcher 
data',
                '${libdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_share', 'Path to the Launcher 
shares',
                '${datadir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_games', 'Path to the Launcher 
games',
                '/opt/delauncher/games', PathVariable.PathAccept ) )

        
elif parent_env['OSBeOS']:
        params.Add( TernaryVariable( 'with_dl', 'Use the dynamic library 
system' ) )
        params.Add( TernaryVariable( 'with_pthread', 'Use pthread' ) )
        params.Add( TernaryVariable( 'with_x', 'Use the X Window System' ) )
        
        params.Add(EnumVariable('igde_toolkit', 'ToolKit to use for building 
IGDE', 'null', ['null']))
        
        params.Add( PathVariable( 'prefix', 'System path', '/boot/system', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'libdir', 'System libraries', 
'${prefix}/lib', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'includedir', 'System includes', 
'${prefix}/develop/include', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'datadir', 'System shares', '${prefix}/data', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysconfdir', 'System configuration', 
'${prefix}/settings', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'execdir', 'System binaries', 
'${prefix}/bin', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysvardir', 'System var', '${prefix}/var', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'cachedir', 'System cache', 
'${prefix}/cache', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'docdir', 'System documentation', 
'${prefix}/documentation', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_de_bin', 'Path to the Drag[en]gine 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_lib', 'Path to the Drag[en]gine 
libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_include', 'Path to the Drag[en]gine 
headers',
                '${includedir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_config', 'Path to the Drag[en]gine 
configuration',
                '${sysconfdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_data', 'Path to the Drag[en]gine 
data',
                '${libdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_share', 'Path to the Drag[en]gine 
shares',
                '${datadir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_cache', 'Path to the Drag[en]gine 
cache',
                '${cachedir}/dragengine', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_igde_bin', 'Path to the IGDE binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_lib', 'Path to the IGDE libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_include', 'Path to the IGDE 
headers',
                '${includedir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_config', 'Path to the IGDE 
configuration',
                '${sysconfdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_data', 'Path to the IGDE data',
                '${libdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_share', 'Path to the IGDE shares',
                '${datadir}/deigde', PathVariable.PathAccept ) )

        params.Add( PathVariable( 'path_launcher_bin', 'Path to the Launcher 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_bin_lib', 'Path to the 
Launcher binary libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_config', 'Path to the Launcher 
configuration',
                '${sysconfdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_data', 'Path to the Launcher 
data',
                '${libdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_share', 'Path to the Launcher 
shares',
                '${datadir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_games', 'Path to the Launcher 
games',
                '/boot/system/delauncher/games', PathVariable.PathAccept ) )
        
elif parent_env['OSPosix']:
        params.Add( TernaryVariable( 'with_dl', 'Use the dynamic library 
system' ) )
        params.Add( TernaryVariable( 'with_pthread', 'Use pthread' ) )
        params.Add( TernaryVariable( 'with_x', 'Use the X Window System' ) )
        
        params.Add(EnumVariable('igde_toolkit', 'ToolKit to use for building 
IGDE', 'fox', ['fox','null']))
        
        params.Add( PathVariable( 'prefix', 'System path', '/usr', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'libdir', 'System libraries', 
'${prefix}/lib', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'includedir', 'System includes', 
'${prefix}/include', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'datadir', 'System shares', 
'${prefix}/share', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysconfdir', 'System configuration', '/etc', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'execdir', 'System binaries', 
'${prefix}/bin', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'sysvardir', 'System var', '/var', 
PathVariable.PathAccept ) )
        params.Add( PathVariable( 'cachedir', 'System cache', 
'${sysvardir}/lib', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_de_bin', 'Path to the Drag[en]gine 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_lib', 'Path to the Drag[en]gine 
libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_include', 'Path to the Drag[en]gine 
headers',
                '${includedir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_config', 'Path to the Drag[en]gine 
configuration',
                '${sysconfdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_data', 'Path to the Drag[en]gine 
data',
                '${libdir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_share', 'Path to the Drag[en]gine 
shares',
                '${datadir}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_cache', 'Path to the Drag[en]gine 
cache',
                '${cachedir}/dragengine', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_igde_bin', 'Path to the IGDE binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_lib', 'Path to the IGDE libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_include', 'Path to the IGDE 
headers',
                '${includedir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_config', 'Path to the IGDE 
configuration',
                '${sysconfdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_data', 'Path to the IGDE data',
                '${libdir}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_share', 'Path to the IGDE shares',
                '${datadir}/deigde', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_launcher_bin', 'Path to the Launcher 
binaries',
                '${execdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_bin_lib', 'Path to the 
Launcher binary libraries',
                '${libdir}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_config', 'Path to the Launcher 
configuration',
                '${sysconfdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_data', 'Path to the Launcher 
data',
                '${libdir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_share', 'Path to the Launcher 
shares',
                '${datadir}/delauncher', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_games', 'Path to the Launcher 
games',
                '/opt/delauncher/games', PathVariable.PathAccept ) )
        
elif parent_env['OSWindows']:
        params.Add(EnumVariable('igde_toolkit', 'ToolKit to use for building 
IGDE', 'fox', ['fox','null']))
        
        params.Add( PathVariable( 'programfiles', 'Window program files 
directory',
                '@ProgramFiles', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'systemroot', 'Window system root directory',
                '@System', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_de_sdk', 'Path to Drag[en]gine SDK 
directory',
                '${path_de}/SDK', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_sdk_lib', 'Path to Drag[en]gine SDK 
libraries',
                '${path_de_sdk}/lib', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_sdk_inc', 'Path to Drag[en]gine SDK 
includes',
                '${path_de_sdk}/include', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_de', 'Path to the Drag[en]gine 
Installation',
                '${programfiles}/Dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_bin', 'Path to the Drag[en]gine 
binaries',
                '${path_de}/Bin', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_lib', 'Path to the Drag[en]gine 
libraries',
                '${path_de_sdk_lib}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_include', 'Path to the Drag[en]gine 
headers',
                '${path_de_sdk_inc}/dragengine', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_config', 'Path to the Drag[en]gine 
configuration',
                '${path_de}/Config', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_data', 'Path to the Drag[en]gine 
data',
                '${path_de}/Data', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_share', 'Path to the Drag[en]gine 
shares',
                '${path_de}/Share', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_de_cache', 'Path to the Drag[en]gine 
cache',
                '@LocalAppData/Dragengine/Cache', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_igde_sdk', 'Path to Drag[en]gine IGDE 
SDK directory',
                '${path_igde}/SDK', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_sdk_lib', 'Path to Drag[en]gine 
IGDE SDK libraries',
                '${path_igde_sdk}/lib', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_sdk_inc', 'Path to Drag[en]gine 
IGDE SDK includes',
                '${path_igde_sdk}/include', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_igde', 'Path to the IGDE Installation',
                '${programfiles}/DEIGDE', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_bin', 'Path to the IGDE binaries',
                '${path_igde}/Bin', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_lib', 'Path to the IGDE libraries',
                '${path_igde_sdk_lib}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_include', 'Path to the IGDE 
headers',
                '${path_igde_sdk_inc}/deigde', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_config', 'Path to the IGDE 
configuration',
                '${path_igde}/Config', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_data', 'Path to the IGDE data',
                '${path_igde}/Data', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_igde_share', 'Path to the IGDE shares',
                '${path_igde}/Share', PathVariable.PathAccept ) )
        
        params.Add( PathVariable( 'path_launcher', 'Path to the Launcher 
Installation',
                '${path_de}/Launchers', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_bin', 'Path to the Launcher 
binaries',
                '${path_launcher}/Bin', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_bin_lib', 'Path to the 
Launcher binary libraries',
                '${path_launcher_bin}', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_config', 'Path to the Launcher 
configuration',
                '@RoamingAppData/DELaunchers/Config', PathVariable.PathAccept ) 
)
        params.Add( PathVariable( 'path_launcher_data', 'Path to the Launcher 
data',
                '${path_launcher}/Data', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_share', 'Path to the Launcher 
shares',
                '${path_launcher}/Share', PathVariable.PathAccept ) )
        params.Add( PathVariable( 'path_launcher_games', 'Path to the Launcher 
games',
                '${path_launcher}/Games', PathVariable.PathAccept ) )
        
else:
        Exit( 'No supported OS found!')

params.Update( parent_env )
#print(parent_env.Dump())

# determine sanitize flags to use
parent_env.Replace(SANITIZE_FLAGS = [])

if parent_env['with_debug'] and parent_env['with_sanitize']:
        if parent_env['with_sanitize_thread']:
                parent_env.Append(SANITIZE_FLAGS = ['-fsanitize=thread'])
                
        else:
                parent_env.Append(SANITIZE_FLAGS = [
                        '-fsanitize=address',
                        '-fsanitize-address-use-after-scope',
                        '-fsanitize=pointer-compare',
                        '-fsanitize=pointer-subtract'])
                parent_env.Append(SANITIZE_FLAGS = [
                        '-fsanitize=leak'])
                parent_env.Append(SANITIZE_FLAGS = [
                        '-fsanitize=undefined',
                        '-fsanitize=shift',
                        '-fsanitize=shift-exponent',
                        '-fsanitize=shift-base',
                        '-fsanitize=integer-divide-by-zero',
                        '-fsanitize=unreachable',
                        '-fsanitize=vla-bound',
                        '-fsanitize=null',
                        '-fsanitize=return',
                        '-fsanitize=signed-integer-overflow',
                        '-fsanitize=bounds',
                        '-fsanitize=bounds-strict',
                        '-fsanitize=alignment',
                        '-fsanitize=object-size',
                        '-fsanitize=float-divide-by-zero',
                        '-fsanitize=float-cast-overflow',
                        '-fsanitize=nonnull-attribute',
                        '-fsanitize=returns-nonnull-attribute',
                        '-fsanitize=bool',
                        '-fsanitize=enum',
                        '-fsanitize=vptr',
                        '-fsanitize=pointer-overflow',
                        '-fsanitize=builtin'])

# for modules hide everything except the entry point. for this the default 
visibility
# is set to hidden and only the entry point is qualified with normal visibility.
# hiding also inlines is an optimization and helps to remove some special cases.
# the version script is required to hide symbols of linked static libraries.
# the -s flag eventually strips unused code linked in by static libraries

if parent_env['with_debug']:
        parent_env.Append(MODULE_CPPFLAGS = ['-DMOD_ENTRY_POINT_ATTR='])
        if parent_env['with_sanitize']:
                parent_env.Append(MODULE_CPPFLAGS = 
parent_env['SANITIZE_FLAGS'])
                parent_env.Append(MODULE_LINKFLAGS = 
parent_env['SANITIZE_FLAGS'])
        
else:
        parent_env.Append(MODULE_CPPFLAGS = ['-fvisibility=hidden'])
        parent_env.Append(MODULE_LINKFLAGS = ['-fvisibility=hidden'])
        
        parent_env.Append(MODULE_CXXFLAGS = ['-fvisibility-inlines-hidden'])
        parent_env.Append(MODULE_LINKFLAGS = ['-fvisibility-inlines-hidden'])
        
        if not parent_env['OSMacOS']:
                parent_env.Append(MODULE_LINKFLAGS = 
['-Wl,--version-script=module.version'])
                parent_env.Append(MODULE_LINKFLAGS = ['-s'])
        parent_env.Append(MODULE_CPPFLAGS = 
['-DMOD_ENTRY_POINT_ATTR=__attribute__\\(\\(visibility\\(\\"default\\"\\)\\)\\)'])

# android
if parent_env[ 'platform_android' ] != 'no':
        params.Add( PathVariable( 'ndkroot', 'Path to NDK toolchain (NDK_ROOT 
env-param by default)',
                os.path.expanduser( os.environ['NDK_ROOT'] ), 
PathVariable.PathAccept ) )
        params.Add( StringVariable( 'apilevel', 'Android API level', '18' ) )
        params.Add( BoolVariable( 'hardfp', 'Use hardware floating point 
support instead of softfp on ARMv7 only', False ) )
        
        params.Update( parent_env )
        
        androidUpdateEnv( parent_env )

# disable verbose compile messages if requested
if not parent_env[ 'with_verbose' ]:
        DisableVerboseCompiling( parent_env )

if parent_env['with_debug']:
        if parent_env['OSWindows']:
                parent_env.Append(CPPFLAGS = ['-g', '-gstabs', '-ggdb'])
        else:
                parent_env.Append(CPPFLAGS = ['-g'])
                # mingw produces internal compiler errors on 8.x GCC. disabled 
until fixed or a check is present
                parent_env.Append(CPPFLAGS = ['-fno-omit-frame-pointer'])

# set flags based on parameters
if parent_env[ 'platform_android' ] == 'no':
        parent_env.Append( CPPFLAGS = [ '-O2' ] )  # because android platform 
script defines this already
parent_env.Append( CPPFLAGS = [ '-Wall' ] )

# disable the new (and truely stupid) new gcc 8.1 shenanigans.
# see 
https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Dialect-Options.html#index-Wclass-memaccess
 .
# the idea behind all this is all nice and dandy but it prevents legit fast 
memory handling
# trying to pretend idiots from shooting themselves in the foot. if somebody 
uses memcpy then
# he should know what he is doing so stop breaking builds with non-sense errors.
parent_env.Append(CXXFLAGS = ['-Wno-class-memaccess'])

if parent_env[ 'with_warnerrors' ]:
        parent_env.Append( CPPFLAGS = [ '-Werror' ] )

if parent_env[ 'platform_android' ] != 'no':
        parent_env.Append(CPPFLAGS = ['-Wno-unused-private-field'])
        parent_env.Append(CPPFLAGS = ['-Wno-tautological-constant-compare'])

# no default targets
Default( None )

# define the targets array and reports dictionary to be filled
parent_targets = {}
parent_report = {}

# report stuff
if parent_env['OSPosix']:
        parent_report[ 'prefix' ] = parent_env.subst( parent_env[ 'prefix' ] )
        parent_report[ 'dragengine binary path' ] = parent_env.subst( 
parent_env[ 'path_de_bin' ] )
        parent_report[ 'dragengine library path' ] = parent_env.subst( 
parent_env[ 'path_de_lib' ] )
        parent_report[ 'dragengine include path' ] = parent_env.subst( 
parent_env[ 'path_de_include' ] )
        parent_report[ 'dragengine configuration path' ] = parent_env.subst( 
parent_env[ 'path_de_config' ] )
        parent_report[ 'dragengine data path' ] = parent_env.subst( parent_env[ 
'path_de_data' ] )
        parent_report[ 'dragengine shared data path' ] = parent_env.subst( 
parent_env[ 'path_de_share' ] )
        parent_report[ 'dragengine cache path' ] = parent_env.subst( 
parent_env[ 'path_de_cache' ] )

elif parent_env['OSWindows']:
        parent_report[ 'system library path' ] = parent_env.subst( parent_env[ 
'systemroot' ] )
        parent_report[ 'dragengine sdk path' ] = parent_env.subst( parent_env[ 
'path_de_sdk' ] )
        parent_report[ 'dragengine path' ] = parent_env.subst( parent_env[ 
'path_de' ] )
        parent_report[ 'dragengine binary path' ] = parent_env.subst( 
parent_env[ 'path_de_bin' ] )
        parent_report[ 'dragengine library path' ] = parent_env.subst( 
parent_env[ 'path_de_lib' ] )
        parent_report[ 'dragengine include path' ] = parent_env.subst( 
parent_env[ 'path_de_include' ] )
        parent_report[ 'dragengine configuration path' ] = parent_env.subst( 
parent_env[ 'path_de_config' ] )
        parent_report[ 'dragengine data path' ] = parent_env.subst( parent_env[ 
'path_de_data' ] )
        parent_report[ 'dragengine shared data path' ] = parent_env.subst( 
parent_env[ 'path_de_share' ] )
        parent_report[ 'deigde path' ] = parent_env.subst( parent_env[ 
'path_igde' ] )
        parent_report[ 'deigde binary path' ] = parent_env.subst( parent_env[ 
'path_igde_bin' ] )
        parent_report[ 'deigde library path' ] = parent_env.subst( parent_env[ 
'path_igde_lib' ] )
        parent_report[ 'deigde include path' ] = parent_env.subst( parent_env[ 
'path_igde_include' ] )
        parent_report[ 'deigde configuration path' ] = parent_env.subst( 
parent_env[ 'path_igde_config' ] )
        parent_report[ 'deigde data path' ] = parent_env.subst( parent_env[ 
'path_igde_data' ] )
        parent_report[ 'deigde shared data path' ] = parent_env.subst( 
parent_env[ 'path_igde_share' ] )
        parent_report[ 'dragengine cache path' ] = parent_env.subst( 
parent_env[ 'path_de_cache' ] )
        #parent_report[ 'program files' ] = parent_env.subst( parent_env[ 
'programfiles' ] )

parent_report[ 'platform_android' ] = parent_env[ 'platform_android' ]
if parent_env[ 'platform_android' ] != 'no':
        parent_report[ 'ndkroot' ] = parent_env.subst( parent_env[ 'ndkroot' ] )
        parent_report[ 'apilevel' ] = parent_env[ 'apilevel' ]
        parent_report[ 'hardfp' ] = 'yes' if parent_env[ 'hardfp' ] else 'no'

parent_report[ 'build dragengine tests' ] = 'yes' if parent_env[ 'with_tests' ] 
else 'no'
parent_report[ 'treat warnings as errors' ] = 'yes' if parent_env[ 
'with_warnerrors' ] else 'no'
parent_report[ 'build with debug symbols' ] = 'yes' if parent_env[ 'with_debug' 
] else 'no'
parent_report[ 'build with sanitizing' ] = 'yes' if parent_env[ 'with_sanitize' 
] else 'no'
parent_report[ 'build with thread sanitizing' ] = 'yes' if parent_env[ 
'with_sanitize_thread' ] else 'no'



# external libraries
extdirs = []
extdirs.append( 'extern/zlib' )
extdirs.append( 'extern/libpng' )
extdirs.append( 'extern/libapng' )
extdirs.append( 'extern/libjpeg' )
extdirs.append( 'extern/sndio' )
extdirs.append( 'extern/openal' )
extdirs.append( 'extern/libogg' )
extdirs.append( 'extern/libvorbis' )
extdirs.append( 'extern/libtheora' )
extdirs.append( 'extern/fox' )
extdirs.append( 'extern/dragonscript' )
extdirs.append( 'extern/libffi' )
extdirs.append( 'extern/libltdl' )
extdirs.append( 'extern/libsigsegv' )
#extdirs.append( 'extern/smalltalk' )
extdirs.append( 'extern/libevdev' )
extdirs.append( 'extern/libusb' )
extdirs.append( 'extern/libhidapi' )
extdirs.append( 'extern/libopenhmd' )
extdirs.append( 'extern/fftw' )

for extdir in extdirs:
        SConscript( dirs=extdir, variant_dir='{}/build'.format( extdir ),
                duplicate=0, exports='parent_env parent_targets parent_report' )

SConscript( dirs='extern/mingw', variant_dir='extern/mingw/build',
        duplicate=0, exports='parent_env parent_targets parent_report' )

# drag[en]gine game engine
SConscript( dirs='src/dragengine', variant_dir='src/dragengine/build', 
duplicate=0,
        exports='parent_env parent_targets parent_report' )

scdirs = []

# game engine modules
scdirs.append( 'src/modules/animator/deanimator' )

scdirs.append( 'src/modules/ai/deai' )

scdirs.append( 'src/modules/animation/deanim' )

scdirs.append( 'src/modules/audio/null' )
scdirs.append( 'src/modules/audio/openal' )

scdirs.append( 'src/modules/crashrecovery/simplyquit' )
scdirs.append( 'src/modules/crashrecovery/basicrecovery' )

scdirs.append( 'src/modules/font/defont' )

scdirs.append( 'src/modules/graphic/null' )
scdirs.append( 'src/modules/graphic/opengl' )

scdirs.append( 'src/modules/image/png' )
scdirs.append( 'src/modules/image/png3d' )
scdirs.append( 'src/modules/image/tga' )
scdirs.append( 'src/modules/image/jpeg' )

scdirs.append( 'src/modules/input/console' )
scdirs.append( 'src/modules/input/xsystem' )
scdirs.append( 'src/modules/input/w32input' )
scdirs.append( 'src/modules/input/beos' )
scdirs.append( 'src/modules/input/macos' )
scdirs.append( 'src/modules/input/android' )

scdirs.append( 'src/modules/langpack/delangpack' )

scdirs.append( 'src/modules/model/demodel' )

scdirs.append( 'src/modules/network/basic' )

scdirs.append( 'src/modules/occlusionmesh/deocclusionmesh' )

scdirs.append( 'src/modules/physics/bullet' )

scdirs.append( 'src/modules/rig/derig' )

scdirs.append( 'src/modules/scripting/dragonscript' )
#scdirs.append( 'src/modules/scripting/python' )
#scdirs.append( 'src/modules/scripting/smalltalk' )

scdirs.append( 'src/modules/skin/deskin' )

scdirs.append( 'src/modules/sound/oggvorbis' )

scdirs.append( 'src/modules/synthesizer/desynthesizer' )

scdirs.append( 'src/modules/video/theora' )
scdirs.append( 'src/modules/video/apng' )

scdirs.append( 'src/modules/archive/delga' )

scdirs.append( 'src/modules/combined/fbx' )

# launchers
scdirs.append( 'src/launcher/console' )
scdirs.append( 'src/launcher/gui' )
#scdirs.append( 'src/launcher/android' )
scdirs.append( 'src/launcher/live' )

# tests
scdirs.append( 'src/tests' )

# integrated game development environment
scdirs.append( 'src/deigde/deigde' )

scdirs.append( 'src/deigde/editors/world' )
scdirs.append( 'src/deigde/editors/animator' )
scdirs.append( 'src/deigde/editors/rigeditor' )
scdirs.append( 'src/deigde/editors/font' )
scdirs.append( 'src/deigde/editors/sky' )
scdirs.append( 'src/deigde/editors/skin' )
scdirs.append( 'src/deigde/editors/particleEmitter' )
scdirs.append( 'src/deigde/editors/speechAnimation' )
scdirs.append( 'src/deigde/editors/conversation' )
scdirs.append( 'src/deigde/editors/langpack' )
scdirs.append( 'src/deigde/editors/synthesizer' )
scdirs.append( 'src/deigde/editors/gameDefinition' )
scdirs.append( 'src/deigde/editors/project' )

for scdir in scdirs:
        SConscript( dirs=scdir, variant_dir='{}/build'.format( scdir ),
                duplicate=0, exports='parent_env parent_targets parent_report' )

#tools
SConscript( dirs='src/tools/blender', variant_dir='src/tools/blender/build',
        duplicate=0, exports='parent_env parent_targets parent_report' )

# special stuff
SConscript( dirs='src/launcher/usbdrive', 
variant_dir='src/launcher/usbdrive/build',
        duplicate=0, exports='parent_env parent_targets parent_report' )



# archiving
SConscript( dirs='archive', variant_dir='archive/build',
        duplicate=0, exports='parent_env parent_targets parent_report' )

"""
SConscript( 'src/tools/launcher/android/SConscriptSpecial',
        variant_dir='src/tools/launcher/android/build_apk',
        duplicate=0, exports='parent_env parent_targets parent_report' )
"""

SConscript('archive/SConsHaikuHpkg.py', variant_dir='archive/buildPackage',
        duplicate=0, exports='parent_env parent_targets parent_report')



# installers
SConscript(dirs='installer', variant_dir='installer/build',
        duplicate=0, exports='parent_env parent_targets parent_report')


#params.Save( 'parameters.cache', parent_env )

# add aliases
buildAll = []
installAll = []
installAllRuntime = []
installEngineRuntime = []
installIgdeRuntime = []
doxygenAll = []
clocAll = []
clocReports = []

for key in parent_targets:
        if 'build' in parent_targets[ key ]:
                buildAll.append( parent_targets[ key ][ 'build' ] )
        
        if 'install' in parent_targets[ key ]:
                installAll.append( parent_targets[ key ][ 'install' ] )
                if 'install-runtime' in parent_targets[ key ]:
                        installAllRuntime.append( parent_targets[ key ][ 
'install-runtime' ] )
                else:
                        installAllRuntime.append( parent_targets[ key ][ 
'install' ] )
        
        if 'install-engine-runtime' in parent_targets[key]:
                
installEngineRuntime.append(parent_targets[key]['install-engine-runtime'])
        
        if 'install-igde-runtime' in parent_targets[key]:
                
installIgdeRuntime.append(parent_targets[key]['install-igde-runtime'])
        
        if 'doxygen' in parent_targets[ key ]:
                doxygenAll.append( parent_targets[ key ][ 'doxygen' ] )
        
        if 'cloc' in parent_targets[ key ]:
                clocAll.append( parent_targets[ key ][ 'cloc' ] )
                clocReports.append( parent_targets[ key ][ 'clocReport' ] )

targetBuildAll = parent_env.Alias( 'build', buildAll )
parent_targets[ 'build' ] = {
        'name' : 'Build Everything',
        'target' : targetBuildAll }

targetInstallAll = parent_env.Alias( 'install', installAll )
parent_targets[ 'install' ] = {
        'name' : 'Install Everything',
        'target' : targetInstallAll }

targetInstallAllRuntime = parent_env.Alias( 'install_runtime', 
installAllRuntime )
parent_targets[ 'install_runtime' ] = {
        'name' : 'Install Everything Runtime (no development files)',
        'target' : targetInstallAllRuntime }

targetInstallEngineRuntime = parent_env.Alias('install_engine_runtime', 
installEngineRuntime)
parent_targets['install_engine_runtime'] = {
        'name' : 'Install Engine Runtime (no development files)',
        'target' : targetInstallEngineRuntime }

targetInstallIgdeRuntime = parent_env.Alias('install_igde_runtime', 
installIgdeRuntime)
parent_targets['install_igde_runtime'] = {
        'name' : 'Install IGDE Runtime (no development files)',
        'target' : targetInstallIgdeRuntime }

targetDoxygenAll = parent_env.Alias( 'doxygen', doxygenAll )
parent_targets[ 'doxygen' ] = {
        'name' : 'Doxygen Everything',
        'target' : targetDoxygenAll }

if clocReports:
        targetClocSummary = parent_env.Alias( 'cloc_summary',
                BuildCLOCSummary( parent_env, clocReports, 'clocsummary.csv' ) )
        clocAll.append( targetClocSummary )

targetClocAll = parent_env.Alias( 'cloc', clocAll )
parent_targets[ 'cloc' ] = {
        'name' : 'CLoc Everything',
        'target' : targetClocAll }

# default is building and installing everything
Default( 'install' )



# produce help
Help( BuildHelpText( parent_targets ) )

# print out report
PrintConfigReport( parent_report )
_______________________________________________
freebsd-stable@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to