# Copyright (c) 2012 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.

{
  'conditions': [
    ['OS!="ios" or "<(GENERATOR)"=="ninja"', {
      'targets': [
        {
          'target_name': 'iossim',
          'toolsets': ['host'],
          'type': 'executable',
          'variables': {
            'developer_dir': '<!(xcode-select -print-path)',
            # TODO(lliabraa): Once all builders are on Xcode 6 this variable can
            # be removed and the actions gated by this variable can be run by
            # default (crbug.com/385030).
            'xcode_version': '<!(xcodebuild -version | grep Xcode | awk \'{print $2}\')',
          },
          'conditions': [
            ['xcode_version=="6.0"', {
              'variables': {
                'iphone_sim_path': '<(developer_dir)/../SharedFrameworks',
              },
              'defines': [
                'IOSSIM_USE_XCODE_6',
              ],
              'xcode_settings': {
                # The CoreSimulator.h file generated by class-dump defines a
                # property of type |NSString*| and a setter for the property
                # that takes a parameter of type |id|. This type mismatch causes
                # a compiler warning, so turn off -Werror.
                'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO',
              },
              'actions': [
                {
                  'action_name': 'generate_dvt_foundation_header',
                  'inputs': [
                    '<(iphone_sim_path)/DVTFoundation.framework/Versions/Current/DVTFoundation',
                    '<(PRODUCT_DIR)/class-dump',
                  ],
                  'outputs': [
                    '<(INTERMEDIATE_DIR)/iossim/DVTFoundation.h'
                  ],
                  'action': [
                    # Actions don't provide a way to redirect stdout, so a custom
                    # script is invoked that will execute the first argument and
                    # write the output to the file specified as the second argument.
                    # -I sorts classes, categories, and protocols by inheritance.
                    # -C <regex> only displays classes matching regular expression.
                    './redirect-stdout.sh',
                    '<(PRODUCT_DIR)/class-dump -CDVTStackBacktrace|DVTInvalidation|DVTMixIn <(iphone_sim_path)/DVTFoundation.framework',
                    '<(INTERMEDIATE_DIR)/iossim/DVTFoundation.h',
                  ],
                  'message': 'Generating DVTFoundation.h',
                },
                {
                  'action_name': 'generate_dvt_core_simulator',
                  'inputs': [
                    '<(developer_dir)/Library/PrivateFrameworks/CoreSimulator.framework/Versions/Current/CoreSimulator',
                    '<(PRODUCT_DIR)/class-dump',
                  ],
                  'outputs': [
                    '<(INTERMEDIATE_DIR)/iossim/CoreSimulator.h'
                  ],
                  'action': [
                    # Actions don't provide a way to redirect stdout, so a custom
                    # script is invoked that will execute the first argument and
                    # write the output to the file specified as the second argument.
                    # -I sorts classes, categories, and protocols by inheritance.
                    # -C <regex> only displays classes matching regular expression.
                    './redirect-stdout.sh',
                    '<(PRODUCT_DIR)/class-dump -CSim <(developer_dir)/Library/PrivateFrameworks/CoreSimulator.framework',
                    '<(INTERMEDIATE_DIR)/iossim/CoreSimulator.h',
                  ],
                  'message': 'Generating CoreSimulator.h',
                },
              ],  # actions
            }, {  # else: xcode_version!="6"
              'variables': {
                'iphone_sim_path': '<(developer_dir)/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks',
              },
            }],  # xcode_version
          ],  # conditions
          'dependencies': [
            'third_party/class-dump/class-dump.gyp:class-dump#host',
          ],
          'include_dirs': [
            '<(INTERMEDIATE_DIR)/iossim',
          ],
          'sources': [
            'iossim.mm',
            '<(INTERMEDIATE_DIR)/iossim/iPhoneSimulatorRemoteClient.h',
          ],
          'libraries': [
            '$(SDKROOT)/System/Library/Frameworks/Foundation.framework',
          ],
          'actions': [
            {
              'action_name': 'generate_dvt_iphone_sim_header',
              'inputs': [
                '<(iphone_sim_path)/DVTiPhoneSimulatorRemoteClient.framework/Versions/Current/DVTiPhoneSimulatorRemoteClient',
                '<(PRODUCT_DIR)/class-dump',
              ],
              'outputs': [
                '<(INTERMEDIATE_DIR)/iossim/DVTiPhoneSimulatorRemoteClient.h'
              ],
              'action': [
                # Actions don't provide a way to redirect stdout, so a custom
                # script is invoked that will execute the first argument and
                # write the output to the file specified as the second argument.
                # -I sorts classes, categories, and protocols by inheritance.
                # -C <regex> only displays classes matching regular expression.
                './redirect-stdout.sh',
                '<(PRODUCT_DIR)/class-dump -I -CiPhoneSimulator <(iphone_sim_path)/DVTiPhoneSimulatorRemoteClient.framework',
                '<(INTERMEDIATE_DIR)/iossim/DVTiPhoneSimulatorRemoteClient.h',
              ],
              'message': 'Generating DVTiPhoneSimulatorRemoteClient.h',
            },
          ],  # actions
          'xcode_settings': {
            'ARCHS': ['x86_64'],
            'WARNING_CFLAGS': [
              '-Wno-objc-property-no-attribute',
            ],
          },
        },
      ],
    }, {  # else, OS=="ios" and "<(GENERATOR)"!="ninja"
      'variables': {
        'ninja_output_dir': 'ninja-iossim',
        'ninja_product_dir':
          '$(SYMROOT)/<(ninja_output_dir)/<(CONFIGURATION_NAME)',
      },
      'targets': [
        {
          'target_name': 'iossim',
          'type': 'none',
          'variables': {
            # Gyp to rerun
            're_run_targets': [
               'testing/iossim/iossim.gyp',
            ],
          },
          'includes': ['../../build/ios/mac_build.gypi'],
          'actions': [
            {
              'action_name': 'compile iossim',
              'inputs': [],
              'outputs': [],
              'action': [
                '<@(ninja_cmd)',
                'iossim',
              ],
              'message': 'Generating the iossim executable',
            },
          ],
        },
      ],
    }],
  ],
}