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

__doc__ = """
Configuration for building the net_unittests{,.exe} executable.
"""

Import('env')

env = env.Clone()

env.ApplySConscript([
    '$BASE_DIR/using_base.scons',
    '$BZIP2_DIR/using_bzip2.scons',
    '$CHROME_SRC_DIR/build/using_googleurl.scons',
    '$GTEST_DIR/../using_gtest.scons',
    '$ICU38_DIR/using_icu38.scons',
    '$MODP_B64_DIR/using_modp_b64.scons',
    '$NET_DIR/using_net.scons',
    '$SDCH_DIR/using_sdch.scons',
    '$ZLIB_DIR/using_zlib.scons',
])

if env.Bit('posix'):
  env.SConscript([
      '$LIBEVENT_DIR/using_libevent.scons',
  ], {'env':env})

if env.Bit('windows'):
  env.Prepend(
      CCFLAGS = [
          '/WX',
      ],
  )

input_files = ChromeFileList([
  # TODO(sgk):  violate standard indentation so we don't have to
  # reindent too much when we remove the explicit MSVSFilter() calls
  # in favor of generating the hierarchy to reflect the file system.
  MSVSFilter('support', [
    # Built from build/precomiled_net.cc, net_lib.scons.
    'precompiled_net$OBJSUFFIX',
    'build/precompiled_net.h',
    'base/run_all_unittests.cc',
  ]),
  MSVSFilter('tests', [
   MSVSFilter('disk_cache', [
    'disk_cache/addr_unittest.cc',
    'disk_cache/backend_unittest.cc',
    'disk_cache/block_files_unittest.cc',
    'disk_cache/disk_cache_test_base.cc',
    'disk_cache/disk_cache_test_base.h',
    'disk_cache/disk_cache_test_util.cc',
    'disk_cache/disk_cache_test_util.h',
    'disk_cache/entry_unittest.cc',
    'disk_cache/mapped_file_unittest.cc',
    'disk_cache/storage_block_unittest.cc',
    ]),
   MSVSFilter('http', [
    'http/http_auth_cache_unittest.cc',
    'http/http_auth_handler_basic_unittest.cc',
    'http/http_auth_handler_digest_unittest.cc',
    'http/http_auth_unittest.cc',
    'http/http_cache_unittest.cc',
    'http/http_chunked_decoder_unittest.cc',
    'http/http_network_layer_unittest.cc',
    'http/http_network_transaction_unittest.cc',
    'http/http_response_headers_unittest.cc',
    'http/http_transaction_unittest.cc',
    'http/http_transaction_unittest.h',
    'http/http_util_unittest.cc',
    'http/http_vary_data_unittest.cc',
    ]),
   MSVSFilter('base', [
    'base/base64_unittest.cc',
    'base/bzip2_filter_unittest.cc',
    'base/client_socket_pool_unittest.cc',
    'base/tcp_pinger_unittest.cc',
    'base/cookie_monster_unittest.cc',
    'base/cookie_policy_unittest.cc',
    'base/data_url_unittest.cc',
    'base/directory_lister_unittest.cc',
    'base/escape_unittest.cc',
    'base/file_stream_unittest.cc',
    'base/filter_unittest.cc',
    'base/gzip_filter_unittest.cc',
    'base/host_resolver_unittest.cc',
    'base/listen_socket_unittest.cc',
    'base/listen_socket_unittest.h',
    'base/mime_sniffer_unittest.cc',
    'base/mime_util_unittest.cc',
    'base/net_util_unittest.cc',
    'base/registry_controlled_domain_unittest.cc',
    'base/sdch_filter_unittest.cc',
    'base/ssl_client_socket_unittest.cc',
    'base/ssl_config_service_unittest.cc',
    'base/tcp_client_socket_unittest.cc',
    'base/telnet_server_unittest.cc',
    'base/test_completion_callback_unittest.cc',
    'base/wininet_util_unittest.cc',
    'base/x509_certificate_unittest.cc',
    ]),
   MSVSFilter('ftp', [
    'ftp/ftp_auth_cache_unittest.cc',
    ]),
   MSVSFilter('url_request', [
    'url_request/url_request_unittest.cc',
    'url_request/url_request_unittest.h',
    ]),
   MSVSFilter('proxy', [
    'proxy/proxy_script_fetcher_unittest.cc',
    'proxy/proxy_server_unittest.cc',
    'proxy/proxy_service_unittest.cc',
    ]),
  ]),
])

if not env.Bit('windows'):
  input_files.Remove(
      'base/wininet_util_unittest.cc',
      'precompiled_net$OBJSUFFIX',
  )

if env.Bit('linux'):
  # TODO(port):
  input_files.Remove(
      'base/sdch_filter_unittest.cc',
      'base/ssl_config_service_unittest.cc',
  )

if env.Bit('mac'):
  input_files.Extend([
      '../base/platform_test_mac$OBJSUFFIX',
  ])

  # TODO(port):
  input_files.Remove(
      'base/x509_certificate_unittest.cc',
      'base/sdch_filter_unittest.cc',
      'base/ssl_config_service_unittest.cc',
      'url_request/url_request_unittest.cc',
  )

net_unittests = env.ChromeTestProgram('net_unittests', input_files)

p = env.ChromeMSVSProject('$NET_DIR/build/net_unittests.vcproj',
                          dest='$CHROME_SRC_DIR/net/build/net_unittests.vcproj',
                          guid='{E99DA267-BE90-4F45-88A1-6919DB2C7567}',
                          keyword='Win32Proj',
                          dependencies = [
                              '$BASE_DIR/build/base.vcproj',
                              '$BZIP2_DIR/bzip2.vcproj',
                              '$NET_DIR/build/net.vcproj',
                              '$MODP_B64_DIR/modp_b64.vcproj',
                              '$ZLIB_DIR/zlib.vcproj',
                              '$ICU38_DIR/build/icu.vcproj',
                              '$TESTING_DIR/gtest.vcproj',
                              '$GOOGLEURL_DIR/build/googleurl.vcproj',
                              '$SDCH_DIR/sdch.vcproj',
                          ],
                          # TODO: restore when we can derive all info,
                          # on all platforms, from the windows build targets.
                          #buildtargets=net_unittests,
                          files=input_files,
                          ConfigurationType='1')

p.AddConfig('Debug|Win32',
            InheritedPropertySheets=[
                '$(SolutionDir)../build/common.vsprops',
                '$(SolutionDir)../build/debug.vsprops',
                '$(SolutionDir)../testing/using_gtest.vsprops',
            ],
            tools=[
                'VCPreBuildEventTool',
                'VCCustomBuildTool',
                'VCXMLDataGeneratorTool',
                'VCWebServiceProxyGeneratorTool',
                'VCMIDLTool',
                MSVSTool('VCCLCompilerTool',
                         PrecompiledHeaderThrough='precompiled_net.h',
                         ForcedIncludeFiles='precompiled_net.h',
                         PreprocessorDefinitions='UNIT_TEST',
                         UsePrecompiledHeader='2'),
                'VCManagedResourceCompilerTool',
                'VCResourceCompilerTool',
                'VCPreLinkEventTool',
                'VCLinkerTool',
                'VCALinkTool',
                'VCManifestTool',
                'VCXDCMakeTool',
                'VCBscMakeTool',
                'VCFxCopTool',
                'VCAppVerifierTool',
                'VCWebDeploymentTool',
                'VCPostBuildEventTool',
            ])

p.AddConfig('Release|Win32',
            InheritedPropertySheets=[
                '$(SolutionDir)../build/common.vsprops',
                '$(SolutionDir)../build/release.vsprops',
                '$(SolutionDir)../testing/using_gtest.vsprops',
            ],
            tools=[
                'VCPreBuildEventTool',
                'VCCustomBuildTool',
                'VCXMLDataGeneratorTool',
                'VCWebServiceProxyGeneratorTool',
                'VCMIDLTool',
                MSVSTool('VCCLCompilerTool',
                         PreprocessorDefinitions='UNIT_TEST'),
                'VCManagedResourceCompilerTool',
                'VCResourceCompilerTool',
                'VCPreLinkEventTool',
                'VCLinkerTool',
                'VCALinkTool',
                'VCManifestTool',
                'VCXDCMakeTool',
                'VCBscMakeTool',
                'VCFxCopTool',
                'VCAppVerifierTool',
                'VCWebDeploymentTool',
                'VCPostBuildEventTool',
            ])

# TODO: Remove when we can derive this information
p.AddFileConfig('build/precompiled_net.cc',
                'Debug|Win32',
                tools=[
                    MSVSTool('VCCLCompilerTool',
                             UsePrecompiledHeader='1'),
                ])

# TODO: Remove when we can derive this information
p.AddFileConfig('build/precompiled_net.cc',
                'Release|Win32',
                ExcludedFromBuild='true',
                tools=[
                    'VCCLCompilerTool',
                ])