Merge pull request #6481 from jon-turney/osx-qt-dep-crash

Fix dependency('qt') crash with old Qt on OSX
pull/6493/head
Dylan Baker 5 years ago committed by GitHub
commit 04c4bbccb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 25
      .github/workflows/ci_frameworks.yml
  2. 3
      mesonbuild/dependencies/ui.py
  3. 19
      test cases/frameworks/4 qt/meson.build
  4. 1
      test cases/frameworks/4 qt/meson_options.txt
  5. 2
      test cases/frameworks/4 qt/q5core.cpp

@ -59,3 +59,28 @@ jobs:
with:
name: HDF5_Mac_test
path: build/meson-logs/testlog.txt
Qt4macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-python@v1
with:
python-version: '3.x'
- run: python -m pip install -e .
- run: brew install pkg-config ninja gcc
- run: brew tap cartr/qt4
- run: brew install qt@4
- run: meson setup "test cases/frameworks/4 qt" build -Drequired=qt4
- run: ninja -C build
- uses: actions/upload-artifact@v1
if: failure()
with:
name: Qt4_Mac_build
path: build/meson-logs/meson-log.txt
- run: meson test -C build -v
- uses: actions/upload-artifact@v1
if: failure()
with:
name: Qt4_Mac_test
path: build/meson-logs/testlog.txt

@ -373,7 +373,8 @@ class QtBaseDependency(ExternalDependency):
(k, v) = tuple(line.split(':', 1))
qvars[k] = v
# Qt on macOS uses a framework, but Qt for iOS/tvOS does not
if self.env.machines.host.is_darwin() and 'ios' not in qvars['QMAKE_XSPEC'] and 'tvos' not in qvars['QMAKE_XSPEC']:
xspec = qvars.get('QMAKE_XSPEC', '')
if self.env.machines.host.is_darwin() and not any(s in xspec for s in ['ios', 'tvos']):
mlog.debug("Building for macOS, looking for framework")
self._framework_detect(qvars, mods, kwargs)
return qmake

@ -21,19 +21,25 @@ foreach qt : ['qt4', 'qt5']
error('Invalid qt dep incorrectly found!')
endif
# This test should be skipped if qt5 isn't found
if qt == 'qt5'
# This test should be skipped if the required version of Qt isn't found
#
# (In the CI environment, the specified version of Qt is definitely present.
# An unexpected skip here is treated as a failure, so we are testing that the
# detection mechanism is able to find Qt.)
needed_qt = get_option('required').to_lower()
required = (qt == needed_qt)
if required
dep = dependency(qt, modules : ['Core'], required : false, method : get_option('method'))
if not dep.found()
error('MESON_SKIP_TEST qt5 not found.')
error('MESON_SKIP_TEST @0@ not found.'.format(needed_qt))
endif
endif
# Ensure that the "no-Core-module-specified" code branch is hit
nocoredep = dependency(qt, modules : ['Gui'], required : qt == 'qt5', method : get_option('method'))
nocoredep = dependency(qt, modules : ['Gui'], required : required, method : get_option('method'))
# If qt4 modules are found, test that. qt5 is required.
qtdep = dependency(qt, modules : qt_modules, main : true, private_headers: true, required : qt == 'qt5', method : get_option('method'))
# If 'qt' modules are found, test that.
qtdep = dependency(qt, modules : qt_modules, main : true, private_headers: true, required : required, method : get_option('method'))
if qtdep.found()
qtmodule = import(qt)
@ -77,6 +83,7 @@ foreach qt : ['qt4', 'qt5']
qtcore = dependency(qt, modules : 'Core', method : get_option('method'))
qtcoreapp = executable(qt + 'core', 'q5core.cpp',
cpp_args: '-DQT="@0@"'.format(qt),
dependencies : qtcore)
test(qt + 'test', qtcoreapp)

@ -1 +1,2 @@
option('method', type : 'string', value : 'auto', description : 'The method to use to find Qt')
option('required', type : 'string', value : 'qt5', description : 'The version of Qt which is required to be present')

@ -15,7 +15,7 @@ int main(int argc, char **argv) {
app.installTranslator(&qtTranslator);
QTranslator myappTranslator;
if(!myappTranslator.load("qt5core_fr") )
if(!myappTranslator.load(QT "core_fr") )
return 1;
app.installTranslator(&myappTranslator);

Loading…
Cancel
Save