Start work on porting windows build scripts

This commit is contained in:
Kovid Goyal 2014-06-07 13:21:38 +05:30
parent 496a0789fd
commit 06cbf5fad3
2 changed files with 11 additions and 42 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, glob, re import os, subprocess, glob, re
from distutils.spawn import find_executable from distutils.spawn import find_executable
import sipconfig import sipconfig
@ -18,25 +18,21 @@ OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk'
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5' os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5'
NMAKE = RC = msvc = MT = win_inc = win_lib = win_ddk = win_ddk_lib_dirs = None NMAKE = RC = msvc = MT = win_inc = win_lib = None
if iswindows: if iswindows:
from distutils import msvc9compiler from distutils import msvc9compiler
msvc = msvc9compiler.MSVCCompiler() msvc = msvc9compiler.MSVCCompiler()
msvc.initialize() msvc.initialize()
NMAKE = msvc.find_exe('nmake.exe') NMAKE = msvc.find_exe('nmake.exe')
RC = msvc.find_exe('rc.exe') RC = msvc.find_exe('rc.exe')
SDK = os.environ.get('WINSDK', r'C:\Program Files\Microsoft SDKs\Windows\v6.0A') SDK = os.environ.get('WINSDK', r'C:\Program Files\Microsoft SDKs\Windows\v7.0')
DDK = os.environ.get('WINDDK', r'Q:\WinDDK\7600.16385.0')
win_ddk = [DDK+'\\inc\\'+x for x in ('atl71',)]
win_ddk_lib_dirs = [DDK+'\\lib\\ATL\\i386']
win_inc = os.environ['include'].split(';') win_inc = os.environ['include'].split(';')
win_lib = os.environ['lib'].split(';') win_lib = os.environ['lib'].split(';')
for p in win_inc: for p in win_inc:
if 'SDK' in p: if 'SDK' in p:
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-msvc2008'
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'
for x in ('qmake-qt5', 'qt5-qmake', 'qmake'): for x in ('qmake-qt5', 'qt5-qmake', 'qmake'):
@ -122,9 +118,10 @@ zlib_lib_dirs = []
zlib_libs = ['z'] zlib_libs = ['z']
if iswindows: if iswindows:
prefix = r'C:\cygwin\home\kovid\sw' prefix = r'C:\cygwin64\home\kovid\sw'
sw_inc_dir = os.path.join(prefix, 'include') sw_inc_dir = os.path.join(prefix, 'include')
sw_lib_dir = os.path.join(prefix, 'lib') sw_lib_dir = os.path.join(prefix, 'lib')
ICU = os.environ.get('ICU_DIR', os.path.join(prefix, 'private', 'icu'))
icu_inc_dirs = [os.path.join(ICU, 'source', 'common'), os.path.join(ICU, icu_inc_dirs = [os.path.join(ICU, 'source', 'common'), os.path.join(ICU,
'source', 'i18n')] 'source', 'i18n')]
icu_lib_dirs = [os.path.join(ICU, 'source', 'lib')] icu_lib_dirs = [os.path.join(ICU, 'source', 'lib')]
@ -135,7 +132,7 @@ if iswindows:
'build', 'chmlib-0.40', 'src', 'Release')) 'build', 'chmlib-0.40', 'src', 'Release'))
png_inc_dirs = [sw_inc_dir] png_inc_dirs = [sw_inc_dir]
png_lib_dirs = [sw_lib_dir] png_lib_dirs = [sw_lib_dir]
png_libs = ['png12'] png_libs = ['png16']
jpg_lib_dirs = [sw_lib_dir] jpg_lib_dirs = [sw_lib_dir]
jpg_libs = ['jpeg'] jpg_libs = ['jpeg']
ft_lib_dirs = [sw_lib_dir] ft_lib_dirs = [sw_lib_dir]
@ -202,29 +199,7 @@ podofo_error = None if os.path.exists(os.path.join(podofo_inc, 'podofo.h')) else
' functionality will not work. Use the PODOFO_INC_DIR and', ' functionality will not work. Use the PODOFO_INC_DIR and',
' PODOFO_LIB_DIR environment variables.') ' PODOFO_LIB_DIR environment variables.')
def get_ip_address(ifname): BUILD_HOST='192.168.81.1'
import fcntl
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
return socket.inet_ntoa(fcntl.ioctl(
s.fileno(),
0x8915, # SIOCGIFADDR
struct.pack('256s', ifname[:15])
)[20:24])
HOST='192.168.1.2'
try:
import netifaces
for iface in netifaces.interfaces():
addrs = netifaces.ifaddresses(iface).get(netifaces.AF_INET, [])
if len(addrs) > 0 and 'addr' in addrs[0]:
q = addrs[0]['addr']
if q.startswith('192.168.1.'):
HOST = q
break
except (Exception, ImportError) as e:
print ('Failed to detect host ip address with error: %s' % e)
PROJECT=os.path.basename(os.path.abspath('.')) PROJECT=os.path.basename(os.path.abspath('.'))

View File

@ -13,9 +13,9 @@ from multiprocessing import cpu_count
from setup import Command, islinux, isbsd, isosx, SRC, iswindows, __version__ from setup import Command, islinux, isbsd, isosx, SRC, iswindows, __version__
from setup.build_environment import (chmlib_inc_dirs, from setup.build_environment import (chmlib_inc_dirs,
podofo_inc, podofo_lib, podofo_error, pyqt, OSX_SDK, NMAKE, QMAKE, podofo_inc, podofo_lib, podofo_error, pyqt, OSX_SDK, NMAKE, QMAKE,
msvc, MT, win_inc, win_lib, win_ddk, magick_inc_dirs, magick_lib_dirs, msvc, MT, win_inc, win_lib, magick_inc_dirs, magick_lib_dirs,
magick_libs, chmlib_lib_dirs, sqlite_inc_dirs, icu_inc_dirs, magick_libs, chmlib_lib_dirs, sqlite_inc_dirs, icu_inc_dirs,
icu_lib_dirs, win_ddk_lib_dirs, ft_libs, ft_lib_dirs, ft_inc_dirs, icu_lib_dirs, ft_libs, ft_lib_dirs, ft_inc_dirs,
zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit, glib_flags, fontconfig_flags) zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit, glib_flags, fontconfig_flags)
MT MT
isunix = islinux or isosx or isbsd isunix = islinux or isosx or isbsd
@ -45,7 +45,6 @@ class Extension(object):
self.cflags = kwargs.get('cflags', []) self.cflags = kwargs.get('cflags', [])
self.ldflags = kwargs.get('ldflags', []) self.ldflags = kwargs.get('ldflags', [])
self.optional = kwargs.get('optional', False) self.optional = kwargs.get('optional', False)
self.needs_ddk = kwargs.get('needs_ddk', False)
of = kwargs.get('optimize_level', None) of = kwargs.get('optimize_level', None)
if of is None: if of is None:
of = '/Ox' if iswindows else '-O3' of = '/Ox' if iswindows else '-O3'
@ -271,7 +270,6 @@ if iswindows:
'calibre/devices/mtp/windows/global.h', 'calibre/devices/mtp/windows/global.h',
], ],
libraries=['ole32', 'oleaut32', 'portabledeviceguids', 'user32'], libraries=['ole32', 'oleaut32', 'portabledeviceguids', 'user32'],
# needs_ddk=True,
cflags=['/X'] cflags=['/X']
), ),
Extension('winfonts', Extension('winfonts',
@ -445,10 +443,6 @@ class Build(Command):
obj_dir = self.j(self.obj_dir, ext.name) obj_dir = self.j(self.obj_dir, ext.name)
ext.preflight(obj_dir, compiler, linker, self, cflags, ldflags) ext.preflight(obj_dir, compiler, linker, self, cflags, ldflags)
einc = self.inc_dirs_to_cflags(ext.inc_dirs) einc = self.inc_dirs_to_cflags(ext.inc_dirs)
if ext.needs_ddk:
ddk_flags = ['-I'+x for x in win_ddk]
cflags.extend(ddk_flags)
ldflags.extend(['/LIBPATH:'+x for x in win_ddk_lib_dirs])
if not os.path.exists(obj_dir): if not os.path.exists(obj_dir):
os.makedirs(obj_dir) os.makedirs(obj_dir)
for src in ext.sources: for src in ext.sources: