calibre C modules compile on win64

This commit is contained in:
Kovid Goyal 2012-11-23 16:38:04 +05:30
parent 83601315a7
commit 833849a863
10 changed files with 59 additions and 35 deletions

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en' __docformat__ = 'restructuredtext en'
import os, socket, struct, subprocess, sys import os, socket, struct, subprocess, sys, glob
from distutils.spawn import find_executable from distutils.spawn import find_executable
from PyQt4 import pyqtconfig from PyQt4 import pyqtconfig
@ -36,7 +36,7 @@ if iswindows:
MT = os.path.join(os.path.dirname(p), 'bin', 'mt.exe') MT = os.path.join(os.path.dirname(p), 'bin', 'mt.exe')
MT = os.path.join(SDK, 'bin', 'mt.exe') MT = os.path.join(SDK, 'bin', 'mt.exe')
os.environ['QMAKESPEC'] = 'win32-msvc' os.environ['QMAKESPEC'] = 'win32-msvc'
ICU = r'Q:\icu' ICU = os.environ.get('ICU_DIR', r'Q:\icu')
QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake' QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake'
if find_executable('qmake-qt4'): if find_executable('qmake-qt4'):
@ -122,7 +122,8 @@ if iswindows:
zlib_lib_dirs = [sw_lib_dir] zlib_lib_dirs = [sw_lib_dir]
zlib_libs = ['zlib'] zlib_libs = ['zlib']
magick_inc_dirs = [os.path.join(prefix, 'build', 'ImageMagick-6.7.6')] md = glob.glob(os.path.join(prefix, 'build', 'ImageMagick-*'))[-1]
magick_inc_dirs = [md]
magick_lib_dirs = [os.path.join(magick_inc_dirs[0], 'VisualMagick', 'lib')] magick_lib_dirs = [os.path.join(magick_inc_dirs[0], 'VisualMagick', 'lib')]
magick_libs = ['CORE_RL_wand_', 'CORE_RL_magick_'] magick_libs = ['CORE_RL_wand_', 'CORE_RL_magick_']
podofo_inc = os.path.join(sw_inc_dir, 'podofo') podofo_inc = os.path.join(sw_inc_dir, 'podofo')

View File

@ -10,7 +10,7 @@ import sys, os, shutil, glob, py_compile, subprocess, re, zipfile, time, textwra
from setup import (Command, modules, functions, basenames, __version__, from setup import (Command, modules, functions, basenames, __version__,
__appname__) __appname__)
from setup.build_environment import msvc, MT, RC from setup.build_environment import msvc, MT, RC, is64bit
from setup.installer.windows.wix import WixMixIn from setup.installer.windows.wix import WixMixIn
ICU_DIR = os.environ.get('ICU_DIR', r'Q:\icu') ICU_DIR = os.environ.get('ICU_DIR', r'Q:\icu')
@ -88,6 +88,7 @@ class Win32Freeze(Command, WixMixIn):
self.archive_lib_dir() self.archive_lib_dir()
self.remove_CRT_from_manifests() self.remove_CRT_from_manifests()
self.create_installer() self.create_installer()
if not is64bit:
self.build_portable() self.build_portable()
self.build_portable_installer() self.build_portable_installer()

View File

@ -549,6 +549,16 @@ Get it from http://lloyd.github.com/easylzma/ (use the trunk version)
Run cmake and build the Visual Studio solution (generates CLI tools and dll and Run cmake and build the Visual Studio solution (generates CLI tools and dll and
static lib automatically) static lib automatically)
chmlib
-------
Download the zip source code from: http://www.jedrea.com/chmlib/
Run::
cd src && unzip ./ChmLib-ds6.zip
Then open ChmLib.dsw in Visual Studio, change the configuration to Release
(Win32|x64) and build solution, this will generate a static library in
Release/ChmLib.lib
calibre calibre
--------- ---------

View File

@ -696,7 +696,7 @@ PyObject* wpd::put_file(IPortableDevice *device, const wchar_t *parent_id, const
PyBytes_AsStringAndSize(raw, &buf, &bytes_read); PyBytes_AsStringAndSize(raw, &buf, &bytes_read);
if (bytes_read > 0) { if (bytes_read > 0) {
Py_BEGIN_ALLOW_THREADS; Py_BEGIN_ALLOW_THREADS;
hr = dest->Write(buf, bytes_read, &bytes_written); hr = dest->Write(buf, (ULONG)bytes_read, &bytes_written);
Py_END_ALLOW_THREADS; Py_END_ALLOW_THREADS;
Py_DECREF(raw); Py_DECREF(raw);
if (hr == STG_E_MEDIUMFULL) { PyErr_SetString(WPDError, "Cannot write to device as it is full"); break; } if (hr == STG_E_MEDIUMFULL) { PyErr_SetString(WPDError, "Cannot write to device as it is full"); break; }

View File

@ -101,7 +101,7 @@ cpalmdoc_rfind(Byte *data, Py_ssize_t pos, Py_ssize_t chunk_length) {
static Py_ssize_t static Py_ssize_t
cpalmdoc_do_compress(buffer *b, char *output) { cpalmdoc_do_compress(buffer *b, char *output) {
Py_ssize_t i = 0, j, chunk_len, dist; Py_ssize_t i = 0, j, chunk_len, dist;
unsigned compound; unsigned int compound;
Byte c, n; Byte c, n;
bool found; bool found;
char *head; char *head;
@ -119,7 +119,7 @@ cpalmdoc_do_compress(buffer *b, char *output) {
dist = i - j; dist = i - j;
if (j < i && dist <= 2047) { if (j < i && dist <= 2047) {
found = true; found = true;
compound = (dist << 3) + chunk_len-3; compound = (unsigned int)((dist << 3) + chunk_len-3);
*(output++) = CHAR(0x80 + (compound >> 8 )); *(output++) = CHAR(0x80 + (compound >> 8 ));
*(output++) = CHAR(compound & 0xFF); *(output++) = CHAR(compound & 0xFF);
i += chunk_len; i += chunk_len;
@ -148,7 +148,7 @@ cpalmdoc_do_compress(buffer *b, char *output) {
temp.data[temp.len++] = c; j++; temp.data[temp.len++] = c; j++;
} }
i += temp.len - 1; i += temp.len - 1;
*(output++) = temp.len; *(output++) = (char)temp.len;
for (j=0; j < temp.len; j++) *(output++) = (char)temp.data[j]; for (j=0; j < temp.len; j++) *(output++) = (char)temp.data[j];
} }
} }

View File

@ -167,7 +167,7 @@ static PyObject* add_font(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "s#", &data, &sz)) return NULL; if (!PyArg_ParseTuple(args, "s#", &data, &sz)) return NULL;
AddFontMemResourceEx(data, sz, NULL, &num); AddFontMemResourceEx(data, (DWORD)sz, NULL, &num);
return Py_BuildValue("k", num); return Py_BuildValue("k", num);
} }

View File

@ -49,7 +49,7 @@ to_woff(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "s#", &sfnt, &sz)) return NULL; if (!PyArg_ParseTuple(args, "s#", &sfnt, &sz)) return NULL;
woff = (char*)woffEncode((uint8_t*)sfnt, sz, 0, 0, &wofflen, &status); woff = (char*)woffEncode((uint8_t*)sfnt, (uint32_t)sz, 0, 0, &wofflen, &status);
if (WOFF_FAILURE(status) || woff == NULL) return woff_err(status); if (WOFF_FAILURE(status) || woff == NULL) return woff_err(status);
@ -68,7 +68,7 @@ from_woff(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "s#", &woff, &sz)) return NULL; if (!PyArg_ParseTuple(args, "s#", &woff, &sz)) return NULL;
sfnt = (char*)woffDecode((uint8_t*)woff, sz, &sfntlen, &status); sfnt = (char*)woffDecode((uint8_t*)woff, (uint32_t)sz, &sfntlen, &status);
if (WOFF_FAILURE(status) || sfnt == NULL) return woff_err(status); if (WOFF_FAILURE(status) || sfnt == NULL) return woff_err(status);
ans = Py_BuildValue("s#", sfnt, sfntlen); ans = Py_BuildValue("s#", sfnt, sfntlen);

View File

@ -129,7 +129,7 @@ icu_Collator_actual_locale(icu_Collator *self, void *closure) {
static PyObject * static PyObject *
icu_Collator_sort_key(icu_Collator *self, PyObject *args, PyObject *kwargs) { icu_Collator_sort_key(icu_Collator *self, PyObject *args, PyObject *kwargs) {
char *input; char *input;
Py_ssize_t sz; int32_t sz;
UChar *buf; UChar *buf;
uint8_t *buf2; uint8_t *buf2;
PyObject *ans; PyObject *ans;
@ -138,7 +138,7 @@ icu_Collator_sort_key(icu_Collator *self, PyObject *args, PyObject *kwargs) {
if (!PyArg_ParseTuple(args, "es", "UTF-8", &input)) return NULL; if (!PyArg_ParseTuple(args, "es", "UTF-8", &input)) return NULL;
sz = strlen(input); sz = (int32_t)strlen(input);
buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar)); buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar));
@ -177,14 +177,14 @@ icu_Collator_sort_key(icu_Collator *self, PyObject *args, PyObject *kwargs) {
static PyObject * static PyObject *
icu_Collator_strcmp(icu_Collator *self, PyObject *args, PyObject *kwargs) { icu_Collator_strcmp(icu_Collator *self, PyObject *args, PyObject *kwargs) {
char *a_, *b_; char *a_, *b_;
size_t asz, bsz; int32_t asz, bsz;
UChar *a, *b; UChar *a, *b;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
UCollationResult res = UCOL_EQUAL; UCollationResult res = UCOL_EQUAL;
if (!PyArg_ParseTuple(args, "eses", "UTF-8", &a_, "UTF-8", &b_)) return NULL; if (!PyArg_ParseTuple(args, "eses", "UTF-8", &a_, "UTF-8", &b_)) return NULL;
asz = strlen(a_); bsz = strlen(b_); asz = (int32_t)strlen(a_); bsz = (int32_t)strlen(b_);
a = (UChar*)calloc(asz*4 + 1, sizeof(UChar)); a = (UChar*)calloc(asz*4 + 1, sizeof(UChar));
b = (UChar*)calloc(bsz*4 + 1, sizeof(UChar)); b = (UChar*)calloc(bsz*4 + 1, sizeof(UChar));
@ -208,7 +208,7 @@ icu_Collator_strcmp(icu_Collator *self, PyObject *args, PyObject *kwargs) {
static PyObject * static PyObject *
icu_Collator_find(icu_Collator *self, PyObject *args, PyObject *kwargs) { icu_Collator_find(icu_Collator *self, PyObject *args, PyObject *kwargs) {
PyObject *a_, *b_; PyObject *a_, *b_;
size_t asz, bsz; int32_t asz, bsz;
UChar *a, *b; UChar *a, *b;
wchar_t *aw, *bw; wchar_t *aw, *bw;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
@ -216,7 +216,7 @@ icu_Collator_find(icu_Collator *self, PyObject *args, PyObject *kwargs) {
int32_t pos = -1, length = -1; int32_t pos = -1, length = -1;
if (!PyArg_ParseTuple(args, "UU", &a_, &b_)) return NULL; if (!PyArg_ParseTuple(args, "UU", &a_, &b_)) return NULL;
asz = PyUnicode_GetSize(a_); bsz = PyUnicode_GetSize(b_); asz = (int32_t)PyUnicode_GetSize(a_); bsz = (int32_t)PyUnicode_GetSize(b_);
a = (UChar*)calloc(asz*4 + 2, sizeof(UChar)); a = (UChar*)calloc(asz*4 + 2, sizeof(UChar));
b = (UChar*)calloc(bsz*4 + 2, sizeof(UChar)); b = (UChar*)calloc(bsz*4 + 2, sizeof(UChar));
@ -295,7 +295,7 @@ icu_Collator_contractions(icu_Collator *self, PyObject *args, PyObject *kwargs)
static PyObject * static PyObject *
icu_Collator_startswith(icu_Collator *self, PyObject *args, PyObject *kwargs) { icu_Collator_startswith(icu_Collator *self, PyObject *args, PyObject *kwargs) {
PyObject *a_, *b_; PyObject *a_, *b_;
size_t asz, bsz; int32_t asz, bsz;
int32_t actual_a, actual_b; int32_t actual_a, actual_b;
UChar *a, *b; UChar *a, *b;
wchar_t *aw, *bw; wchar_t *aw, *bw;
@ -303,7 +303,7 @@ icu_Collator_startswith(icu_Collator *self, PyObject *args, PyObject *kwargs) {
int ans = 0; int ans = 0;
if (!PyArg_ParseTuple(args, "UU", &a_, &b_)) return NULL; if (!PyArg_ParseTuple(args, "UU", &a_, &b_)) return NULL;
asz = PyUnicode_GetSize(a_); bsz = PyUnicode_GetSize(b_); asz = (int32_t)PyUnicode_GetSize(a_); bsz = (int32_t)PyUnicode_GetSize(b_);
if (asz < bsz) Py_RETURN_FALSE; if (asz < bsz) Py_RETURN_FALSE;
if (bsz == 0) Py_RETURN_TRUE; if (bsz == 0) Py_RETURN_TRUE;
@ -333,7 +333,7 @@ icu_Collator_startswith(icu_Collator *self, PyObject *args, PyObject *kwargs) {
static PyObject * static PyObject *
icu_Collator_collation_order(icu_Collator *self, PyObject *args, PyObject *kwargs) { icu_Collator_collation_order(icu_Collator *self, PyObject *args, PyObject *kwargs) {
PyObject *a_; PyObject *a_;
size_t asz; int32_t asz;
int32_t actual_a; int32_t actual_a;
UChar *a; UChar *a;
wchar_t *aw; wchar_t *aw;
@ -342,7 +342,7 @@ icu_Collator_collation_order(icu_Collator *self, PyObject *args, PyObject *kwarg
int order = 0, len = -1; int order = 0, len = -1;
if (!PyArg_ParseTuple(args, "U", &a_)) return NULL; if (!PyArg_ParseTuple(args, "U", &a_)) return NULL;
asz = PyUnicode_GetSize(a_); asz = (int32_t)PyUnicode_GetSize(a_);
a = (UChar*)calloc(asz*4 + 2, sizeof(UChar)); a = (UChar*)calloc(asz*4 + 2, sizeof(UChar));
aw = (wchar_t*)calloc(asz*4 + 2, sizeof(wchar_t)); aw = (wchar_t*)calloc(asz*4 + 2, sizeof(wchar_t));
@ -498,7 +498,7 @@ static PyObject *
icu_upper(PyObject *self, PyObject *args) { icu_upper(PyObject *self, PyObject *args) {
char *input, *ans, *buf3 = NULL; char *input, *ans, *buf3 = NULL;
const char *loc; const char *loc;
size_t sz; int32_t sz;
UChar *buf, *buf2; UChar *buf, *buf2;
PyObject *ret; PyObject *ret;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
@ -506,7 +506,7 @@ icu_upper(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL; if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL;
sz = strlen(input); sz = (int32_t)strlen(input);
buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar)); buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar));
buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar)); buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar));
@ -543,7 +543,7 @@ static PyObject *
icu_lower(PyObject *self, PyObject *args) { icu_lower(PyObject *self, PyObject *args) {
char *input, *ans, *buf3 = NULL; char *input, *ans, *buf3 = NULL;
const char *loc; const char *loc;
size_t sz; int32_t sz;
UChar *buf, *buf2; UChar *buf, *buf2;
PyObject *ret; PyObject *ret;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
@ -551,7 +551,7 @@ icu_lower(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL; if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL;
sz = strlen(input); sz = (int32_t)strlen(input);
buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar)); buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar));
buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar)); buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar));
@ -588,7 +588,7 @@ static PyObject *
icu_title(PyObject *self, PyObject *args) { icu_title(PyObject *self, PyObject *args) {
char *input, *ans, *buf3 = NULL; char *input, *ans, *buf3 = NULL;
const char *loc; const char *loc;
size_t sz; int32_t sz;
UChar *buf, *buf2; UChar *buf, *buf2;
PyObject *ret; PyObject *ret;
UErrorCode status = U_ZERO_ERROR; UErrorCode status = U_ZERO_ERROR;
@ -596,7 +596,7 @@ icu_title(PyObject *self, PyObject *args) {
if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL; if (!PyArg_ParseTuple(args, "ses", &loc, "UTF-8", &input)) return NULL;
sz = strlen(input); sz = (int32_t)strlen(input);
buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar)); buf = (UChar*)calloc(sz*4 + 1, sizeof(UChar));
buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar)); buf2 = (UChar*)calloc(sz*8 + 1, sizeof(UChar));

View File

@ -625,7 +625,8 @@ winutil_get_removable_drives(PyObject *self, PyObject *args) {
BOOL iterate = TRUE, ddebug = FALSE; BOOL iterate = TRUE, ddebug = FALSE;
PSP_DEVICE_INTERFACE_DETAIL_DATA interfaceDetailData; PSP_DEVICE_INTERFACE_DETAIL_DATA interfaceDetailData;
DWORD i; DWORD i;
unsigned int j, length; unsigned int j;
size_t length;
WCHAR volume[BUFSIZE]; WCHAR volume[BUFSIZE];
struct tagDrives g_drives[MAX_DRIVES]; struct tagDrives g_drives[MAX_DRIVES];
PyObject *volumes, *key, *candidates, *pdebug = Py_False, *temp; PyObject *volumes, *key, *candidates, *pdebug = Py_False, *temp;
@ -693,7 +694,8 @@ winutil_get_removable_drives(PyObject *self, PyObject *args) {
static PyObject * static PyObject *
winutil_get_usb_devices(PyObject *self, PyObject *args) { winutil_get_usb_devices(PyObject *self, PyObject *args) {
unsigned int j, buffersize; unsigned int j;
size_t buffersize;
HDEVINFO hDevInfo; HDEVINFO hDevInfo;
DWORD i; BOOL iterate = TRUE; DWORD i; BOOL iterate = TRUE;
PyObject *devices, *temp = (PyObject *)1; PyObject *devices, *temp = (PyObject *)1;
@ -827,14 +829,24 @@ winutil_strftime(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "s|O:strftime", &_fmt, &tup)) if (!PyArg_ParseTuple(args, "s|O:strftime", &_fmt, &tup))
return NULL; return NULL;
fmtlen = mbstowcs(NULL, _fmt, strlen(_fmt));
if (mbstowcs_s(&fmtlen, NULL, 0, _fmt, strlen(_fmt)) != 0) {
PyErr_SetString(PyExc_ValueError, "Failed to convert fmt to wchar");
return NULL;
}
fmt = (wchar_t *)PyMem_Malloc((fmtlen+2)*sizeof(wchar_t)); fmt = (wchar_t *)PyMem_Malloc((fmtlen+2)*sizeof(wchar_t));
if (fmt == NULL) return PyErr_NoMemory(); if (fmt == NULL) return PyErr_NoMemory();
mbstowcs(fmt, _fmt, fmtlen+1); if (mbstowcs_s(&fmtlen, fmt, fmtlen+2, _fmt, strlen(_fmt)) != 0) {
PyErr_SetString(PyExc_ValueError, "Failed to convert fmt to wchar");
goto end;
}
if (tup == NULL) { if (tup == NULL) {
time_t tt = time(NULL); time_t tt = time(NULL);
buf = *localtime(&tt); if(localtime_s(&buf, &tt) != 0) {
PyErr_SetString(PyExc_ValueError, "Failed to get localtime()");
goto end;
}
} else if (!gettmarg(tup, &buf)) } else if (!gettmarg(tup, &buf))
goto end; goto end;

View File

@ -10847,7 +10847,7 @@ void Style::drawBevelGradientReal(const QColor &base, QPainter *p, const QRect &
QLinearGradient g(r.topLeft(), horiz ? r.bottomLeft() : r.topRight()); QLinearGradient g(r.topLeft(), horiz ? r.bottomLeft() : r.topRight());
GradientStopCont::const_iterator it(grad->stops.begin()), GradientStopCont::const_iterator it(grad->stops.begin()),
end(grad->stops.end()); end(grad->stops.end());
int numStops(grad->stops.size()); size_t numStops(grad->stops.size());
for(int i=0; it!=end; ++it, ++i) for(int i=0; it!=end; ++it, ++i)
{ {