From e2713becd8cb0c3b2db4d33832dd57a1d619f0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Tue, 8 Mar 2005 15:03:08 +0000 Subject: [PATCH] Build with --disable-unicode again. Fixes #1158607. Will backport to 2.4. --- Lib/codecs.py | 18 +++++++++++++----- Lib/copy.py | 4 ++-- Lib/test/test_support.py | 2 +- Misc/NEWS | 2 ++ Modules/_codecsmodule.c | 14 ++++++++++++++ Modules/_tkinter.c | 4 +++- setup.py | 11 ++++++----- 7 files changed, 41 insertions(+), 14 deletions(-) diff --git a/Lib/codecs.py b/Lib/codecs.py index b283925e01f..b4103fb6e46 100644 --- a/Lib/codecs.py +++ b/Lib/codecs.py @@ -720,11 +720,19 @@ def make_encoding_map(decoding_map): ### 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 b216beb3364..dbfe2f58a3b 100644 --- a/Lib/copy.py +++ b/Lib/copy.py @@ -202,12 +202,12 @@ d[float] = _deepcopy_atomic 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 485e9e09f6a..a296caf6d05 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -144,7 +144,7 @@ else: 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 e387e63f5b8..36a21ce3dc4 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -221,6 +221,8 @@ Library 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 ccad8275866..a6c42b134bd 100644 --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -104,8 +104,15 @@ codec_encode(PyObject *self, PyObject *args) 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 @@ codec_decode(PyObject *self, PyObject *args) 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 76c2a4485bb..632f3d6c9a0 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -838,8 +838,10 @@ static PyGetSetDef PyTclObject_getsetlist[] = { }; static PyMethodDef PyTclObject_methods[] = { +#ifdef Py_USING_UNICODE {"__unicode__", (PyCFunction)PyTclObject_unicode, METH_NOARGS, PyTclObject_unicode__doc__}, +#endif {0} }; @@ -991,7 +993,7 @@ FromObj(PyObject* tkapp, Tcl_Obj *value) } } #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 85322a853fb..3411643a1dd 100644 --- a/setup.py +++ b/setup.py @@ -799,11 +799,12 @@ class PyBuildExt(build_ext): )) # 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: