# 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 net.lib / libnet.a.
"""

Import('env')

env_res = env.Clone()
env_tests = env.Clone()
env = env.Clone()

env.SConscript([
    '$ICU38_DIR/using_icu38.scons',
    '$SDCH_DIR/using_sdch.scons',
    '$ZLIB_DIR/using_zlib.scons',
], {'env':env})

env.Prepend(
    CPPPATH = [
        '$CHROME_SRC_DIR',
    ],
)

# These net files work on *all* platforms; files that don't work
# cross-platform live below.
input_files = [
    'base/address_list.cc',
    'base/auth_cache.cc',
    'base/base64.cc',
    'base/bzip2_filter.cc',
    'base/client_socket_factory.cc',
    'base/client_socket_handle.cc',
    'base/client_socket_pool.cc',
    'base/cookie_monster.cc',
    'base/cookie_policy.cc',
    'base/data_url.cc',
    'base/directory_lister.cc',
    'base/dns_resolution_observer.cc',
    'base/escape.cc',
    'base/ev_root_ca_metadata.cc',
    'base/filter.cc',
    'base/gzip_filter.cc',
    'base/gzip_header.cc',
    'base/host_resolver.cc',
    'base/listen_socket.cc',
    'base/mime_sniffer.cc',
    'base/mime_util.cc',
    'base/net_errors.cc',
    'base/net_module.cc',
    'base/net_util.cc',
    'base/registry_controlled_domain.cc',
    'base/sdch_filter.cc',
    'base/sdch_manager.cc',
    'base/ssl_config_service.cc',
    'base/telnet_server.cc',
    'base/upload_data.cc',
    'base/upload_data_stream.cc',
    'base/x509_certificate.cc',
    'disk_cache/backend_impl.cc',
    'disk_cache/block_files.cc',
    'disk_cache/entry_impl.cc',
    'disk_cache/file_lock.cc',
    'disk_cache/hash.cc',
    'disk_cache/mem_backend_impl.cc',
    'disk_cache/mem_entry_impl.cc',
    'disk_cache/mem_rankings.cc',
    'disk_cache/rankings.cc',
    'disk_cache/stats.cc',
    'disk_cache/stats_histogram.cc',
    'disk_cache/trace.cc',
    'http/cert_status_cache.cc',
    'http/http_auth.cc',
    'http/http_auth_cache.cc',
    'http/http_auth_handler.cc',
    'http/http_auth_handler_basic.cc',
    'http/http_auth_handler_digest.cc',
    'http/http_cache.cc',
    'http/http_chunked_decoder.cc',
    'http/http_network_layer.cc',
    'http/http_network_transaction.cc',
    'http/http_response_headers.cc',
    'http/http_transaction_winhttp.cc',
    'http/http_util.cc',
    'http/http_vary_data.cc',
    'http/winhttp_request_throttle.cc',
    'proxy/proxy_resolver_fixed.cc',
    'proxy/proxy_service.cc',
    'url_request/mime_sniffer_proxy.cc',
    'url_request/url_request.cc',
    'url_request/url_request_about_job.cc',
    'url_request/url_request_error_job.cc',
    'url_request/url_request_file_dir_job.cc',
    'url_request/url_request_file_job.cc',
    'url_request/url_request_filter.cc',
    'url_request/url_request_ftp_job.cc',
    'url_request/url_request_http_job.cc',
    'url_request/url_request_job.cc',
    'url_request/url_request_job_manager.cc',
    'url_request/url_request_job_metrics.cc',
    'url_request/url_request_job_tracker.cc',
    'url_request/url_request_simple_job.cc',
    'url_request/url_request_test_job.cc',
    'url_request/url_request_view_cache_job.cc',
]

if env['PLATFORM'] in ('posix', 'darwin'):
  # Remove files that still need to be ported from the input_files list.
  # TODO(port): delete files from this list as they get ported.
  to_be_ported_files = [
      'base/directory_lister.cc',
      'base/ssl_config_service.cc',
      'http/http_transaction_winhttp.cc',
      'http/winhttp_request_throttle.cc',
      'url_request/url_request_file_dir_job.cc',
      'url_request/url_request_ftp_job.cc',
  ]
  for remove in to_be_ported_files:
      input_files.remove(remove)

if env['PLATFORM'] == 'win32':
  input_files.extend([
      'base/file_stream_win.cc',
      'base/net_util_win.cc',
      'base/platform_mime_util_win.cc',
      'base/ssl_client_socket_win.cc',
      'base/tcp_client_socket_win.cc',
      'base/wininet_util.cc',
      'base/winsock_init.cc',
      'base/x509_certificate_win.cc',
      'disk_cache/cache_util_win.cc',
      'disk_cache/file_win.cc',
      'disk_cache/mapped_file_win.cc',
      'proxy/proxy_resolver_winhttp.cc',
      'url_request/url_request_inet_job.cc',
  ])

if env['PLATFORM'] == 'darwin':
  input_files.extend([
      'base/platform_mime_util_mac.cc',
      'base/ssl_client_socket_mac.cc',
      'base/x509_certificate_mac.cc',
      'proxy/proxy_resolver_mac.cc',
  ])

if env['PLATFORM'] == 'posix':
  input_files.extend([
      'base/nss_memio.c',
      # TODO(tc): gnome-vfs? xdgmime? /etc/mime.types?
      'base/platform_mime_util_linux.cc',
      'base/ssl_client_socket_nss.cc',
      'base/x509_certificate_nss.cc',
  ])

if env['PLATFORM'] in ('darwin', 'posix'):
  input_files.extend([
      'base/file_stream_posix.cc',
      'base/net_util_posix.cc',
      'base/tcp_client_socket_libevent.cc',
      'disk_cache/cache_util_posix.cc',
      'disk_cache/file_posix.cc',
      'disk_cache/mapped_file_posix.cc',
  ])

if env['PLATFORM'] == 'win32':
  # TODO(bradnelson): This step generates file precompiled_net.pch.ib_tag
  #                   possibly only on incredibuild, scons doesn't know this.
  env_p = env.Clone()
  env_p.Append(CCFLAGS='/Ylnet')
  pch, obj = env_p.PCH('precompiled_net.pch', 'build/precompiled_net.cc')
  env['PCH'] = pch
  env['PCHSTOP'] = 'precompiled_net.h'
  env.Append(CCPCHFLAGS = ['/FIprecompiled_net.h'])
  input_files += [obj]

env.ChromeStaticLibrary('net', input_files)