diff --git a/setup/build_environment.py b/setup/build_environment.py index b44c57f069..136976b251 100644 --- a/setup/build_environment.py +++ b/setup/build_environment.py @@ -34,6 +34,7 @@ if iswindows: MT = os.path.join(os.path.dirname(p), 'bin', 'mt.exe') MT = os.path.join(SDK, 'bin', 'mt.exe') os.environ['QMAKESPEC'] = 'win32-msvc' + ICU = r'Q:\icu' QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake' if find_executable('qmake-qt4'): @@ -97,8 +98,9 @@ if iswindows: prefix = r'C:\cygwin\home\kovid\sw' sw_inc_dir = os.path.join(prefix, 'include') sw_lib_dir = os.path.join(prefix, 'lib') - icu_inc_dirs = [sw_inc_dir] - icu_lib_dirs = [sw_lib_dir] + icu_inc_dirs = [os.path.join(ICU, 'source', 'common'), os.path.join(ICU, + 'source', 'i18n')] + icu_lib_dirs = [os.path.join(ICU, 'source', 'lib')] sqlite_inc_dirs = [sw_inc_dir] fc_inc = os.path.join(sw_inc_dir, 'fontconfig') fc_lib = sw_lib_dir diff --git a/setup/installer/windows/freeze.py b/setup/installer/windows/freeze.py index 7904ddce6b..48dd2479c2 100644 --- a/setup/installer/windows/freeze.py +++ b/setup/installer/windows/freeze.py @@ -13,6 +13,7 @@ from setup import (Command, modules, functions, basenames, __version__, from setup.build_environment import msvc, MT, RC from setup.installer.windows.wix import WixMixIn +ICU_DIR = r'Q:\icu' OPENSSL_DIR = r'Q:\openssl' QT_DIR = 'Q:\\Qt\\4.8.2' QT_DLLS = ['Core', 'Gui', 'Network', 'Svg', 'WebKit', 'Xml', 'XmlPatterns'] @@ -147,6 +148,8 @@ class Win32Freeze(Command, WixMixIn): ignore=shutil.ignore_patterns('msvc*.dll', 'Microsoft.*')) for x in glob.glob(self.j(OPENSSL_DIR, 'bin', '*.dll')): shutil.copy2(x, self.dll_dir) + for x in glob.glob(self.j(ICU_DIR, 'source', 'lib', '*.dll')): + shutil.copy2(x, self.dll_dir) for x in QT_DLLS: x += '4.dll' if not x.startswith('phonon'): x = 'Qt'+x diff --git a/setup/installer/windows/notes.rst b/setup/installer/windows/notes.rst index f987f83a3b..7ff1593988 100644 --- a/setup/installer/windows/notes.rst +++ b/setup/installer/windows/notes.rst @@ -131,11 +131,22 @@ calibre-debug -c "import _imaging, _imagingmath, _imagingft, _imagingcms" ICU ------- -Download the win32 msvc9 binary from http://www.icu-project.org/download/4.4.html +Download the win32 source .zip from http://www.icu-project.org/download -Note that 4.4 is the last version of ICU that can be compiled (is precompiled) with msvc9 +Extract to q:\icu -Put the dlls into sw/bin and the unicode dir into sw/include and the contents of lib int sw/lib +Add Q:\icu\bin to PATH and reboot + +In a Visual Studio Command Prompt +cd to \source +Run set PATH=%PATH%;c:\cygwin\bin +Run dos2unix on configure and runConfigureICU + +Run bash ./runConfigureICU Cygwin/MSVC + +Run make (note that you must have GNU make installed in cygwin) + +Optionally run make test Libunrar ---------- diff --git a/src/calibre/utils/icu.py b/src/calibre/utils/icu.py index 273e3355a6..c4778fcb24 100644 --- a/src/calibre/utils/icu.py +++ b/src/calibre/utils/icu.py @@ -276,23 +276,21 @@ pêché''' german = create(german) c = _icu.Collator('de') - print 'Sorted german:: (%s)'%c.actual_locale gs = list(sorted(german, key=c.sort_key)) for x in gs: print '\t', x.encode('utf-8') if gs != create(german_good): - print 'German failed' + print 'German sorting failed' return print french = create(french) c = _icu.Collator('fr') - print 'Sorted french:: (%s)'%c.actual_locale fs = list(sorted(french, key=c.sort_key)) for x in fs: print '\t', x.encode('utf-8') if fs != create(french_good): - print 'French failed (note that French fails with icu < 4.6 i.e. on windows and OS X)' - # return + print 'French sorting failed (note that French fails with icu < 4.6)' + return test_strcmp(german + french) print '\nTesting case transforms in current locale' @@ -309,13 +307,16 @@ pêché''' u'Štepánek':u'Štepanek'}.iteritems(): if primary_strcmp(k, v) != 0: print 'primary_strcmp() failed with %s != %s'%(k, v) + return if primary_find(v, u' '+k)[0] != 1: print 'primary_find() failed with %s not in %s'%(v, k) + return global _primary_collator _primary_collator = _icu.Collator('es') if primary_strcmp(u'peña', u'pena') == 0: print 'Primary collation in Spanish locale failed' + return # }}}