#!/usr/bin/env python
#
# MIT License
#
# Copyright The SCons Foundation
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

"""
Test the Variables help messages.
"""

import os

import TestSCons

str_True = str(True)
str_False = str(False)

test = TestSCons.TestSCons()

workpath = test.workpath()
qtpath = os.path.join(workpath, 'qt')
libpath = os.path.join(qtpath, 'lib')
libdirvar = os.path.join('$qtdir', 'lib')

test.subdir(qtpath)
test.subdir(libpath)

test.write('SConstruct', """
from SCons.Variables import (
    BoolVariable,
    EnumVariable,
    ListVariable,
    PackageVariable,
    PathVariable,
)

list_of_libs = Split('x11 gl qt ical')
qtdir = r'%(qtpath)s'

opts = Variables(args=ARGUMENTS)
opts.AddVariables(
    BoolVariable('warnings', 'compilation with -Wall and similiar', True),
    BoolVariable('profile', 'create profiling informations', False),
    EnumVariable(
        'debug',
        'debug output and symbols',
        'no',
        allowed_values=('yes', 'no', 'full'),
        map={},
        ignorecase=0,
    ),  # case sensitive
    EnumVariable(
        'guilib',
        'gui lib to use',
        'gtk',
        allowed_values=('motif', 'gtk', 'kde'),
        map={},
        ignorecase=1,
    ),  # case insensitive
    EnumVariable(
        'some',
        'some option',
        'xaver',
        allowed_values=('xaver', 'eins'),
        map={},
        ignorecase=2,
    ),  # make lowercase
    ListVariable(
        'shared', 'libraries to build as shared libraries', 'all', names=list_of_libs
    ),
    PackageVariable('x11', 'use X11 installed here (yes = search some places)', 'yes'),
    PathVariable('qtdir', 'where the root of Qt is installed', qtdir),
    PathVariable('qt_libraries', 'where the Qt library is installed', r'%(libdirvar)s'),
)

_ = DefaultEnvironment(tools=[])
env = Environment(variables=opts, tools=[])
Help(opts.GenerateHelpText(env))

print(env['warnings'])
print(env['profile'])

Default(env.Alias('dummy', None))
""" % locals())

test.run(arguments='-h',
         stdout = """\
scons: Reading SConscript files ...
%(str_True)s
%(str_False)s
scons: done reading SConscript files.

warnings: compilation with -Wall and similiar (yes|no)
    default: True
    actual: %(str_True)s

profile: create profiling informations (yes|no)
    default: False
    actual: %(str_False)s

debug: debug output and symbols (yes|no|full)
    default: no
    actual: no

guilib: gui lib to use (motif|gtk|kde)
    default: gtk
    actual: gtk

some: some option (xaver|eins)
    default: xaver
    actual: xaver

shared: libraries to build as shared libraries
    (all|none|comma-separated list of names)
    allowed names: x11 gl qt ical
    default: all
    actual: x11 gl qt ical

x11: use X11 installed here (yes = search some places)
    ( yes | no | /path/to/x11 )
    default: yes
    actual: %(str_True)s

qtdir: where the root of Qt is installed ( /path/to/qtdir )
    default: %(qtpath)s
    actual: %(qtpath)s

qt_libraries: where the Qt library is installed ( /path/to/qt_libraries )
    default: %(libdirvar)s
    actual: %(libpath)s

Use scons -H for help about SCons built-in command-line options.
""" % locals())

test.pass_test()

# Local Variables:
# tab-width:4
# indent-tabs-mode:nil
# End:
# vim: set expandtab tabstop=4 shiftwidth=4:
