172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca"""dxsdk
272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
372aed16aee3149fa1740641435a528ce1510dabbJosé FonsecaTool-specific initialization for Microsoft DirectX SDK
472aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
572aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca"""
672aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
772aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca#
872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# Copyright (c) 2009 VMware, Inc.
972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca#
1072aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# Permission is hereby granted, free of charge, to any person obtaining
1172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# a copy of this software and associated documentation files (the
1272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# "Software"), to deal in the Software without restriction, including
1372aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# without limitation the rights to use, copy, modify, merge, publish,
1472aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# distribute, sublicense, and/or sell copies of the Software, and to
1572aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# permit persons to whom the Software is furnished to do so, subject to
1672aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# the following conditions:
1772aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca#
1872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# The above copyright notice and this permission notice shall be included
1972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# in all copies or substantial portions of the Software.
2072aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca#
2172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
2272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
2372aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
2472aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
2572aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
2672aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2772aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca#
2972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
3072aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecaimport os
3172aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecaimport os.path
3272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
3372aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecaimport SCons.Errors
3472aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecaimport SCons.Util
3572aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
3672aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
3772aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecadef get_dxsdk_root(env):
3872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    try:
3972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca        return os.environ['DXSDK_DIR']
4072aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    except KeyError:
4172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca        return None
4272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
439a5ee124347d3f75be2e957142143338dd96abe3José Fonsecadef generate(env):
4472aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    dxsdk_root = get_dxsdk_root(env)
4572aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    if dxsdk_root is None:
469a5ee124347d3f75be2e957142143338dd96abe3José Fonseca        # DirectX SDK not found
479a5ee124347d3f75be2e957142143338dd96abe3José Fonseca        return
4872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
4972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    if env['machine'] in ('generic', 'x86'):
5072aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca        target_cpu = 'x86'
5172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    elif env['machine'] == 'x86_64':
5272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca        target_cpu = 'x64'
5372aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    else:
5472aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca        raise SCons.Errors.InternalError, "Unsupported target machine"
55a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca
56a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    include_dir = os.path.join(dxsdk_root, 'Include')
57a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    lib_dir = os.path.join(dxsdk_root, 'Lib', target_cpu)
5872aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
5972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    env.Append(CPPDEFINES = [('HAVE_DXSDK', '1')])
60a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca
61a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    gcc = 'gcc' in os.path.basename(env['CC']).split('-')
62a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    if gcc:
63a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca        # Make GCC more forgiving towards Microsoft's headers
64a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca        env.Prepend(CPPFLAGS = ['-isystem', include_dir])
65a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    else:
66a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca        env.Prepend(CPPPATH = [include_dir])
67a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca
68a4a4553a80e62f0d339d18a91c0ce699b0e196d4José Fonseca    env.Prepend(LIBPATH = [lib_dir])
6972aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
7072aed16aee3149fa1740641435a528ce1510dabbJosé Fonsecadef exists(env):
7172aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca    return get_dxsdk_root(env) is not None
7272aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca
7372aed16aee3149fa1740641435a528ce1510dabbJosé Fonseca# vim:set ts=4 sw=4 et:
74