I finished moving the last bit of string stuff in preparation for separating ICU from base. All ICU and related utilities have moved to src/base/i18n. The rest of base should not depend on base/i18n because it will be a separate library, but base/i18n can depend on the rest of base.
The core UTF8/UTF16/Wide conversion functions have been added to a new file: base/utf_string_conversions.h. This file doesn't use ICU, but rather a few ICU functions and macros I pulled out into base/third_party/icu. Currently, base/string_util.h includes base/utf_string_conversions.h and is likely to stay this way since nobody wants to change all of the files in the project. But if you write a new file or are updating the includes for an existing one, think about whether you need all of string_util or just the UTF conversion functions. The UTF conversion functions will almost never change, so you won't have to recompile your file when Bill S. Preston, Esq. adds SeparateStringIntoBitsAndInterpretEveryThirdPartAsAnInt64() to string_util. base/sys_string_conversions no longer includes SysUTF8ToWide and friends since there's no longer any point for those. sys_string_conversions contains only functions for converting to the system's native multibyte encoding (which you'll almost never need). The more advanced conversion functions that use ICU are in base/i18n/icu_string_conversions.h. You will have to include this file explicitly if you need them. This is WideToCodepage and friends for general character set conversion. It's rare to need this since you should be using Unicode. The final part I haven't done is make a separate base_i18n project that clients wanting ICU and related stuff will link to. This will replace base_gfx which has no purpose since I moved all the Skia and libpng/jpeg dependencies to app. This will allow clients to decide if they really need internationalization support. ============================= I'm adding something, where does it go? First, please consider putting it inside your component's directory. When everybody adds all their crap to base, it ends up that nobody can find anything and the build is more interdependent. If you're not actually sharing anything between toplevel projects, it shouldn't be in base. Second, consider putting it in src/app. App is "the stuff you need to build a Windowed application," whereas src/base is "the stuff you need to build *any* application." Think of some random daemon or library on ChromeOS. It should link to base but not app. Is your stuff useful to every client executable, or just "applications" dealing with the windowing system, clipboard, drag & drop, etc.? Note also that WebKit/glue and test_shell can now depend on app, which makes it easy to not put stuff in base now. It's assumed anything in app can depend on ICU (base/i18n) since real applications will be internationalized. Put it in base if it really should be linked in with every Google client application, the crash reporter app, all ChromeOS daemons and login manager, etc. This shouldn't be that much stuff! If it needs ICU, put it in base/i18n. If it doesn't, put it in base or the appropriate subdirectory. Brett --~--~---------~--~----~------------~-------~--~----~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~----------~----~----~----~------~----~------~--~---