# 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.

{
  'variables': {
    'chromium_code': 1,
  },
  'includes': [
    'crypto.gypi',
  ],
  'targets': [
    {
      'target_name': 'crypto',
      'type': '<(component)',
      'product_name': 'crcrypto',  # Avoid colliding with OpenSSL's libcrypto
      'dependencies': [
        '../base/base.gyp:base',
        '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
        '../third_party/boringssl/boringssl.gyp:boringssl',
      ],
      'defines': [
        'CRYPTO_IMPLEMENTATION',
      ],
      'conditions': [
        [ 'os_posix == 1 and OS != "mac" and OS != "ios" and OS != "android"', {
          'dependencies': [
            '../build/linux/system.gyp:nss',
          ],
          'export_dependent_settings': [
            '../build/linux/system.gyp:nss',
          ],
          'conditions': [
            [ 'chromeos==1', {
                'sources/': [ ['include', '_chromeos\\.cc$'] ]
              },
            ],
          ],
        }],
        [ 'OS != "mac" and OS != "ios"', {
          'sources!': [
            'apple_keychain.h',
            'mock_apple_keychain.cc',
            'mock_apple_keychain.h',
          ],
        }],
        [ 'os_bsd==1', {
          'link_settings': {
            'libraries': [
              '-L/usr/local/lib -lexecinfo',
              ],
            },
          },
        ],
        [ 'OS == "mac"', {
          'link_settings': {
            'libraries': [
              '$(SDKROOT)/System/Library/Frameworks/Security.framework',
            ],
          },
        }, {  # OS != "mac"
          'sources!': [
            'cssm_init.cc',
            'cssm_init.h',
            'mac_security_services_lock.cc',
            'mac_security_services_lock.h',
          ],
        }],
        [ 'OS != "win"', {
          'sources!': [
            'capi_util.h',
            'capi_util.cc',
          ],
        }],
        [ 'OS == "win"', {
          'msvs_disabled_warnings': [
            4267,  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
          ],
        }],
        [ 'use_nss_certs==0', {
            # Some files are built when NSS is used for the platform certificate library.
            'sources!': [
              'nss_key_util.cc',
              'nss_key_util.h',
              'nss_util.cc',
              'nss_util.h',
              'nss_util_internal.h',
            ],
        },],
      ],
      'sources': [
        '<@(crypto_sources)',
      ],
    },
    {
      'target_name': 'crypto_unittests',
      'type': 'executable',
      'sources': [
        'aead_unittest.cc',
        'curve25519_unittest.cc',
        'ec_private_key_unittest.cc',
        'ec_signature_creator_unittest.cc',
        'encryptor_unittest.cc',
        'hkdf_unittest.cc',
        'hmac_unittest.cc',
        'nss_key_util_unittest.cc',
        'nss_util_unittest.cc',
        'openssl_bio_string_unittest.cc',
        'p224_unittest.cc',
        'p224_spake_unittest.cc',
        'random_unittest.cc',
        'rsa_private_key_unittest.cc',
        'secure_hash_unittest.cc',
        'sha2_unittest.cc',
        'signature_creator_unittest.cc',
        'signature_verifier_unittest.cc',
        'symmetric_key_unittest.cc',
      ],
      'dependencies': [
        'crypto',
        'crypto_test_support',
        '../base/base.gyp:base',
        '../base/base.gyp:run_all_unittests',
        '../base/base.gyp:test_support_base',
        '../testing/gmock.gyp:gmock',
        '../testing/gtest.gyp:gtest',
        '../third_party/boringssl/boringssl.gyp:boringssl',
      ],
      'conditions': [
        [ 'use_nss_certs == 1', {
          'dependencies': [
            '../build/linux/system.gyp:nss',
          ],
        }],
        [ 'use_nss_certs == 0', {
          # Some files are built when NSS is used for the platform certificate library.
          'sources!': [
            'nss_key_util_unittest.cc',
            'nss_util_unittest.cc',
          ],
        }],
        [ 'OS == "win"', {
          # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
          'msvs_disabled_warnings': [4267, ],
        }],
      ],
    },
  ],
  'conditions': [
    ['OS == "win" and target_arch=="ia32"', {
      'targets': [
        {
          'target_name': 'crypto_nacl_win64',
          # We use the native APIs for the helper.
          'type': '<(component)',
          'dependencies': [
            '../base/base.gyp:base_win64',
            '../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations_win64',
            '../third_party/boringssl/boringssl.gyp:boringssl_nacl_win64',
          ],
          'sources': [
            '<@(nacl_win64_sources)',
          ],
          'defines': [
           'CRYPTO_IMPLEMENTATION',
           '<@(nacl_win64_defines)',
          ],
          'configurations': {
            'Common_Base': {
              'msvs_target_platform': 'x64',
            },
          },
        },
      ],
    }],
    ['use_nss_certs==1', {
      'targets': [
        {
          'target_name': 'crypto_test_support',
          'type': 'static_library',
          'dependencies': [
            '../base/base.gyp:base',
            'crypto',
          ],
          'sources': [
            'scoped_test_nss_db.cc',
            'scoped_test_nss_db.h',
            'scoped_test_nss_chromeos_user.cc',
            'scoped_test_nss_chromeos_user.h',
            'scoped_test_system_nss_key_slot.cc',
            'scoped_test_system_nss_key_slot.h',
          ],
          'conditions': [
            ['use_nss_certs==0', {
              'sources!': [
                'scoped_test_nss_db.cc',
                'scoped_test_nss_db.h',
              ],
            }],
            [ 'chromeos==0', {
              'sources!': [
                'scoped_test_nss_chromeos_user.cc',
                'scoped_test_nss_chromeos_user.h',
                'scoped_test_system_nss_key_slot.cc',
                'scoped_test_system_nss_key_slot.h',
              ],
            }],
          ],
        }
      ]}, {  # use_nss_certs==0
      'targets': [
        {
          'target_name': 'crypto_test_support',
          'type': 'none',
          'sources': [],
        }
    ]}],
    ['test_isolation_mode != "noop"', {
      'targets': [
        {
          'target_name': 'crypto_unittests_run',
          'type': 'none',
          'dependencies': [
            'crypto_unittests',
          ],
          'includes': [
            '../build/isolate.gypi',
                      ],
          'sources': [
            'crypto_unittests.isolate',
          ],
        },
      ],
    }],
  ],
}