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

// Precompiled header for Chromium project on Windows, not used by
// other build configurations. Using precompiled headers speeds the
// build up significantly, around 1/4th on VS 2010 on an HP Z600 with 12
// GB of memory.
//
// Numeric comments beside includes are the number of times they were
// included under src/chrome/browser on 2011/8/20, which was used as a
// baseline for deciding what to include in the PCH. Includes without
// a numeric comment are generally included at least 5 times. It may
// be possible to tweak the speed of the build by commenting out or
// removing some of the less frequently used headers.

#if defined(BUILD_PRECOMPILE_H_)
#error You shouldn't include the precompiled header file more than once.
#endif

#define BUILD_PRECOMPILE_H_

// The Windows header needs to come before almost all the other
// Windows-specific headers.
#include <Windows.h>
#include <dwmapi.h>
#include <shellapi.h>
#include <wincrypt.h>  // 4
#include <wtypes.h>  // 2

// Defines in atlbase.h cause conflicts; if we could figure out how
// this family of headers can be included in the PCH, it might speed
// up the build as several of them are used frequently.
/*
#include <atlbase.h>
#include <atlapp.h>
#include <atlcom.h>
#include <atlcrack.h>  // 2
#include <atlctrls.h>  // 2
#include <atlmisc.h>  // 2
#include <atlsafe.h>  // 1
#include <atltheme.h>  // 1
#include <atlwin.h>  // 2
*/

// Objbase.h and other files that rely on it bring in [ #define
// interface struct ] which can cause problems in a multi-platform
// build like Chrome's. #undef-ing it does not work as there are
// currently 118 targets that break if we do this, so leaving out of
// the precompiled header for now.
//#include <commctrl.h>  // 2
//#include <commdlg.h>  // 3
//#include <cryptuiapi.h>  // 2
//#include <Objbase.h>  // 2
//#include <objidl.h>  // 1
//#include <ole2.h>  // 1
//#include <oleacc.h>  // 2
//#include <oleauto.h>  // 1
//#include <oleidl.h>  // 1
//#include <propkey.h>  // 2
//#include <propvarutil.h>  // 2
//#include <pstore.h>  // 2
//#include <shlguid.h>  // 1
//#include <shlwapi.h>  // 1
//#include <shobjidl.h>  // 4
//#include <urlhist.h>  // 2

// Caused other conflicts in addition to the 'interface' issue above.
// #include <shlobj.h>

#include <errno.h>
#include <fcntl.h>
#include <limits.h>  // 4
#include <math.h>
#include <memory.h>  // 1
#include <signal.h>
#include <stdarg.h>  // 1
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>  // 4

#include <algorithm>
#include <bitset>  // 3
#include <cmath>
#include <cstddef>
#include <cstdio>  // 3
#include <cstdlib>  // 2
#include <cstring>
#include <deque>
#include <fstream>  // 3
#include <functional>
#include <iomanip>  // 2
#include <iosfwd>  // 2
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <numeric>  // 2
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

#include "intsafe_workaround.h"
