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

# This file is meant to be included to set clang-specific compiler flags.
# To use this the following variable can be defined:
#   clang_warning_flags:       list: Compiler flags to pass to clang.
#   clang_warning_flags_unset: list: Compiler flags to not pass to clang.
#
# Only use this in third-party code. In chromium_code, fix your code to not
# warn instead!
#
# Note that the gypi file is included in target_defaults, so it does not need
# to be explicitly included.
#
# Warning flags set by this will be used on all platforms. If you want to set
# warning flags on only some platforms, you have to do so manually.
#
# To use this, create a gyp target with the following form:
# {
#   'target_name': 'my_target',
#   'variables': {
#     'clang_warning_flags': ['-Wno-awesome-warning'],
#     'clang_warning_flags_unset': ['-Wpreviously-set-flag'],
#   }
# }

{
  'variables': {
    'clang_warning_flags_unset%': [],  # Provide a default value.
  },
  'conditions': [
    ['clang==1', {
      # This uses >@ instead of @< to also see clang_warning_flags set in
      # targets directly, not just the clang_warning_flags in target_defaults.
      'cflags': [ '>@(clang_warning_flags)' ],
      'cflags!': [ '>@(clang_warning_flags_unset)' ],
      'xcode_settings': {
        'WARNING_CFLAGS': ['>@(clang_warning_flags)'],
        'WARNING_CFLAGS!': ['>@(clang_warning_flags_unset)'],
      },
      'msvs_settings': {
        'VCCLCompilerTool': {
          'AdditionalOptions': [ '>@(clang_warning_flags)' ],
          'AdditionalOptions!': [ '>@(clang_warning_flags_unset)' ],
        },
      },
    }],
    ['clang==0 and host_clang==1', {
      'target_conditions': [
        ['_toolset=="host"', {
          'cflags': [ '>@(clang_warning_flags)' ],
          'cflags!': [ '>@(clang_warning_flags_unset)' ],
        }],
      ],
    }],
  ],
}