Index: trunk/src/misc/MakeOmfLibs.cmd
===================================================================
--- trunk/src/misc/MakeOmfLibs.cmd	(revision 2420)
+++ trunk/src/misc/MakeOmfLibs.cmd	(revision 2420)
@@ -0,0 +1,171 @@
+/* $Id: MakeOmfLibs.cmd,v 1.8 2004/11/17 08:08:03 bird Exp $
+ *
+ * Generates the OMF libraries.
+ *
+ * Copyright (c) 2003 InnoTek Systemberatung GmbH
+ * Author: knut st. osmundsen <bird@anduin.net>
+ *
+ *
+ * This file is part of GCC.
+ *
+ * GCC is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * GCC is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GCC; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+    call hlpRexxUtilInit;
+    signal on novalue name NoValueHandler_label_doesnt_exist_btw;
+
+    /*
+     * Figure out the usr/lib directory location.
+     * Either as parameter or we assume this script is located there.
+     */
+    parse arg sDir sDummy;
+    if (sDir = '') then
+    do
+        parse source . . sSrc
+        sDir = filespec('drive', sSrc) || strip(filespec('path', sSrc), 'T', '\');
+    end
+
+    /*
+     * Setup the environment
+     */
+    Address CMD '@setlocal';
+    sEMXOMF = sDir'\..\bin\emxomf.exe -t';
+    sOldBeginLibPath = hlpEnvGet('BEGINLIBPATH');
+    call hlpEnvSet 'BEGINLIBPATH', sDir'..\lib;'sOldBeginLibPath
+    if (hlpEnvGet('GCC_WEAKSYMS') <> '') then
+        say 'warning: GCC_WEAKSYMS is set, sure you wanna use old weak handling?';
+
+    /*
+     * Do Da work.
+     */
+    call SysFileDelete sDir'\weaksyms.omf'; /* don't need this around! */
+    iRc = doDir(sDir, sEMXOMF' -s');
+    iRc2= doDir(sDir'\tcpipv4', sEMXOMF' -s');
+    if (iRc2 > iRc) then
+        iRc = iRc2;
+    iRc2= doDir(sDir'\dbg', sEMXOMF);
+    if (iRc2 > iRc) then
+        iRc = iRc2;
+    iRc2= doDir(sDir'\dbg\tcpipv4', sEMXOMF);
+    if (iRc2 > iRc) then
+        iRc = iRc2;
+    iRc2= doDir(sDir'\gcc-lib\i386-pc-os2-emx\3.3.5', sEMXOMF' -s');
+    if (iRc2 > iRc) then
+        iRc = iRc2;
+
+    /*
+     * restore environment
+     */
+    call hlpEnvSet 'BEGINLIBPATH', sOldBeginLibPath
+    Address CMD '@endlocal';
+
+    if (iRc <> 0) then
+        say 'warning: one or more operations failed, check the above output. :-)'.
+exit(iRc);
+
+/**
+ * Process a given directory.
+ */
+doDir: procedure
+parse arg sDir, sEMXOMF
+    say 'info: processing directory 'sDir'...';
+    iRc = 0;
+
+    /* Is libstdc++.a in this directory, if so, do it first. */
+    asLibs.0 = 0;
+    rc = SysFileTree(sDir'\libstdc++.a', 'asLibs', 'OF');
+    if (rc = 0 & asLibs.0 > 0) then
+    do
+        Address CMD sEMXOMF '-p128' asLibs.1;
+        if (rc <> 0 & rc > iRc) then
+            iRc = rc;
+    end
+
+    /* do all */
+    asLibs.0 = 0;
+    rc = SysFileTree(sDir'\*.a', 'asLibs', 'OF');
+    if (rc = 0) then
+    do
+        do i = 1 to asLibs.0
+            Address CMD sEMXOMF '-p128' asLibs.i;
+            if (rc <> 0 & rc > iRc) then
+                iRc = rc;
+        end
+    end
+    else
+    do
+        say 'error: SysFileTree failed. rc='rc;
+        iRc = 12;
+    end
+
+return iRc;
+
+/**
+ * Sets the value of sEnvVar to sValue.
+ * @returns Old value of sEnvVar.
+ * @returns '' if not found.
+ * @param   sEnvVar     Environment variable to set.
+ * @param   sValue      The new value.
+ */
+hlpEnvSet: procedure
+parse arg sEnvVar, sValue
+    parse upper source sRexxVer . .
+    if (sRexxVer = 'OS/2') then
+    do
+        if ((translate(sEnvVar) = 'BEGINLIBPATH') | (translate(sEnvVar) = 'ENDLIBPATH')) then
+            return SysSetExtLibPath(sValue, substr(sEnvVar, 1, 1));
+        if (length(sValue) >= 1024) then
+        do
+            say 'Warning: 'sEnvVar' is too long,' length(sValue)' char.';
+            say '    This may make CMD.EXE unstable after a SET operation to print the environment.';
+        end
+        sEnv = 'OS2ENVIRONMENT';
+    end
+    else
+        sEnv = 'ENVIRONMENT';
+return value(sEnvVar, sValue, sEnv);
+
+/**
+ * Gets the value of sEnvVar.
+ * @returns Value of sEnvVar if found.
+ * @returns '' if not found.
+ * @param   sEnvVar     Environment variable to get.
+ */
+hlpEnvGet: procedure
+parse arg sEnvVar
+    parse upper source sRexxVer . .
+    if (sRexxVer = 'OS/2') then
+    do
+        if ((translate(sEnvVar) = 'BEGINLIBPATH') | (translate(sEnvVar) = 'ENDLIBPATH')) then
+            return SysQueryExtLibPath(substr(sEnvVar, 1, 1));
+        sEnv = 'OS2ENVIRONMENT';
+    end
+    else
+        sEnv = 'ENVIRONMENT';
+return value(sEnvVar,, sEnv);
+
+/**
+ * Loads the RexxUtil dll.
+ */
+hlpRexxUtilInit: procedure
+    if (RxFuncQuery('SysLoadFuncs') = 1) then
+    do
+        call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
+        call SysLoadFuncs;
+    end
+return 0;
+
+
