mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix building of headless QPA extension on Arch
This commit is contained in:
parent
8da98e8ba4
commit
96dcc8c939
@ -43,24 +43,23 @@ if iswindows:
|
||||
ICU = os.environ.get('ICU_DIR', r'Q:\icu')
|
||||
|
||||
QMAKE = '/Volumes/sw/qt/bin/qmake' if isosx else 'qmake'
|
||||
if find_executable('qmake-qt4'):
|
||||
QMAKE = find_executable('qmake-qt4')
|
||||
elif find_executable('qmake'):
|
||||
QMAKE = find_executable('qmake')
|
||||
for x in ('qmake-qt5', 'qt5-qmake', 'qmake'):
|
||||
q = find_executable(x)
|
||||
if q:
|
||||
QMAKE = q
|
||||
break
|
||||
QMAKE = os.environ.get('QMAKE', QMAKE)
|
||||
|
||||
# QT5XX: Change this to real qmake detection
|
||||
QMAKE = '/opt/qt5/bin/qmake'
|
||||
|
||||
PKGCONFIG = find_executable('pkg-config')
|
||||
PKGCONFIG = os.environ.get('PKG_CONFIG', PKGCONFIG)
|
||||
|
||||
def run_pkgconfig(name, envvar, default, flag, prefix):
|
||||
ans = []
|
||||
if envvar:
|
||||
ans = os.environ.get(envvar, default)
|
||||
ans = [x.strip() for x in ans.split(os.pathsep)]
|
||||
ans = [x for x in ans if x and (prefix=='-l' or os.path.exists(x))]
|
||||
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],
|
||||
@ -70,7 +69,7 @@ def run_pkgconfig(name, envvar, default, flag, prefix):
|
||||
except:
|
||||
print 'Failed to run pkg-config:', PKGCONFIG, 'for:', name
|
||||
|
||||
return ans
|
||||
return ans or ([default] if default else [])
|
||||
|
||||
def pkgconfig_include_dirs(name, envvar, default):
|
||||
return run_pkgconfig(name, envvar, default, '--cflags-only-I', '-I')
|
||||
@ -90,6 +89,7 @@ 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')
|
||||
)}
|
||||
@ -97,9 +97,16 @@ c = sipconfig.Configuration()
|
||||
pyqt['sip_bin'] = c.sip_bin
|
||||
from PyQt5.QtCore import PYQT_CONFIGURATION
|
||||
pyqt['sip_flags'] = PYQT_CONFIGURATION['sip_flags']
|
||||
pyqt['default_sip_dir'] = c.default_sip_dir
|
||||
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']) if islinux else ''
|
||||
qt_inc = pyqt['inc']
|
||||
qt_lib = pyqt['lib']
|
||||
ft_lib_dirs = []
|
||||
|
@ -16,7 +16,7 @@ from setup.build_environment import (chmlib_inc_dirs,
|
||||
msvc, MT, win_inc, win_lib, win_ddk, magick_inc_dirs, magick_lib_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,
|
||||
zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit)
|
||||
zlib_libs, zlib_lib_dirs, zlib_inc_dirs, is64bit, glib_flags)
|
||||
MT
|
||||
isunix = islinux or isosx or isbsd
|
||||
|
||||
@ -514,6 +514,13 @@ class Build(Command):
|
||||
target = self.dest('headless')
|
||||
if not self.newer(target, headers + sources + others):
|
||||
return
|
||||
# Arch monkey patches qmake as a result of which it fails to add
|
||||
# glib-2.0 to the list of library dependencies. Compiling QPA
|
||||
# plugins uses the static libQt5PlatformSupport.a which needs glib
|
||||
# to be specified after it for linking to succeed, so we add it to
|
||||
# QMAKE_LIBS_PRIVATE (we cannot use LIBS as that would put -lglib-2.0
|
||||
# before libQt5PlatformSupport.
|
||||
|
||||
pro = textwrap.dedent(
|
||||
'''\
|
||||
TARGET = headless
|
||||
@ -526,8 +533,9 @@ class Build(Command):
|
||||
OTHER_FILES = {others}
|
||||
DESTDIR = {destdir}
|
||||
CONFIG -= create_cmake # Prevent qmake from generating a cmake build file which it puts in the calibre src directory
|
||||
QMAKE_LIBS_PRIVATE += {glib}
|
||||
''').format(
|
||||
headers=' '.join(headers), sources=' '.join(sources), others=' '.join(others), destdir=self.d(target))
|
||||
headers=' '.join(headers), sources=' '.join(sources), others=' '.join(others), destdir=self.d(target), glib=glib_flags)
|
||||
bdir = self.j(self.d(self.SRC), 'build', 'headless')
|
||||
if not os.path.exists(bdir):
|
||||
os.makedirs(bdir)
|
||||
@ -550,7 +558,7 @@ class Build(Command):
|
||||
sbf = self.j(src_dir, self.b(sipf)+'.sbf')
|
||||
if self.newer(sbf, [sipf]+ext.headers):
|
||||
cmd = [pyqt['sip_bin'], '-w', '-c', src_dir, '-b', sbf, '-I'+
|
||||
pyqt['default_sip_dir']+'/sip/PyQt5'] + shlex.split(pyqt['sip_flags']) + [sipf]
|
||||
pyqt['pyqt_sip_dir']] + shlex.split(pyqt['sip_flags']) + [sipf]
|
||||
self.info(' '.join(cmd))
|
||||
self.check_call(cmd)
|
||||
self.info('')
|
||||
|
Loading…
x
Reference in New Issue
Block a user