(const char *) nsCAutoString(unixToolkitName), (const char *) nsCAutoString(unixWidgetDllName), (const char *) nsCAutoString(unixGfxDllName));
(const char *) unixToolkitName, (const char *) unixWidgetDllName, (const char *) unixGfxDllName);
NS_SetupRegistry(){#if defined(XP_UNIX) && !defined(MOZ_MONOLITHIC_TOOLKIT)  // On unix, the widget and gfx toolkit are not linked into the app.  //  // Instead, they are loaded at runtime courtesy of xpcom.  //  // Loading the toolkit specific dlls at runtime has many benefits:  //  // o Simplifies linking of the "app" since it no longer needs to   //   pull in the toolkit world.  //  // o Makes it possible to embed the xlib gfx/widget backends into  //   other high level x toolkit such as motif and gtk.  This is  //   highly desirable in the long run as a means to increase code  //   reuse and eyeball focus.  //  // o Makes it possible to run X Mozilla using different toolkits  //   without having to hack the application bits.  This in turn  //   simplifies everyone's life, since only one binary is needed.  //   The only platform specific bits are:  //  //   mozilla/gfx/src  //   mozilla/widget/src/  //   mozilla/widget/timer/  //  // o It bypasses (yeah right) the toolkit inquisitions and crusades.  //   // o It makes you breakfast, lunch and dinner.  //  //  // Note1:  //  // The following code assumes that:  //  // + Some kind of auto registration has occurred for components.  //   For example, NS_AutoRegister() or nsComponentManager::AutoRegister().  //  //   -or-  //  // + The "app" was installed and a registry with information on the  //   toolkit_service component has been populated.  The master plan  //   is that this occurs at install time.  Otherwise bad things will  //   happen.  //  // During the development of mozilla, this usually occurs in the  // main() of the "app" (viewer/apprunner).  It is always the first  // thing that happens on the NS_SetupRegistry() function.  //  // If for some reason that changes in the future, the following code  // might have to be moved.  //  // Note2:  //  // The WIDGET_DLL and GFX_DLL macros will be redefined from the   // hard coded values set in this file above.  They will point  // to strings valid only in the scope of this function.    //  // If for some reason, the nsComponentManager::RegisterComponentLib()  // calls below are moved to a different scope, this unix specific code  // will have to deal.  static NS_DEFINE_CID(kCUnixToolkitServiceCID, NS_UNIX_TOOLKIT_SERVICE_CID);  nsresult   rv;  nsIUnixToolkitService * unixToolkitService = nsnull;      rv = nsComponentManager::CreateInstance(kCUnixToolkitServiceCID,                                          nsnull,                                          NS_GET_IID(nsIUnixToolkitService),                                          (void **) &unixToolkitService);    NS_ASSERTION(rv == NS_OK,"Cannot obtain unix toolkit service.");  nsAutoString unixToolkitName("error");  nsAutoString unixWidgetDllName("error");  nsAutoString unixGfxDllName("error");    if (NS_OK == rv && nsnull != unixToolkitService)  {    nsresult rv2;    rv2 = unixToolkitService->GetToolkitName(unixToolkitName);    NS_ASSERTION(rv2 == NS_OK,"Cannot get unix toolkit name context.");    rv2 = unixToolkitService->GetWidgetDllName(unixWidgetDllName);    NS_ASSERTION(rv2 == NS_OK,"Cannot get unix toolkit widget dll name.");    rv2 = unixToolkitService->GetGfxDllName(unixGfxDllName);    NS_ASSERTION(rv2 == NS_OK,"Cannot get unix toolkit gfx dll name.");    NS_RELEASE(unixToolkitService);  }#ifdef NS_DEBUG  printf("NS_SetupRegistry() MOZ_TOOLKIT=%s, WIDGET_DLL=%s, GFX_DLL=%s\n",         (const char *) nsCAutoString(unixToolkitName),         (const char *) nsCAutoString(unixWidgetDllName),         (const char *) nsCAutoString(unixGfxDllName));#endif  #undef WIDGET_DLL#undef GFXWIN_DLL#define WIDGET_DLL (const char *) nsCAutoString(unixWidgetDllName)#define GFXWIN_DLL (const char *) nsCAutoString(unixGfxDllName)#endif /* defined(XP_UNIX) && !defined(MOZ_MONOLITHIC_TOOLKIT) */  // WIDGET  nsComponentManager::RegisterComponentLib(kCLookAndFeelCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCWindowCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCVScrollbarCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCHScrollbarCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCDialogCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCFileWidgetCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);#ifndef XP_UNIX  nsComponentManager::RegisterComponentLib(kCFilePickerCID, "FilePicker", "component://mozilla/filepicker", WIDGET_DLL, PR_FALSE, PR_FALSE);#endif  nsComponentManager::RegisterComponentLib(kCChildCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCPopUpCID,NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCAppShellCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCToolkitCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kClipboardCID,            "Clipboard", "component://netscape/widget/clipboard", WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCTransferableCID,        "Transferable", "component://netscape/widget/transferable", WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kDataFlavorCID,           NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCXIFFormatConverterCID,  NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCDragServiceCID,          "Drag Service", "component://netscape/widget/dragservice", WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCFontRetrieverServiceCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);#ifdef XP_PC  nsComponentManager::RegisterComponentLib(kCTimerCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCTimerManagerCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);#endif  nsComponentManager::RegisterComponentLib(kSoundCID,   "Sound Services", "component://netscape/sound", WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kFileSpecWithUICID,   NS_FILESPECWITHUI_CLASSNAME, NS_FILESPECWITHUI_PROGID, WIDGET_DLL, PR_FALSE, PR_FALSE);  // WIDGETS  nsComponentManager::RegisterComponentLib(kCLabelCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCButtonCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCTextFieldCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCCheckButtonCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  // MAC ONLY WIDGETS#ifdef XP_MAC  static NS_DEFINE_IID(kCMenuBarCID,                NS_MENUBAR_CID);  static NS_DEFINE_IID(kCMenuCID,                   NS_MENU_CID);  static NS_DEFINE_IID(kCMenuItemCID,               NS_MENUITEM_CID);  static NS_DEFINE_IID(kCContextMenuCID,            NS_CONTEXTMENU_CID);  nsComponentManager::RegisterComponentLib(kCMenuBarCID,       NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCMenuCID,          NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCMenuItemCID,      NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);#endif  // UNNEEDED WIDGETS#if 0  nsComponentManager::RegisterComponentLib(kCComboBoxCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCContextMenuCID,   NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCListBoxCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCRadioButtonCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCTextAreaCID, NULL, NULL, WIDGET_DLL, PR_FALSE, PR_FALSE);#endif  // GFXWIN  nsComponentManager::RegisterComponentLib(kCRenderingContextCID, "Rendering Context", "component://netscape/gfx/renderingcontext", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCDeviceContextCID, "Device Context", "component://netscape/gfx/devicecontext", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCFontMetricsCID, "Font Metrics", "component://netscape/gfx/fontmetrics", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCFontEnumeratorCID, "Font Enumerator", "component://netscape/gfx/fontenumerator", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCImageCID, "Image", "component://netscape/gfx/image", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCRegionCID, NULL, NULL, GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCScriptableRegionCID, "Region", "component://netscape/gfx/region", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCBlenderCID, "Blender", "component://netscape/gfx/blender", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCDeviceContextSpecCID, "Device Context Spec", "component://netscape/gfx/devicecontextspec", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCDeviceContextSpecFactoryCID, "Device Context Spec Factory", "component://netscape/gfx/devicecontextspecfactory", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kImageManagerCID, "Image Manager", "component://netscape/gfx/imagemanager", GFXWIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kScreenManagerCID, "Screen Manager", "component://netscape/gfx/screenmanager", GFXWIN_DLL, PR_FALSE, PR_FALSE);  // VIEW  nsComponentManager::RegisterComponentLib(kCViewManagerCID, NULL, NULL, VIEW_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCViewCID, NULL, NULL, VIEW_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCScrollingViewCID, NULL, NULL, VIEW_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCScrollPortViewCID, NULL, NULL, VIEW_DLL, PR_FALSE, PR_FALSE);  // WEB  nsComponentManager::RegisterComponentLib(kCWebShellCID, NULL, NULL, WEB_DLL, PR_FALSE, PR_FALSE);  // DOM  nsComponentManager::RegisterComponentLib(kCDOMScriptObjectFactory, NULL, NULL, DOM_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCScriptNameSetRegistry, NULL, NULL, DOM_DLL, PR_FALSE, PR_FALSE);  // PLUGIN  nsComponentManager::RegisterComponentLib(kCPluginHostCID, NULL, NULL, PLUGIN_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCPluginManagerCID, NULL, NULL, PLUGIN_DLL, PR_FALSE, PR_FALSE);#ifdef OJI  nsComponentManager::RegisterComponentLib(kCLiveconnectCID, "LiveConnect", "component://netscape/javascript/liveconnect", LIVECONNECT_DLL, PR_FALSE, PR_FALSE);  nsComponentManager::RegisterComponentLib(kCJVMManagerCID, "JVMManager", "component://netscape/oji/jvmmanager", OJI_DLL, PR_FALSE, PR_FALSE);#endif}