
It seems that GitHub's output changed slightly for this patch (one more letter for both short hashes on the index line), probably due to the number of objects in the repository.
421 lines
15 KiB
Python
421 lines
15 KiB
Python
# Copyright 2013-2019 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
from spack import *
|
|
import platform
|
|
import os
|
|
import sys
|
|
|
|
|
|
class Qt(Package):
|
|
"""Qt is a comprehensive cross-platform C++ application framework."""
|
|
homepage = 'http://qt.io'
|
|
# Alternative location 'http://download.qt.io/official_releases/qt/'
|
|
url = 'http://download.qt.io/archive/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.gz'
|
|
list_url = 'http://download.qt.io/archive/qt/'
|
|
list_depth = 3
|
|
|
|
version('5.11.3', '859417642713cee2493ee3646a7fee782c9f1db39e41d7bb1322bba0c5f0ff4d')
|
|
version('5.11.2', 'c6104b840b6caee596fa9a35bc5f57f67ed5a99d6a36497b6fe66f990a53ca81')
|
|
version('5.10.0', 'c5e275ab0ed7ee61d0f4b82cd471770d')
|
|
version('5.9.1', '77b4af61c49a09833d4df824c806acaf')
|
|
version('5.9.0', '9c8bc8b828c2b56721980368266df9d9')
|
|
version('5.8.0', 'a9f2494f75f966e2f22358ec367d8f41')
|
|
version('5.7.1', '031fb3fd0c3cc0f1082644492683f18d')
|
|
version('5.7.0', '9a46cce61fc64c20c3ac0a0e0fa41b42')
|
|
version('5.5.1', '59f0216819152b77536cf660b015d784')
|
|
version('5.4.2', 'fa1c4d819b401b267eb246a543a63ea5')
|
|
version('5.4.0', 'e8654e4b37dd98039ba20da7a53877e6')
|
|
version('5.3.2', 'febb001129927a70174467ecb508a682')
|
|
version('5.2.1', 'a78408c887c04c34ce615da690e0b4c8')
|
|
version('4.8.6', '2edbe4d6c2eff33ef91732602f3518eb')
|
|
version('4.8.5', '1864987bdbb2f58f8ae8b350dfdbe133')
|
|
version('3.3.8b', '9f05b4125cfe477cc52c9742c3c09009')
|
|
|
|
# Add patch for compile issues with qt3 found with use in the
|
|
# OpenSpeedShop project
|
|
variant('krellpatch', default=False,
|
|
description="Build with openspeedshop based patch.")
|
|
variant('gtk', default=False,
|
|
description="Build with gtkplus.")
|
|
variant('webkit', default=False,
|
|
description="Build the Webkit extension")
|
|
variant('examples', default=False,
|
|
description="Build examples.")
|
|
variant('dbus', default=False,
|
|
description="Build with D-Bus support.")
|
|
variant('phonon', default=False,
|
|
description="Build with phonon support.")
|
|
variant('opengl', default=False,
|
|
description="Build with OpenGL support.")
|
|
|
|
# fix installation of pkgconfig files
|
|
# see https://github.com/Homebrew/homebrew-core/pull/5951
|
|
patch('restore-pc-files.patch', when='@5.9: platform=darwin')
|
|
|
|
patch('qt3accept.patch', when='@3.3.8b')
|
|
patch('qt3krell.patch', when='@3.3.8b+krellpatch')
|
|
patch('qt3ptrdiff.patch', when='@3.3.8b')
|
|
|
|
# see https://bugreports.qt.io/browse/QTBUG-57656
|
|
patch('QTBUG-57656.patch', when='@5.8.0')
|
|
# see https://bugreports.qt.io/browse/QTBUG-58038
|
|
patch('QTBUG-58038.patch', when='@5.8.0')
|
|
|
|
# https://github.com/xboxdrv/xboxdrv/issues/188
|
|
patch('btn_trigger_happy.patch', when='@5.7.0:')
|
|
|
|
# https://github.com/spack/spack/issues/1517
|
|
patch('qt5-pcre.patch', when='@5:')
|
|
|
|
patch('qt4-corewlan-new-osx.patch', when='@4')
|
|
patch('qt4-pcre-include-conflict.patch', when='@4')
|
|
patch('qt4-el-capitan.patch', when='@4')
|
|
|
|
# Allow Qt's configure script to build the webkit option with more
|
|
# recent versions of gcc.
|
|
# https://github.com/spack/spack/issues/9205
|
|
# https://github.com/spack/spack/issues/9209
|
|
patch('qt4-gcc-and-webkit.patch', when='@4')
|
|
|
|
# Fix build failure with newer versions of GCC
|
|
patch('https://github.com/qt/qtbase/commit/a52d7861edfb5956de38ba80015c4dd0b596259b.patch',
|
|
sha256='c49b228c27e3ad46ec3af4bac0e9985af5b5b28760f238422d32e14f98e49b1e',
|
|
working_dir='qtbase',
|
|
when='@5.10:5.12.0 %gcc@9:')
|
|
|
|
# https://bugreports.qt.io/browse/QTBUG-74196
|
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89585
|
|
patch('qt4-gcc8.3-asm-volatile-fix.patch', when='@4')
|
|
patch('qt5-gcc8.3-asm-volatile-fix.patch', when='@5.0.0:5.12.1')
|
|
|
|
depends_on("pkgconfig", type='build')
|
|
# Use system openssl for security.
|
|
depends_on("openssl@:1.0", when='@:5.9')
|
|
depends_on("openssl")
|
|
depends_on("glib", when='@4:')
|
|
depends_on("gtkplus", when='+gtk')
|
|
depends_on("libxml2")
|
|
depends_on("zlib")
|
|
depends_on("dbus", when='@4:+dbus')
|
|
depends_on("libtiff")
|
|
depends_on("libpng@1.2.57", when='@3')
|
|
depends_on("libpng", when='@4:')
|
|
depends_on("libmng")
|
|
depends_on("jpeg")
|
|
depends_on("icu4c")
|
|
depends_on("fontconfig", when=(sys.platform != 'darwin')) # (Unix only)
|
|
depends_on("freetype")
|
|
depends_on("sqlite", type=('build', 'run'))
|
|
depends_on("pcre+multibyte", when='@5.0:5.8')
|
|
depends_on("pcre2+multibyte", when='@5.9:')
|
|
depends_on("double-conversion", when='@5.7:')
|
|
depends_on("harfbuzz", when='@5:')
|
|
|
|
# Core options:
|
|
# -doubleconversion [system/qt/no]
|
|
# -iconv [posix/sun/gnu/no] (Unix only)
|
|
# -pcre [system/qt]
|
|
|
|
# Gui, printing, widget options:
|
|
# -harfbuzz [system/qt/no]
|
|
# -xkbcommon-x11 [system/qt/no]
|
|
# -system-xkbcommon
|
|
|
|
# Database options:
|
|
# -sqlite [system/qt]
|
|
|
|
# Qt3D options:
|
|
# -assimp [system/qt/no]
|
|
|
|
# QtQml
|
|
depends_on("python", when='@5.7.0:', type='build')
|
|
|
|
# OpenGL hardware acceleration
|
|
depends_on("gl@3.2:", when='@4:+opengl')
|
|
# xcb is Linux-specific
|
|
depends_on("libxcb", when=sys.platform != 'darwin')
|
|
depends_on("xcb-util-image", when=sys.platform != 'darwin')
|
|
depends_on("xcb-util-keysyms", when=sys.platform != 'darwin')
|
|
depends_on("xcb-util-wm", when=sys.platform != 'darwin')
|
|
depends_on("xcb-util-renderutil", when=sys.platform != 'darwin')
|
|
depends_on("libxkbcommon", when=sys.platform != 'darwin')
|
|
depends_on("inputproto", when='@:5.8')
|
|
depends_on("libx11", when=sys.platform != 'darwin')
|
|
|
|
if sys.platform != 'darwin':
|
|
depends_on("libxext", when='@3:4.99')
|
|
|
|
# Webkit
|
|
depends_on("flex", when='+webkit', type='build')
|
|
depends_on("bison", when='+webkit', type='build')
|
|
depends_on("gperf", when='+webkit')
|
|
|
|
# Multimedia
|
|
# depends_on("gstreamer", when='+multimedia')
|
|
# depends_on("pulse", when='+multimedia')
|
|
# depends_on("flac", when='+multimedia')
|
|
# depends_on("ogg", when='+multimedia')
|
|
# -pulseaudio [auto] (Unix only)
|
|
# -alsa [auto] (Unix only)
|
|
|
|
# Webengine options:
|
|
# -webengine-alsa [auto] (Linux only)
|
|
# -webengine-pulseaudio [auto] (Linux only)
|
|
# -webengine-embedded-build [auto] (Linux only)
|
|
# -webengine-icu [system/qt] (Linux only)
|
|
# -webengine-ffmpeg [system/qt] (Linux only)
|
|
# -webengine-opus [system/qt] (Linux only)
|
|
# -webengine-webp [system/qt] (Linux only)
|
|
|
|
use_xcode = True
|
|
|
|
def url_for_version(self, version):
|
|
# URL keeps getting more complicated with every release
|
|
url = self.list_url
|
|
|
|
if version >= Version('4.0'):
|
|
url += str(version.up_to(2)) + '/'
|
|
else:
|
|
url += str(version.up_to(1)) + '/'
|
|
|
|
if version >= Version('4.8'):
|
|
url += str(version) + '/'
|
|
|
|
if version >= Version('5'):
|
|
url += 'single/'
|
|
|
|
url += 'qt-'
|
|
|
|
if version >= Version('4.6'):
|
|
url += 'everywhere-'
|
|
elif version >= Version('2.1'):
|
|
url += 'x11-'
|
|
|
|
if version >= Version('5.10.0'):
|
|
url += 'src-'
|
|
elif version >= Version('4.0'):
|
|
url += 'opensource-src-'
|
|
elif version >= Version('3'):
|
|
url += 'free-'
|
|
|
|
# 5.9 only has xz format. From 5.2.1 -> 5.8.0 .gz or .xz were possible
|
|
if version >= Version('5.9'):
|
|
url += str(version) + '.tar.xz'
|
|
else:
|
|
url += str(version) + '.tar.gz'
|
|
|
|
return url
|
|
|
|
def setup_environment(self, spack_env, run_env):
|
|
spack_env.set('MAKEFLAGS', '-j{0}'.format(make_jobs))
|
|
run_env.set('QTDIR', self.prefix)
|
|
|
|
def setup_dependent_environment(self, spack_env, run_env, dependent_spec):
|
|
spack_env.set('QTDIR', self.prefix)
|
|
|
|
def setup_dependent_package(self, module, dependent_spec):
|
|
module.qmake = Executable(join_path(self.spec.prefix.bin, 'qmake'))
|
|
|
|
def patch(self):
|
|
if self.spec.satisfies('@4'):
|
|
# Fix qmake compilers in the default mkspec
|
|
filter_file('^QMAKE_CC .*', 'QMAKE_CC = cc',
|
|
'mkspecs/common/g++-base.conf')
|
|
filter_file('^QMAKE_CXX .*', 'QMAKE_CXX = c++',
|
|
'mkspecs/common/g++-base.conf')
|
|
|
|
# Necessary to build with GCC 6 and other modern compilers
|
|
# http://stackoverflow.com/questions/10354371/
|
|
filter_file('(^QMAKE_CXXFLAGS .*)', r'\1 -std=gnu++98',
|
|
'mkspecs/common/gcc-base.conf')
|
|
|
|
filter_file('^QMAKE_LFLAGS_NOUNDEF .*', 'QMAKE_LFLAGS_NOUNDEF = ',
|
|
'mkspecs/common/g++-unix.conf')
|
|
elif self.spec.satisfies('@5:'):
|
|
# Fix qmake compilers in the default mkspec
|
|
filter_file('^QMAKE_COMPILER .*', 'QMAKE_COMPILER = cc',
|
|
'qtbase/mkspecs/common/g++-base.conf')
|
|
filter_file('^QMAKE_CC .*', 'QMAKE_CC = cc',
|
|
'qtbase/mkspecs/common/g++-base.conf')
|
|
filter_file('^QMAKE_CXX .*', 'QMAKE_CXX = c++',
|
|
'qtbase/mkspecs/common/g++-base.conf')
|
|
|
|
filter_file('^QMAKE_LFLAGS_NOUNDEF .*', 'QMAKE_LFLAGS_NOUNDEF = ',
|
|
'qtbase/mkspecs/common/g++-unix.conf')
|
|
|
|
@property
|
|
def common_config_args(self):
|
|
# incomplete list is here http://doc.qt.io/qt-5/configure-options.html
|
|
config_args = [
|
|
'-prefix', self.prefix,
|
|
'-v',
|
|
'-opensource',
|
|
'-{0}opengl'.format('' if '+opengl' in self.spec else 'no-'),
|
|
'-release',
|
|
'-shared',
|
|
'-confirm-license',
|
|
'-openssl-linked',
|
|
'-optimized-qmake',
|
|
'-system-freetype',
|
|
'-I{0}/freetype2'.format(self.spec['freetype'].prefix.include),
|
|
'-no-pch',
|
|
'-system-sqlite'
|
|
]
|
|
|
|
if self.spec.satisfies('@5:'):
|
|
config_args.append('-system-harfbuzz')
|
|
config_args.append('-system-pcre')
|
|
|
|
if self.spec.satisfies('@5.7:'):
|
|
config_args.append('-system-doubleconversion')
|
|
|
|
if sys.platform != 'darwin':
|
|
config_args.append('-fontconfig')
|
|
|
|
if '@:5.7.1' in self.spec:
|
|
config_args.append('-no-openvg')
|
|
else:
|
|
# FIXME: those could work for other versions
|
|
config_args.extend([
|
|
'-system-libpng',
|
|
'-system-libjpeg',
|
|
'-system-zlib'
|
|
])
|
|
|
|
if '@:5.7.0' in self.spec:
|
|
config_args.extend([
|
|
# NIS is deprecated in more recent glibc,
|
|
# but qt-5.7.1 does not recognize this option
|
|
'-no-nis',
|
|
])
|
|
|
|
if '~examples' in self.spec:
|
|
config_args.extend(['-nomake', 'examples'])
|
|
|
|
if '@4' in self.spec and '~phonon' in self.spec:
|
|
config_args.append('-no-phonon')
|
|
|
|
if '+dbus' in self.spec:
|
|
dbus = self.spec['dbus'].prefix
|
|
config_args.append('-dbus-linked')
|
|
config_args.append('-I%s/dbus-1.0/include' % dbus.lib)
|
|
config_args.append('-I%s/dbus-1.0' % dbus.include)
|
|
config_args.append('-L%s' % dbus.lib)
|
|
else:
|
|
config_args.append('-no-dbus')
|
|
|
|
if '@5:' in self.spec and sys.platform == 'darwin':
|
|
config_args.extend([
|
|
'-no-xinput2',
|
|
'-no-xcb-xlib',
|
|
'-no-pulseaudio',
|
|
'-no-alsa',
|
|
])
|
|
|
|
# FIXME: else: -system-xcb ?
|
|
|
|
if '@4' in self.spec and sys.platform == 'darwin':
|
|
config_args.append('-cocoa')
|
|
|
|
mac_ver = tuple(platform.mac_ver()[0].split('.')[:2])
|
|
sdkname = 'macosx%s' % '.'.join(mac_ver)
|
|
sdkpath = which('xcrun')('--show-sdk-path',
|
|
'--sdk', sdkname,
|
|
output=str)
|
|
config_args.extend([
|
|
'-sdk', sdkpath.strip(),
|
|
])
|
|
use_clang_platform = False
|
|
if self.spec.compiler.name == 'clang' and \
|
|
str(self.spec.compiler.version).endswith('-apple'):
|
|
use_clang_platform = True
|
|
# No one uses gcc-4.2.1 anymore; this is clang.
|
|
if self.spec.compiler.name == 'gcc' and \
|
|
str(self.spec.compiler.version) == '4.2.1':
|
|
use_clang_platform = True
|
|
if use_clang_platform:
|
|
config_args.append('-platform')
|
|
if mac_ver >= (10, 9):
|
|
config_args.append('unsupported/macx-clang-libc++')
|
|
else:
|
|
config_args.append('unsupported/macx-clang')
|
|
|
|
return config_args
|
|
|
|
# Don't disable all the database drivers, but should
|
|
# really get them into spack at some point.
|
|
|
|
@when('@3')
|
|
def configure(self):
|
|
# A user reported that this was necessary to link Qt3 on ubuntu.
|
|
# However, if LD_LIBRARY_PATH is not set the qt build fails, check
|
|
# and set LD_LIBRARY_PATH if not set, update if it is set.
|
|
if os.environ.get('LD_LIBRARY_PATH'):
|
|
os.environ['LD_LIBRARY_PATH'] += os.pathsep + os.getcwd() + '/lib'
|
|
else:
|
|
os.environ['LD_LIBRARY_PATH'] = os.pathsep + os.getcwd() + '/lib'
|
|
|
|
configure('-prefix', self.prefix,
|
|
'-v',
|
|
'-thread',
|
|
'-shared',
|
|
'-release',
|
|
'-fast')
|
|
|
|
@when('@4')
|
|
def configure(self):
|
|
configure('-fast',
|
|
'-{0}gtkstyle'.format('' if '+gtk' in self.spec else 'no-'),
|
|
'-{0}webkit'.format('' if '+webkit' in self.spec else 'no-'),
|
|
'-arch', str(self.spec.architecture.target),
|
|
*self.common_config_args)
|
|
|
|
@when('@5.0:5.6')
|
|
def configure(self):
|
|
webkit_args = [] if '+webkit' in self.spec else ['-skip', 'qtwebkit']
|
|
configure('-no-eglfs',
|
|
'-no-directfb',
|
|
'-{0}gtkstyle'.format('' if '+gtk' in self.spec else 'no-'),
|
|
*(webkit_args + self.common_config_args))
|
|
|
|
@when('@5.7:')
|
|
def configure(self):
|
|
config_args = self.common_config_args
|
|
|
|
if not sys.platform == 'darwin':
|
|
config_args.extend([
|
|
'-system-xcb',
|
|
])
|
|
|
|
if '~webkit' in self.spec:
|
|
config_args.extend([
|
|
'-skip', 'webengine',
|
|
])
|
|
|
|
if '~opengl' in self.spec and self.spec.satisfies('@5.10:'):
|
|
config_args.extend([
|
|
'-skip', 'webglplugin',
|
|
])
|
|
|
|
if self.version > Version('5.8'):
|
|
# relies on a system installed wayland, i.e. no spack package yet
|
|
# https://wayland.freedesktop.org/ubuntu16.04.html
|
|
# https://wiki.qt.io/QtWayland
|
|
config_args.extend(['-skip', 'wayland'])
|
|
|
|
if self.spec.satisfies('@5.7'):
|
|
config_args.extend(['-skip', 'virtualkeyboard'])
|
|
|
|
configure('-no-eglfs',
|
|
'-no-directfb',
|
|
'-{0}gtk'.format('' if '+gtk' in self.spec else 'no-'),
|
|
*config_args)
|
|
|
|
def install(self, spec, prefix):
|
|
self.configure()
|
|
make()
|
|
make("install")
|