--- /dev/null
+++ offuh/except/except.cxx
@@ -0,0 +1,13 @@
+#include <sal/config.h>
+#include <cppu/macros.hxx>
+
+// We don't want to hide all this shared goodness:
+#undef CPPU_GCC_DLLPUBLIC_EXPORT
+#define CPPU_GCC_DLLPUBLIC_EXPORT 
+#undef CPPU_GCC_DLLPRIVATE
+#define CPPU_GCC_DLLPRIVATE 
+
+#define CPPU_INTERNAL_IMPL 1 
+
+#include <catch.hxx>
+


diff -u -p -u -r1.7 makefile.mk
--- offuh/source/makefile.mk	8 Sep 2005 15:51:01 -0000	1.7
+++ offuh/source/makefile.mk	12 Apr 2006 14:48:09 -0000
@@ -45,8 +45,8 @@ TARGET=		offuh
 
 $(MISC)$/$(TARGET).don : $(UNOUCRRDB)
 	@+-$(RM) $@ >& $(NULLDEV)
-	+$(CPPUMAKER) -Gc $(CPPUMAKERFLAGS) -B$(UNOUCRBASE) -O$(UNOUCROUT) $(UNOUCRRDB) && echo > $@
+	+$(CPPUMAKER) -E$(UNOUCROUT)/catch.hxx -Gc $(CPPUMAKERFLAGS) -B$(UNOUCRBASE) -O$(UNOUCROUT) $(UNOUCRRDB) && echo > $@
 
 # --- Targets ------------------------------------------------------
 

--- /dev/null	2006-03-11 13:25:00.000000000 +0000
+++ offuh/except/makefile.mk	2006-03-17 11:44:41.000000000 +0000
@@ -0,0 +1,24 @@
+# --- Settings -----------------------------------------------------
+
+PRJ=..
+
+PRJNAME=offuh
+TARGET=unotypes
+ENABLE_EXCEPTIONS=TRUE
+
+.INCLUDE :  settings.mk
+
+LIB1TARGET= $(SLB)$/$(TARGET).lib
+LIB1OBJFILES= $(SLO)$/except.obj
+INCEXT=$(OUT)$/inc/offuh
+
+SHL1TARGET=exlink$(UPD)$(DLLPOSTFIX)
+SHL1LIBS=$(LIB1TARGET)
+SHL1STDLIBS= $(SALLIB) $(SALHELPERLIB) $(REGLIB) $(CPPULIB)
+
+# --- Targets -------------------------------------------------------
+
+.INCLUDE :  target.mk
+
+$(LIB1OBJFILES) : $(MISC)$/offuh.don
+


Index: offuh/prj/build.lst
===================================================================
RCS file: /cvs/api/offuh/prj/build.lst,v
retrieving revision 1.4
diff -u -p -u -r1.4 build.lst
--- offuh/prj/build.lst 18 Sep 2002 09:14:33 -0000      1.4
+++ offuh/prj/build.lst 3 Apr 2006 09:56:29 -0000
@@ -2,3 +2,4 @@ ou      offuh   ::      offapi codemaker NULL
 ou	offuh									usr1	-	all	ou_mkout NULL
 ou	offuh\prj								get		-	all	ou_prj NULL
 ou	offuh\source							nmake	-	all	ou_source NULL
+ou     offuh\except                                                    nmake   -       u     ou_except ou_source NULL


Index: offuh/prj/d.lst
===================================================================
RCS file: /cvs/api/offuh/prj/d.lst,v
retrieving revision 1.59
diff -u -p -u -r1.59 d.lst
--- offuh/prj/d.lst     9 Jun 2005 14:54:16 -0000       1.59
+++ offuh/prj/d.lst     3 Apr 2006 09:56:29 -0000
@@ -319,6 +326,9 @@ mkdir: %_DEST%\inc%_EXT%\com\sun\star\xm
 
 ..\%__SRC%\inc\offuh\com\sun\star\script\browse\*.hpp %_DEST%\inc%_EXT%\offuh\com\sun\star\script\browse\*.hpp
 ..\%__SRC%\inc\offuh\com\sun\star\script\browse\*.hdl %_DEST%\inc%_EXT%\offuh\com\sun\star\script\browse\*.hdl
+
+..\%__SRC%\lib\*.so %_DEST%\lib%_EXT%\*.so
+
 ..\%__SRC%\inc\offuh\com\sun\star\script\provider\*.hpp %_DEST%\inc%_EXT%\offuh\com\sun\star\script\provider\*.hpp
 ..\%__SRC%\inc\offuh\com\sun\star\script\provider\*.hdl %_DEST%\inc%_EXT%\offuh\com\sun\star\script\provider\*.hdl
 

Index: scp2/source/ooo/file_library_ooo.scp
===================================================================
RCS file: /cvs/installation/scp2/source/ooo/file_library_ooo.scp,v
retrieving revision 1.184.2.2
diff -u -p -u -r1.184.2.2 file_library_ooo.scp
--- scp2/source/ooo/file_library_ooo.scp	17 Feb 2006 16:52:02 -0000	1.184.2.2
+++ scp2/source/ooo/file_library_ooo.scp	3 Apr 2006 10:13:58 -0000
@@ -468,6 +490,15 @@ STD_UNO_LIB_FILE( gid_File_Lib_Ctl , ctl
 
 STD_LIB_FILE_PATCH( gid_File_Lib_Cui, cui)
 
+#ifdef LINUX
+File gid_File_Lib_ExLib
+    TXT_FILE_BODY;
+    Styles = (PACKED,PATCH);
+    Dir = gid_Dir_Program;
+    Name = LIBNAME(exlink);
+End
+#endif
+
 #ifndef SYSTEM_CURL
 
 File gid_File_Lib_Curl

Index: codemaker/source/cppumaker/cppumaker.cxx
===================================================================
RCS file: /cvs/udk/codemaker/source/cppumaker/cppumaker.cxx,v
retrieving revision 1.8
diff -u -p -u -r1.8 cppumaker.cxx
--- codemaker/source/cppumaker/cppumaker.cxx	8 Sep 2005 02:11:34 -0000	1.8
+++ codemaker/source/cppumaker/cppumaker.cxx	12 Apr 2006 14:47:29 -0000
@@ -39,6 +39,7 @@
 
 #include "codemaker/typemanager.hxx"
 #include "codemaker/generatedtypeset.hxx"
+#include "codemaker/commoncpp.hxx"
 
 #include "cppuoptions.hxx"
 #include "cpputype.hxx"
@@ -245,6 +245,43 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
 		exit(99);
 	}
 
+	if (!aExceptionTypeNames.empty() && options.isValid("-E"))
+	{
+		OString outFile = options.getOption("-E");
+		FILE *excepts = fopen (outFile, "w+");
+		if (!excepts)
+		{
+			fprintf(stderr, "%s ERROR: cannot open '%s'\n",
+					options.getProgramName().getStr(), outFile.getStr());
+			exit(98);
+		}
+		fprintf (excepts, "// This file is autogenerated by cppumaker\n");
+		fprintf (excepts, "// include exception headers\n");
+
+		::std::list<rtl::OString>::const_iterator iter;
+
+		for (iter = aExceptionTypeNames.begin();
+			 iter != aExceptionTypeNames.end(); iter++)
+		{
+			rtl::OString aStr = *iter;
+			fprintf (excepts, "#include <%s.hpp>\n", aStr.getStr());
+		}
+	
+		fprintf (excepts, "// dummy method\n");
+		fprintf (excepts, "extern void force_emit ()\n");
+		fprintf (excepts, "{\n");
+		for (iter = aExceptionTypeNames.begin();
+			 iter != aExceptionTypeNames.end(); iter++) {
+			fprintf (excepts, "    try {\n");
+			fprintf (excepts, "        force_emit ();\n");
+			fprintf (excepts, "    }\n");
+			OString aStr = codemaker::cpp::scopedCppName (*iter);
+			fprintf (excepts, "catch (const %s &r) {} \n", aStr.getStr());
+		}
+		fprintf (excepts, "}\n\n");
+		fclose (excepts);
+	}
+
 	return 0;
 }
 
Index: codemaker/source/cppumaker/cppuoptions.cxx
===================================================================
RCS file: /cvs/udk/codemaker/source/cppumaker/cppuoptions.cxx,v
retrieving revision 1.9
diff -u -p -u -r1.9 cppuoptions.cxx
--- codemaker/source/cppumaker/cppuoptions.cxx	8 Sep 2005 02:11:54 -0000	1.9
+++ codemaker/source/cppumaker/cppuoptions.cxx	12 Apr 2006 14:47:29 -0000
@@ -71,6 +71,9 @@ sal_Bool CppuOptions::initOptions(int ac
 		{
 			switch (av[i][1])
 			{
+				case 'E':
+					m_options["-E"] = OString(av[i] + 2);
+					break;
 				case 'O':
 					if (av[i][2] == '\0')
 					{
@@ -335,6 +338,7 @@ OString	CppuOptions::prepareHelp()
 	help += "    -G         = generate only target files which does not exists.\n";
 	help += "    -Gc        = generate only target files which content will be changed.\n";
 	help += "    -X<file>   = extra types which will not be taken into account for generation.\n";
+	help += "    -E<file>   = generate exception type library for faster Linux linking.\n";
 	help += prepareVersion();
 	
 	return help;
Index: codemaker/source/cppumaker/cpputype.cxx
===================================================================
RCS file: /cvs/udk/codemaker/source/cppumaker/cpputype.cxx,v
retrieving revision 1.37
diff -u -p -u -r1.37 cpputype.cxx
--- codemaker/source/cppumaker/cpputype.cxx	26 Jan 2006 17:42:38 -0000	1.37
+++ codemaker/source/cppumaker/cpputype.cxx	12 Apr 2006 14:47:30 -0000
@@ -56,6 +56,8 @@
 
 using namespace rtl;
 
+::std::list<rtl::OString> aExceptionTypeNames;
+
 namespace {
 
 rtl::OString translateSimpleUnoType(rtl::OString const & unoType) {
@@ -3265,6 +3267,13 @@ sal_Bool ExceptionType::dumpHFile(
 	return sal_True;
 }
 
+bool
+ExceptionType::dumpFiles(CppuOptions * options, rtl::OString const & outPath)
+{
+	aExceptionTypeNames.push_back(m_typeName);
+	return CppuType::dumpFiles(options, outPath);
+}
+
 sal_Bool ExceptionType::dumpDeclaration(FileStream& o)
 	throw( CannotDumpException )
 {
Index: codemaker/source/cppumaker/cpputype.hxx
===================================================================
RCS file: /cvs/udk/codemaker/source/cppumaker/cpputype.hxx,v
retrieving revision 1.9
diff -u -p -u -r1.9 cpputype.hxx
--- codemaker/source/cppumaker/cpputype.hxx	10 Jan 2006 15:46:47 -0000	1.9
+++ codemaker/source/cppumaker/cpputype.hxx	12 Apr 2006 14:47:30 -0000
@@ -61,6 +61,9 @@ enum CppuTypeDecl
 class CppuOptions;
 class FileStream;
 
+#include <list>
+extern ::std::list<rtl::OString> aExceptionTypeNames;
+
 class CppuType
 {
 public:
@@ -300,6 +303,7 @@ public:
 
 	virtual ~ExceptionType();
 
+    bool        dumpFiles(CppuOptions * options, rtl::OString const & outPath);
 	sal_Bool	dumpDeclaration(FileStream& o) throw( CannotDumpException );
 	sal_Bool	dumpHFile(FileStream& o, codemaker::cppumaker::Includes & includes) throw( CannotDumpException );
 	sal_Bool	dumpHxxFile(FileStream& o, codemaker::cppumaker::Includes & includes) throw( CannotDumpException );
