Fix issue on test on Windows with Python 3. (cherry-pick of hunks from r1822485 and its fix r1822486, on branch swig-py3) * build/generator/gen_base.py (IncludeDependencyInfo._scan_for_includes): Ensure file data is properly encoded as UTF8. (r1822485, r1822486) * build/generator/gen_win.py (WinGeneratorBase.makeguid): Ensure data input to hashlib is binary and not Unicode. (r1822485) * build/generator/gen_win_dependencies.py (GenDependenciesBase._find_swig, GenDependenciesBase._find_jdk): Ensure output from subprocess is properly decoded. (r1822485) Index: build/generator/gen_base.py =================================================================== --- build/generator/gen_base.py (revision 1868582) +++ build/generator/gen_base.py (working copy) @@ -1273,7 +1273,8 @@ Return a dictionary with included full file names as keys and None as values.""" hdrs = { } - for line in fileinput.input(fname): + + for line in fileinput.FileInput(fname, openhook=fileinput.hook_encoded("utf-8")): match = self._re_include.match(line) if not match: continue Index: build/generator/gen_win.py =================================================================== --- build/generator/gen_win.py (revision 1868582) +++ build/generator/gen_win.py (working copy) @@ -158,6 +158,13 @@ ### implement this from scratch using the algorithms described in ### http://www.webdav.org/specs/draft-leach-uuids-guids-01.txt + # Ensure data is in byte representation. If it doesn't have an encode + # attribute, assume it is already in the correct form. + try: + data = data.encode('utf8') + except AttributeError: + pass + myhash = hashlib_md5(data).hexdigest() guid = ("{%s-%s-%s-%s-%s}" % (myhash[0:8], myhash[8:12], Index: build/generator/gen_win_dependencies.py =================================================================== --- build/generator/gen_win_dependencies.py (revision 1868582) +++ build/generator/gen_win_dependencies.py (working copy) @@ -1080,7 +1080,7 @@ outfp = subprocess.Popen([os.path.join(jdk_path, 'bin', 'javac.exe'), '-version'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout - line = outfp.read() + line = outfp.read().decode('utf8') if line: vermatch = re.search(r'(([0-9]+(\.[0-9]+)+)(_[._0-9]+)?)', line, re.M) else: @@ -1138,7 +1138,7 @@ try: fp = subprocess.Popen([self.swig_exe, '-version'], stdout=subprocess.PIPE).stdout - txt = fp.read() + txt = fp.read().decode('utf8') if txt: vermatch = re.search(r'^SWIG\ Version\ (\d+)\.(\d+)\.(\d+)', txt, re.M) else: @@ -1166,7 +1166,7 @@ try: fp = subprocess.Popen([self.swig_exe, '-swiglib'], stdout=subprocess.PIPE).stdout - lib_dir = fp.readline().strip() + lib_dir = fp.readline().decode('utf8').strip() fp.close() except OSError: lib_dir = None