# Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

The standalone Dart executable uses the NSS library from Mozilla to
support secure networking connections (SSL and TLS).  It uses a copy
of the library from the Chromium repository, that includes patches
added by Chromium.  We pin this to a fixed revision, using the
nss_revision variable in all the DEPS files in the deps directory of
the Dart repository.

This revision should be updated when new security fixes are added to
NSS, or every few months.  The .gyp files in this directory are copies
of the .gyp files in the Chromium copy of NSS, with changes made to
account for the configurations and directory structure of the Dart
repository.  Differences between the Chromium versions and the Dart
versions should be annotated with "# Added by Dart'.

All the files should have a comment saying where the original file is
in the Chromium repository. To update these files, look at the diff
between the two revisions in Chromium, and apply the changes manually,
with any needed modifications, to the Dart copies.  Our aim is to keep
the difference between the Chromium and Dart copies as small as
possible.

The nss_memio.cc and nss_memio.h files are also taken from Chromium,
and should be updated at the same time.  The os_Linux.s file is new,
and should not need changing.

The file nss.gyp includes support for disabling compilation of NSS
using the variable dart_io_support, when building configurations that
don't use it.  NSS compilation is disabled when building Dartium,
because Chromium includes its own copy, and the build process would
get confused.
