Opened 14 years ago

Closed 14 years ago

#2111 closed Feature Requests (wontfix)

boost headers always include too many platform headers

Reported by: Alessio Owned by: John Maddock
Milestone: Boost 1.36.0 Component: config
Version: Boost 1.35.0 Severity: Problem
Keywords: Cc:

Description

#including boost/config.hpp on MSVC causes the inclusion of a large number of platform header files (see below for a boost 1.32 example for shared_ptr.hpp). This *seriously* degrades compilation times. For large systems with >1MLOC the degradation is just impratical and puts off big projects from using boost completely.

boost/config.h should be split into smaller function-specific header files (e.g. strings, streams, threads, etc.) and every boost header file should include only the functions it needs.

Note: including file: c:\Boost\include\boost-1_32\boost/shared_ptr.hpp 
Note: including file:  c:\Boost\include\boost-1_32\boost/config.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/user.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/select_compiler_config.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/compiler/visualc.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/select_stdlib_config.hpp 
Note: including file:    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\utility 
Note: including file:     C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\iosfwd 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstdio 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\yvals.h 
Note: including file:        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\use_ansi.h 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\stdio.h 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstring 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\string.h 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cwchar 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\wchar.h 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xstddef 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstddef 
Note: including file:        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\stddef.h 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/stdlib/dinkumware.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/select_platform_config.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/platform/win32.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config/suffix.hpp 
Note: including file:    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\limits.h 
Note: including file:  c:\Boost\include\boost-1_32\boost/assert.hpp 
Note: including file:   C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\assert.h 
Note: including file:  c:\Boost\include\boost-1_32\boost/checked_delete.hpp 
Note: including file:  c:\Boost\include\boost-1_32\boost/throw_exception.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config.hpp 
Note: including file:  c:\Boost\include\boost-1_32\boost/detail/shared_count.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/config.hpp 
Note: including file:   c:\Boost\include\boost-1_32\boost/detail/lightweight_mutex.hpp 
Note: including file:    c:\Boost\include\boost-1_32\boost/config.hpp 
Note: including file:    c:\Boost\include\boost-1_32\boost/detail/lwm_win32.hpp 
Note: including file:   C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\memory 
Note: including file:    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\iterator 
Note: including file:     C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\climits 
Note: including file:    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xmemory 
Note: including file:     C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\cstdlib 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\stdlib.h 
Note: including file:     C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\new 
Note: including file:      C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\exception 
Note: including file:       C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\eh.h 
Note: including file:   C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\functional 
Note: including file:   C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo 
Note: including file:    C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\typeinfo.h 
Note: including file:     C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\stdexcpt.h 
Note: including file:  c:\Boost\include\boost-1_32\boost/detail/workaround.hpp 
Note: including file:  C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm

Change History (4)

comment:1 by Marshall Clow, 14 years ago

Component: NoneBuilding Boost

comment:2 by Marshall Clow, 14 years ago

Severity: ShowstopperProblem
Type: BugsFeature Requests

comment:3 by Vladimir Prus, 14 years ago

Component: Building Boostconfig
Owner: set to John Maddock

comment:4 by John Maddock, 14 years ago

Resolution: wontfix
Status: newclosed

The current Boost.Config has been changed to include <cstddef> rather than <utility> which cuts down the platform #includes somewhat.

Other than that, I don't see how we can streamline this: the std lib and platform feature detection code has to include a certain number of platform headers to work. I also note that the biggest pull-in of headers in your example comes from <memory>, are you really suggesting that shared_ptr could live without that #include?

Sorry, but I don't see this as a bug.

Note: See TracTickets for help on using tickets.