mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-05 14:44:24 -04:00
207 lines
7.4 KiB
Python
207 lines
7.4 KiB
Python
#!/usr/bin/env python
|
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
|
from __future__ import with_statement
|
|
|
|
__license__ = 'GPL v3'
|
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|
__docformat__ = 'restructuredtext en'
|
|
|
|
import os, subprocess, glob, re
|
|
from distutils.spawn import find_executable
|
|
|
|
import sipconfig
|
|
|
|
from setup import isosx, iswindows, is64bit, islinux
|
|
is64bit
|
|
|
|
OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk'
|
|
|
|
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5'
|
|
|
|
NMAKE = RC = msvc = MT = win_inc = win_lib = None
|
|
if iswindows:
|
|
from distutils import msvc9compiler
|
|
msvc = msvc9compiler.MSVCCompiler()
|
|
msvc.initialize()
|
|
NMAKE = msvc.find_exe('nmake.exe')
|
|
RC = msvc.find_exe('rc.exe')
|
|
SDK = os.environ.get('WINSDK', r'C:\Program Files\Microsoft SDKs\Windows\v7.0')
|
|
win_inc = os.environ['include'].split(';')
|
|
win_lib = os.environ['lib'].split(';')
|
|
for p in win_inc:
|
|
if 'SDK' in p:
|
|
MT = os.path.join(os.path.dirname(p), 'bin', 'mt.exe')
|
|
MT = os.path.join(SDK, 'Bin', 'mt.exe')
|
|
os.environ['QMAKESPEC'] = 'win32-msvc2008'
|
|
|
|
QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake'
|
|
for x in ('qmake-qt5', 'qt5-qmake', 'qmake'):
|
|
q = find_executable(x)
|
|
if q:
|
|
QMAKE = q
|
|
break
|
|
QMAKE = os.environ.get('QMAKE', QMAKE)
|
|
|
|
PKGCONFIG = find_executable('pkg-config')
|
|
PKGCONFIG = os.environ.get('PKG_CONFIG', PKGCONFIG)
|
|
|
|
def run_pkgconfig(name, envvar, default, flag, prefix):
|
|
ans = []
|
|
if envvar:
|
|
ev = os.environ.get(envvar, None)
|
|
if ev:
|
|
ans = [x.strip() for x in ev.split(os.pathsep)]
|
|
ans = [x for x in ans if x and (prefix=='-l' or os.path.exists(x))]
|
|
if not ans:
|
|
try:
|
|
raw = subprocess.Popen([PKGCONFIG, flag, name],
|
|
stdout=subprocess.PIPE).stdout.read()
|
|
ans = [x.strip() for x in raw.split(prefix)]
|
|
ans = [x for x in ans if x and (prefix=='-l' or os.path.exists(x))]
|
|
except:
|
|
print 'Failed to run pkg-config:', PKGCONFIG, 'for:', name
|
|
|
|
return ans or ([default] if default else [])
|
|
|
|
def pkgconfig_include_dirs(name, envvar, default):
|
|
return run_pkgconfig(name, envvar, default, '--cflags-only-I', '-I')
|
|
|
|
def pkgconfig_lib_dirs(name, envvar, default):
|
|
return run_pkgconfig(name, envvar, default,'--libs-only-L', '-L')
|
|
|
|
def pkgconfig_libs(name, envvar, default):
|
|
return run_pkgconfig(name, envvar, default,'--libs-only-l', '-l')
|
|
|
|
def consolidate(envvar, default):
|
|
val = os.environ.get(envvar, default)
|
|
ans = [x.strip() for x in val.split(os.pathsep)]
|
|
return [x for x in ans if x and os.path.exists(x)]
|
|
|
|
qraw = subprocess.check_output([QMAKE, '-query']).decode('utf-8')
|
|
def readvar(name):
|
|
return re.search('%s:(.+)$' % name, qraw, flags=re.M).group(1).strip()
|
|
|
|
|
|
pyqt = {x:readvar(y) for x, y in (
|
|
('inc', 'QT_INSTALL_HEADERS'), ('lib', 'QT_INSTALL_LIBS')
|
|
)}
|
|
c = sipconfig.Configuration()
|
|
pyqt['sip_bin'] = c.sip_bin + ('.exe' if iswindows and not c.sip_bin.endswith('.exe') else '')
|
|
|
|
from PyQt5.QtCore import PYQT_CONFIGURATION
|
|
pyqt['sip_flags'] = PYQT_CONFIGURATION['sip_flags']
|
|
def get_sip_dir(q):
|
|
for x in ('', 'PyQt5', 'sip/PyQt5'):
|
|
base = os.path.join(q, x)
|
|
if os.path.exists(os.path.join(base, 'QtWidgets')):
|
|
return base
|
|
return q
|
|
pyqt['pyqt_sip_dir'] = get_sip_dir(c.default_sip_dir)
|
|
pyqt['sip_inc_dir'] = c.sip_inc_dir
|
|
|
|
glib_flags = subprocess.check_output([PKGCONFIG, '--libs', 'glib-2.0']).strip() if islinux else ''
|
|
fontconfig_flags = subprocess.check_output([PKGCONFIG, '--libs', 'fontconfig']).strip() if islinux else ''
|
|
qt_inc = pyqt['inc']
|
|
qt_lib = pyqt['lib']
|
|
ft_lib_dirs = []
|
|
ft_libs = []
|
|
ft_inc_dirs = []
|
|
jpg_libs = []
|
|
jpg_lib_dirs = []
|
|
podofo_inc = '/usr/include/podofo'
|
|
podofo_lib = '/usr/lib'
|
|
chmlib_inc_dirs = chmlib_lib_dirs = []
|
|
sqlite_inc_dirs = []
|
|
icu_inc_dirs = []
|
|
icu_lib_dirs = []
|
|
zlib_inc_dirs = []
|
|
zlib_lib_dirs = []
|
|
zlib_libs = ['z']
|
|
|
|
if iswindows:
|
|
prefix = r'C:\cygwin64\home\kovid\sw'
|
|
sw_inc_dir = os.path.join(prefix, 'include')
|
|
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,
|
|
'source', 'i18n')]
|
|
icu_lib_dirs = [os.path.join(ICU, 'source', 'lib')]
|
|
sqlite_inc_dirs = [sw_inc_dir]
|
|
chmlib_inc_dirs = consolidate('CHMLIB_INC_DIR', os.path.join(prefix,
|
|
'build', 'chmlib-0.40', 'src'))
|
|
chmlib_lib_dirs = consolidate('CHMLIB_LIB_DIR', os.path.join(prefix,
|
|
'build', 'chmlib-0.40', 'src', 'Release'))
|
|
png_inc_dirs = [sw_inc_dir]
|
|
png_lib_dirs = [sw_lib_dir]
|
|
png_libs = ['png16']
|
|
jpg_lib_dirs = [sw_lib_dir]
|
|
jpg_libs = ['jpeg']
|
|
ft_lib_dirs = [sw_lib_dir]
|
|
ft_libs = ['freetype']
|
|
ft_inc_dirs = [os.path.join(sw_inc_dir, 'freetype2'), sw_inc_dir]
|
|
zlib_inc_dirs = [sw_inc_dir]
|
|
zlib_lib_dirs = [sw_lib_dir]
|
|
zlib_libs = ['zlib']
|
|
|
|
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_libs = ['CORE_RL_wand_', 'CORE_RL_magick_']
|
|
podofo_inc = os.path.join(sw_inc_dir, 'podofo')
|
|
podofo_lib = sw_lib_dir
|
|
elif isosx:
|
|
sw = os.environ.get('SW', '/sw')
|
|
podofo_inc = os.path.join(sw, 'podofo')
|
|
podofo_lib = os.path.join(sw, 'lib')
|
|
magick_inc_dirs = consolidate('MAGICK_INC', sw + '/include/ImageMagick')
|
|
magick_lib_dirs = consolidate('MAGICK_LIB', sw + '/lib')
|
|
magick_libs = ['MagickWand', 'MagickCore']
|
|
png_inc_dirs = consolidate('PNG_INC_DIR', sw + '/include')
|
|
png_lib_dirs = consolidate('PNG_LIB_DIR', sw + '/lib')
|
|
png_libs = ['png12']
|
|
ft_libs = ['freetype']
|
|
ft_inc_dirs = [sw + '/include/freetype2']
|
|
bq = glob.glob(sw + '/build/qt-*/include')[-1]
|
|
icu_inc_dirs = [sw + '/include']
|
|
icu_lib_dirs = [sw + '/lib']
|
|
else:
|
|
# Include directories
|
|
png_inc_dirs = pkgconfig_include_dirs('libpng', 'PNG_INC_DIR',
|
|
'/usr/include')
|
|
magick_inc_dirs = pkgconfig_include_dirs('MagickWand', 'MAGICK_INC', '/usr/include/ImageMagick')
|
|
|
|
# Library directories
|
|
png_lib_dirs = pkgconfig_lib_dirs('libpng', 'PNG_LIB_DIR', '/usr/lib')
|
|
magick_lib_dirs = pkgconfig_lib_dirs('MagickWand', 'MAGICK_LIB', '/usr/lib')
|
|
|
|
# Libraries
|
|
magick_libs = pkgconfig_libs('MagickWand', '', '')
|
|
if not magick_libs:
|
|
magick_libs = ['MagickWand', 'MagickCore']
|
|
png_libs = ['png']
|
|
ft_inc_dirs = pkgconfig_include_dirs('freetype2', 'FT_INC_DIR',
|
|
'/usr/include/freetype2')
|
|
ft_lib_dirs = pkgconfig_lib_dirs('freetype2', 'FT_LIB_DIR', '/usr/lib')
|
|
ft_libs = pkgconfig_libs('freetype2', '', '')
|
|
|
|
|
|
magick_error = None
|
|
if not magick_inc_dirs or not os.path.exists(os.path.join(magick_inc_dirs[0],
|
|
'wand')):
|
|
magick_error = ('ImageMagick not found on your system. '
|
|
'Try setting the environment variables MAGICK_INC '
|
|
'and MAGICK_LIB to help calibre locate the include and library '
|
|
'files.')
|
|
|
|
podofo_lib = os.environ.get('PODOFO_LIB_DIR', podofo_lib)
|
|
podofo_inc = os.environ.get('PODOFO_INC_DIR', podofo_inc)
|
|
podofo_error = None if os.path.exists(os.path.join(podofo_inc, 'podofo.h')) else \
|
|
('PoDoFo not found on your system. Various PDF related',
|
|
' functionality will not work. Use the PODOFO_INC_DIR and',
|
|
' PODOFO_LIB_DIR environment variables.')
|
|
|
|
BUILD_HOST='192.168.81.1'
|
|
PROJECT=os.path.basename(os.path.abspath('.'))
|
|
|
|
|