Build with --disable-unicode again. Fixes #1158607.
Will backport to 2.4.
diff --git a/Lib/codecs.py b/Lib/codecs.py
index b283925..b4103fb 100644
--- a/Lib/codecs.py
+++ b/Lib/codecs.py
@@ -720,11 +720,19 @@
 
 ### error handlers
 
-strict_errors = lookup_error("strict")
-ignore_errors = lookup_error("ignore")
-replace_errors = lookup_error("replace")
-xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace")
-backslashreplace_errors = lookup_error("backslashreplace")
+try:
+    strict_errors = lookup_error("strict")
+    ignore_errors = lookup_error("ignore")
+    replace_errors = lookup_error("replace")
+    xmlcharrefreplace_errors = lookup_error("xmlcharrefreplace")
+    backslashreplace_errors = lookup_error("backslashreplace")
+except LookupError:
+    # In --disable-unicode builds, these error handler are missing
+    strict_errors = None
+    ignore_errors = None
+    replace_errors = None
+    xmlcharrefreplace_errors = None
+    backslashreplace_errors = None
 
 # Tell modulefinder that using codecs probably needs the encodings
 # package
diff --git a/Lib/copy.py b/Lib/copy.py
index b216beb..dbfe2f5 100644
--- a/Lib/copy.py
+++ b/Lib/copy.py
@@ -202,12 +202,12 @@
 d[bool] = _deepcopy_atomic
 try:
     d[complex] = _deepcopy_atomic
-except AttributeError:
+except NameError:
     pass
 d[str] = _deepcopy_atomic
 try:
     d[unicode] = _deepcopy_atomic
-except AttributeError:
+except NameError:
     pass
 try:
     d[types.CodeType] = _deepcopy_atomic
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 485e9e0..a296caf 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -144,7 +144,7 @@
             TESTFN_UNICODE_UNENCODEABLE = None
         else:
             # Japanese characters (I think - from bug 846133)
-            TESTFN_UNICODE_UNENCODEABLE = u"@test-\u5171\u6709\u3055\u308c\u308b"
+            TESTFN_UNICODE_UNENCODEABLE = eval('u"@test-\u5171\u6709\u3055\u308c\u308b"')
             try:
                 # XXX - Note - should be using TESTFN_ENCODING here - but for
                 # Windows, "mbcs" currently always operates as if in
diff --git a/Misc/NEWS b/Misc/NEWS
index e387e63..36a21ce 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -221,6 +221,8 @@
 Build
 -----
 
+- Bug #1158607: Build with --disable-unicode again.
+
 - spwdmodule.c is built only if either HAVE_GETSPNAM or HAVE_HAVE_GETSPENT is
   defined.  Discovered as a result of not being able to build on OS X.
 
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index ccad827..a6c42b1 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -104,8 +104,15 @@
     if (!PyArg_ParseTuple(args, "O|ss:encode", &v, &encoding, &errors))
         return NULL;
 
+#ifdef Py_USING_UNICODE
     if (encoding == NULL)
 	encoding = PyUnicode_GetDefaultEncoding();
+#else
+    if (encoding == NULL) {
+	PyErr_SetString(PyExc_ValueError, "no encoding specified");
+	return NULL;
+    }
+#endif
 
     /* Encode via the codec registry */
     v = PyCodec_Encode(v, encoding, errors);
@@ -137,8 +144,15 @@
     if (!PyArg_ParseTuple(args, "O|ss:decode", &v, &encoding, &errors))
         return NULL;
 
+#ifdef Py_USING_UNICODE
     if (encoding == NULL)
 	encoding = PyUnicode_GetDefaultEncoding();
+#else
+    if (encoding == NULL) {
+	PyErr_SetString(PyExc_ValueError, "no encoding specified");
+	return NULL;
+    }
+#endif
 
     /* Decode via the codec registry */
     v = PyCodec_Decode(v, encoding, errors);
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 76c2a44..632f3d6 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -838,8 +838,10 @@
 };
 
 static PyMethodDef PyTclObject_methods[] = {
+#ifdef Py_USING_UNICODE
 	{"__unicode__",	(PyCFunction)PyTclObject_unicode, METH_NOARGS,
 	PyTclObject_unicode__doc__},
+#endif
 	{0}
 };
 
@@ -991,7 +993,7 @@
 			}
 		}
 #else
-		res = PyString_FromStringAndSize(value->bytes, value->length);
+		result = PyString_FromStringAndSize(value->bytes, value->length);
 #endif
 		return result;
 	}
diff --git a/setup.py b/setup.py
index 85322a8..3411643a 100644
--- a/setup.py
+++ b/setup.py
@@ -799,11 +799,12 @@
                               ))
 
         # Hye-Shik Chang's CJKCodecs modules.
-        exts.append(Extension('_multibytecodec',
-                              ['cjkcodecs/multibytecodec.c']))
-        for loc in ('kr', 'jp', 'cn', 'tw', 'hk', 'iso2022'):
-            exts.append(Extension('_codecs_' + loc,
-                                  ['cjkcodecs/_codecs_%s.c' % loc]))
+        if have_unicode:
+            exts.append(Extension('_multibytecodec',
+                                  ['cjkcodecs/multibytecodec.c']))
+            for loc in ('kr', 'jp', 'cn', 'tw', 'hk', 'iso2022'):
+                exts.append(Extension('_codecs_' + loc,
+                                      ['cjkcodecs/_codecs_%s.c' % loc]))
 
         # Dynamic loading module
         if sys.maxint == 0x7fffffff: