diff options
| author | Mark Palange (Mani) <palange@lindenlab.com> | 2009-09-15 12:32:22 -0700 | 
|---|---|---|
| committer | Mark Palange (Mani) <palange@lindenlab.com> | 2009-09-15 12:32:22 -0700 | 
| commit | 93869a8ef23bd07351309ed86e10a0acd66ae973 (patch) | |
| tree | 894d8ba14bf679645ff9a5681feb511291fe193c /indra/lib | |
| parent | 03a23fd2449c72391055311f7d6563985543d34f (diff) | |
Fixed up CopyWinLibs.cmake post moap/viewer-2.0.0-3 merge.
Added CRT assembly check to viewer_manifest.py.
twiddled test_win32_manifest.py for ease of use.
Diffstat (limited to 'indra/lib')
| -rw-r--r-- | indra/lib/python/indra/util/test_win32_manifest.py | 126 | 
1 files changed, 126 insertions, 0 deletions
| diff --git a/indra/lib/python/indra/util/test_win32_manifest.py b/indra/lib/python/indra/util/test_win32_manifest.py new file mode 100644 index 0000000000..7aa7a10928 --- /dev/null +++ b/indra/lib/python/indra/util/test_win32_manifest.py @@ -0,0 +1,126 @@ +# @file test_win32_manifest.py +# @brief Test an assembly binding version and uniqueness in a windows dll or exe.   +# +# $LicenseInfo:firstyear=2009&license=viewergpl$ +#  +# Copyright (c) 2009, Linden Research, Inc. +#  +# Second Life Viewer Source Code +# The source code in this file ("Source Code") is provided by Linden Lab +# to you under the terms of the GNU General Public License, version 2.0 +# ("GPL"), unless you have obtained a separate licensing agreement +# ("Other License"), formally executed by you and Linden Lab.  Terms of +# the GPL can be found in doc/GPL-license.txt in this distribution, or +# online at http://secondlifegrid.net/programs/open_source/licensing/gplv2 +#  +# There are special exceptions to the terms and conditions of the GPL as +# it is applied to this Source Code. View the full text of the exception +# in the file doc/FLOSS-exception.txt in this software distribution, or +# online at +# http://secondlifegrid.net/programs/open_source/licensing/flossexception +#  +# By copying, modifying or distributing this software, you acknowledge +# that you have read and understood your obligations described above, +# and agree to abide by those obligations. +#  +# ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO +# WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, +# COMPLETENESS OR PERFORMANCE. +# $/LicenseInfo$ + +import sys, os +import tempfile +from xml.dom.minidom import parse + +def get_HKLM_registry_value(key_str, value_str): +    import _winreg +    reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE) +    key = _winreg.OpenKey(reg, key_str) +    value = _winreg.QueryValueEx(key, value_str)[0] +    print 'Found: %s' % value +    return value +         +def find_vc_dir(): +    supported_versions = (r'8.0', r'9.0') +    value_str = (r'ProductDir') +     +    for version in supported_versions:        +        key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VC' % +                   version) +        try: +            return get_HKLM_registry_value(key_str, value_str)            +        except WindowsError, err: +            x64_key_str = (r'SOFTWARE\Wow6432Node\Microsoft\VisualStudio\%s\Setup\VS' % +                       version)        +            try: +                return get_HKLM_registry_value(x64_key_str, value_str) +            except: +                print >> sys.stderr, "Didn't find MS VC version %s " % version +         +    raise + +def find_mt_path(): +    vc_dir = find_vc_dir() +    mt_path = '\"%sbin\\mt.exe\"' % vc_dir +    return mt_path +     +def test_assembly_binding(src_filename, assembly_name, assembly_ver): +    (tmp_file_fd, tmp_file_name) = tempfile.mkstemp(suffix='.xml') +    tmp_file = os.fdopen(tmp_file_fd) +    tmp_file.close() + +    mt_path = find_mt_path() +    resource_id = "" +    if os.path.splitext(src_filename)[1].lower() == ".dll": +       resource_id = ";#2" +    system_call = '%s -nologo -inputresource:%s%s -out:%s' % (mt_path, src_filename, resource_id, tmp_file_name) +    print "Executing: %s" % system_call +    os.system(system_call) + +    manifest_dom = parse(tmp_file_name) +    nodes = manifest_dom.getElementsByTagName('assemblyIdentity') + +    versions = list() +    for node in nodes: +        if node.getAttribute('name') == assembly_name: +            versions.append(node.getAttribute('version')) + +    if len(versions) == 0: +        print "No manifest found for %s" % src_filename +         +    elif len(versions) > 1: +        print "Multiple bindings to %s found:" % assembly_name +        print versions +        print  +        raise Exception("Multiple bindings") + +    elif versions[0] != assembly_ver: +        print "Unexpected version found for %s:" % assembly_name +        print "Wanted %s, found %s" % (assembly_ver, versions[0]) +        print +        raise Exception("Unexpected version") +             +    os.remove(tmp_file_name) +   + +if __name__ == '__main__': + +    print "Running test_win32_manifest.py..." +    print +     +    usage = 'test_win32_manfest <srcFileName> <assemblyName> <assemblyVersion>' + +    try: +        src_filename = sys.argv[1] +        assembly_name = sys.argv[2] +        assembly_ver = sys.argv[3] +    except: +        print "Usage:" +        print usage +        print +        raise +     +    test_assembly_binding(src_filename, assembly_name, assembly_ver) +     + +     | 
