OS/2 EMX port changes (Modules part of patch #450267):
  Modules/
    _hotshot.c
    dbmmodule.c
    fcntlmodule.c
    main.c
    pwdmodule.c
    readline.c
    selectmodule.c
    signalmodule.c
    termios.c
    timemodule.c
    unicodedata.c
diff --git a/Modules/_hotshot.c b/Modules/_hotshot.c
index 1eecc7e..97037ac 100644
--- a/Modules/_hotshot.c
+++ b/Modules/_hotshot.c
@@ -26,7 +26,7 @@
 #ifndef HAVE_GETTIMEOFDAY
 #error "This module requires gettimeofday() on non-Windows platforms!"
 #endif
-#ifdef macintosh
+#if defined(macintosh) || (defined(PYOS_OS2) && defined(PYCC_GCC))
 #include <sys/time.h>
 #else
 #include <sys/resource.h>
@@ -51,6 +51,10 @@
 #define PATH_MAX 254
 #endif
 
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+#define PATH_MAX 260
+#endif
+
 #ifndef PATH_MAX
 #   ifdef MAX_PATH
 #       define PATH_MAX MAX_PATH
@@ -987,7 +991,7 @@
         }
 #endif
     }
-#if defined(MS_WIN32) || defined(macintosh)
+#if defined(MS_WIN32) || defined(macintosh) || defined(PYOS_OS2)
     rusage_diff = -1;
 #else
     {
diff --git a/Modules/dbmmodule.c b/Modules/dbmmodule.c
index 233487d..056af49 100644
--- a/Modules/dbmmodule.c
+++ b/Modules/dbmmodule.c
@@ -13,7 +13,11 @@
  */
 #if defined(HAVE_NDBM_H)
 #include <ndbm.h>
+#if defined(PYOS_OS2) && !defined(PYCC_GCC)
 static char *which_dbm = "ndbm";
+#else
+static char *which_dbm = "GNU gdbm";  /* EMX port of GDBM */
+#endif
 #elif defined(HAVE_DB1_NDBM_H)
 #include <db1/ndbm.h>
 static char *which_dbm = "BSD db";
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index 9f84a2c..13cd0f7 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -222,12 +222,17 @@
 			      &lenobj, &startobj, &whence))
 	    return NULL;
 
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+	PyErr_SetString(PyExc_NotImplementedError,
+			"lockf not supported on OS/2 (EMX)");
+	return NULL;
+#else
 #ifndef LOCK_SH
 #define LOCK_SH		1	/* shared lock */
 #define LOCK_EX		2	/* exclusive lock */
 #define LOCK_NB		4	/* don't block when locking */
 #define LOCK_UN		8	/* unlock */
-#endif
+#endif  /* LOCK_SH */
 	{
 		struct flock l;
 		if (code == LOCK_UN)
@@ -275,6 +280,7 @@
 	}
 	Py_INCREF(Py_None);
 	return Py_None;
+#endif  /* defined(PYOS_OS2) && defined(PYCC_GCC) */
 }
 
 static char lockf_doc [] =
diff --git a/Modules/main.c b/Modules/main.c
index b36714c..9ce8bef 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -8,11 +8,15 @@
 #include <fcntl.h>
 #endif
 
-#if defined(PYOS_OS2) || defined(MS_WINDOWS)
+#if (defined(PYOS_OS2) && !defined(PYCC_GCC)) || defined(MS_WINDOWS)
 #define PYTHONHOMEHELP "<prefix>\\lib"
 #else
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+#define PYTHONHOMEHELP "<prefix>/Lib"
+#else
 #define PYTHONHOMEHELP "<prefix>/pythonX.X"
 #endif
+#endif
 
 #include "pygetopt.h"
 
diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c
index 35afc4e..91989b7 100644
--- a/Modules/pwdmodule.c
+++ b/Modules/pwdmodule.c
@@ -128,8 +128,12 @@
 		return NULL;
 	if ((d = PyList_New(0)) == NULL)
 		return NULL;
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+	if ((p = getpwuid(0)) != NULL) {
+#else
 	setpwent();
 	while ((p = getpwent()) != NULL) {
+#endif
 		PyObject *v = mkpwent(p);
 		if (v == NULL || PyList_Append(d, v) != 0) {
 			Py_XDECREF(v);
diff --git a/Modules/readline.c b/Modules/readline.c
index 9b4d952..94aa1db 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -507,6 +507,10 @@
 setup_readline(void)
 {
 	rl_readline_name = "python";
+#if defined(PYOS_OS2) && defined(PYCC_GCC)
+	/* Allow $if term= in .inputrc to work */
+	rl_terminal_name = getenv("TERM");
+#endif
 	/* Force rebind of TAB to insert-tab */
 	rl_bind_key('\t', rl_insert);
 	/* Bind both ESC-TAB and ESC-ESC to the completion function */
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index ceaf3fa..0a29f2e 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -33,7 +33,7 @@
 #include <sys/types.h>
 #endif
 
-#if defined(PYOS_OS2)
+#if defined(PYOS_OS2) && !defined(PYCC_GCC)
 #include <sys/time.h>
 #include <utils.h>
 #endif
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index e34f051..b27c4b7 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -16,7 +16,7 @@
 #define SIG_ERR ((PyOS_sighandler_t)(-1))
 #endif
 
-#if defined(PYOS_OS2)
+#if defined(PYOS_OS2) && !defined(PYCC_GCC)
 #define NSIG 12
 #include <process.h>
 #endif
diff --git a/Modules/termios.c b/Modules/termios.c
index aaabe60..0c5697f 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -384,7 +384,9 @@
 #ifdef OLCUC
 	{"OLCUC", OLCUC},
 #endif
+#ifdef ONLCR
 	{"ONLCR", ONLCR},
+#endif
 #ifdef OCRNL
 	{"OCRNL", OCRNL},
 #endif
@@ -552,7 +554,9 @@
 #ifdef VLNEXT
 	{"VLNEXT", VLNEXT},
 #endif
+#ifdef VEOL2
 	{"VEOL2", VEOL2},
+#endif
 
 
 #ifdef B460800
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 6647ecc..5d7fa51 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -54,6 +54,12 @@
 #undef HAVE_CLOCK /* We have our own version down below */
 #endif /* MS_WIN32 && !MS_WIN64 */
 
+#if defined(PYOS_OS2)
+#define INCL_DOS
+#define INCL_ERRORS
+#include <os2.h>
+#endif
+
 #if defined(PYCC_VACPP)
 #include <sys/time.h>
 #endif
@@ -752,7 +758,7 @@
 floatsleep(double secs)
 {
 /* XXX Should test for MS_WIN32 first! */
-#if defined(HAVE_SELECT) && !defined(__BEOS__)
+#if defined(HAVE_SELECT) && !defined(__BEOS__) && !defined(__EMX__)
 	struct timeval t;
 	double frac;
 	frac = fmod(secs, 1.0);
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index 36c96e4..20b53a7 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -277,7 +277,7 @@
 }
 
 static int
-_getname(Py_UCS4 code, char* buffer, int buflen)
+_Py_getname(Py_UCS4 code, char* buffer, int buflen)
 {
     int offset;
     int i;
@@ -334,7 +334,7 @@
     /* check if code corresponds to the given name */
     int i;
     char buffer[NAME_MAXLEN];
-    if (!_getname(code, buffer, sizeof(buffer)))
+    if (!_Py_getname(code, buffer, sizeof(buffer)))
         return 0;
     for (i = 0; i < namelen; i++) {
         if (toupper(name[i]) != buffer[i])
@@ -384,7 +384,7 @@
 static const _PyUnicode_Name_CAPI hashAPI = 
 {
     sizeof(_PyUnicode_Name_CAPI),
-    _getname,
+    _Py_getname,
     _getcode
 };
 
@@ -407,7 +407,7 @@
 	return NULL;
     }
 
-    if (!_getname((Py_UCS4) *PyUnicode_AS_UNICODE(v),
+    if (!_Py_getname((Py_UCS4) *PyUnicode_AS_UNICODE(v),
                              name, sizeof(name))) {
 	if (defobj == NULL) {
 	    PyErr_SetString(PyExc_ValueError, "no such name");