#!/usr/bin/env python

# Copyright (c) 2014 Google Inc. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""
Test VCCLCompilerTool EnableEnhancedInstructionSet setting.
"""

import TestGyp

import os
import sys

if sys.platform == 'win32':
  test = TestGyp.TestGyp()

  CHDIR = 'compiler-flags'
  test.run_gyp('enable-enhanced-instruction-set.gyp', chdir=CHDIR)

  test.build('enable-enhanced-instruction-set.gyp', test.ALL, chdir=CHDIR)

  test.run_built_executable('sse_extensions', chdir=CHDIR,
                            stdout='/arch:SSE\n')
  test.run_built_executable('sse2_extensions', chdir=CHDIR,
                            stdout='/arch:SSE2\n')

  # /arch:AVX introduced in VS2010, but MSBuild support lagged until 2012.
  if os.path.exists(test.built_file_path('avx_extensions')):
    test.run_built_executable('no_extensions', chdir=CHDIR,
                              stdout='/arch:AVX\n')

  # /arch:IA32 introduced in VS2012.
  if os.path.exists(test.built_file_path('no_extensions')):
    test.run_built_executable('no_extensions', chdir=CHDIR,
                              stdout='/arch:IA32\n')

  test.pass_test()
