# Copyright 2012 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Ignore GYP generated Visual Studio artifacts (Common across versions).
*.ncb
*.sln
*.suo
*.user

# Ignore GYP generated Visual Studio 2008 artifacts.
*.vcproj

# Ignore GYP generated Visual Studio 2010 artifacts.
# Note: This excludes *.xml, which is rather heavy handed. The
#     generated VS2010 projects each have a project.xml file created
#     (which is unfortunate, as one can easily envision such a file
#     being included in a given project). As, thus far, we haven't
#     had occasion to include a *.xml file, we'll default to needing
#     to jump through a small hoop to remember to add one if the need
#     arises.
*.filters
*.opensdf
*.props
*.rules
*.sdf
*.targets
*.vcxproj
*.xml

# Ignore precompiled header data generated by VS2010 IntelliSense.
# These get placed in 'ipch' folders throughout the project.
*/ipch/

# Ignore compiled Python files.
*.pyc

# Ignore build output directories
/sawbuck/py/etw/build/

# Ignore doxygen output.
/syzygy/doc/

# Ignore directories gclient syncs.
/base/
/build/
/syzygy/internal

/google_apis/
/googleurl/
/skia/
/testing/
/third_party/coverage_analyzer/
/third_party/distorm/files
/third_party/dromaeo/files
/third_party/jemalloc/
/third_party/googleappengine
/third_party/icu/
/third_party/libevent/
/third_party/libjpeg/
/third_party/libxml/
/third_party/modp_b64/
/third_party/nss/
/third_party/platformsdk_win7/
/third_party/protobuf/src/
/third_party/psyco_win32/
/third_party/python_26/
/third_party/sawbuck/py/
/third_party/skia/
/third_party/sqlite/
/third_party/tcmalloc
/third_party/vsssdk72/
/third_party/wtl/
/third_party/zlib/
/tools/

# Ignore SVN metadata.
.svn/

# Ignore Python build artifacts
*.egg-info/
