meson.build 4.58 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
sources = [
  'gstplugin.cc',
  'gstqsgtexture.cc',
  'gstqtglutility.cc',
  'gstqtsink.cc',
  'gstqtsrc.cc',
  'qtitem.cc',
  'qtwindow.cc',
]

moc_headers = [
  'qtitem.h',
  'qtwindow.h',
  'gstqsgtexture.h',
]

17
# FIXME: -Dqt5=enabled is silently ignored if a c++ compiler is not found
18 19
if have_cxx and build_gstgl
  qt5_mod = import('qt5')
20 21
  qt5qml_dep = dependency('qt5', modules : ['Core', 'Gui', 'Qml', 'Quick'],
                          required: get_option('qt5'))
22 23

  # FIXME Add a way to get that information out of the qt5 module
24
  moc = find_program('moc-qt5', 'moc', required : get_option('qt5'))
25 26 27 28 29 30 31 32 33 34
  if qt5qml_dep.found() and moc.found()
    optional_deps = []
    qt_defines = []
    have_qpa_include = false
    have_qt_windowing = false

    # Attempt to find the QPA header either through pkg-config (preferred) or qmake
    # This semi-matches what meson does internally with the qt5 module
    # FIXME Add a way to get some of this information out of the qt5 module
    if not have_qpa_include
35
      # FIXME: automagic
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
      qt5core_dep = dependency('Qt5Core', required: false)
      if qt5core_dep.found() and qt5core_dep.type_name() == 'pkgconfig'
        qt_version = qt5core_dep.version()
        qt_include_dir = qt5core_dep.get_pkgconfig_variable('includedir')
        qpa_include_path = join_paths(qt_include_dir, 'QtGui', qt_version, 'QtGui')
        if cxx.has_header('qpa/qplatformnativeinterface.h',
                dependencies : qt5core_dep,
                args : '-I' + qpa_include_path)
          qt_defines += '-DHAVE_QT_QPA_HEADER'
          qt_defines += '-I' + qpa_include_path
          have_qpa_include = true
          message('Found QPA header using pkg-config')
        endif
      endif
    endif
    if not have_qpa_include
52
      qmake = find_program('qmake-qt5', 'qmake')
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
      if qmake.found()
        qt_version = run_command(qmake, '-query', 'QT_VERSION').stdout().strip()
        qt_include_dir = run_command(qmake, '-query', 'QT_INSTALL_HEADERS').stdout().strip()
        qpa_include_path = join_paths(qt_include_dir, 'QtGui', qt_version, 'QtGui')
        if cxx.has_header('qpa/qplatformnativeinterface.h',
                args : '-I' + qpa_include_path)
          qt_defines += '-DHAVE_QT_QPA_HEADER'
          qt_defines += '-I' + qpa_include_path
          have_qpa_include = true
          message('Found QPA header using qmake')
        endif
      endif
    endif

    # Try to come up with all the platform/winsys combinations that will work

    if gst_gl_have_window_x11 and gst_gl_have_platform_glx
70
      # FIXME: automagic
71 72 73 74 75 76 77 78 79 80 81
      qt5x11extras = dependency('qt5', modules : ['X11Extras'], required : false)
      if qt5x11extras.found()
        optional_deps += qt5x11extras
        qt_defines += ['-DHAVE_QT_X11']
        have_qt_windowing = true
      endif
    endif

    if gst_gl_have_platform_egl
      if have_qpa_include
        if gst_gl_have_window_wayland
82
          # FIXME: automagic
83 84 85 86 87 88 89 90
          qt5waylandextras = dependency('qt5', modules : ['WaylandClient'], required : false)
          if qt5waylandextras.found()
            optional_deps += qt5waylandextras
            qt_defines += ['-DHAVE_QT_WAYLAND']
            have_qt_windowing = true
          endif
        endif
        if gst_gl_have_window_android
91
          # FIXME: automagic
92 93 94 95 96 97 98 99 100 101 102 103 104 105
          # FIXME: untested
          qt5androidextras = dependency('qt5', modules : ['AndroidExtras'], required : false)
          if qt5androidextras.found()
            optional_deps += qt5androidextras
            # also uses the HAVE_QT_EGLFS define below
            have_qt_windowing = true
          endif
        endif
      endif
      qt_defines += ['-DHAVE_QT_EGLFS']
      have_qt_windowing = true
    endif

    if gst_gl_have_platform_wgl and gst_gl_have_window_win32
106
      # for wglMakeCurrent()
107
      # FIXME: automagic
108 109 110
      opengl32_dep = cc.find_library('opengl32', required : false)
      if opengl32_dep.found()
        qt_defines += ['-DHAVE_QT_WIN32']
111
        optional_deps += opengl32_dep
112
        have_qt_windowing = true
113
      endif
114 115 116 117 118 119 120
    endif

    # FIXME: OSX/iOS definitions

    if have_qt_windowing
      # Build it!
      moc_files = qt5_mod.preprocess(moc_headers : moc_headers)
121
      gstqmlgl = library('gstqmlgl', sources, moc_files,
122 123 124 125 126 127
        cpp_args : gst_plugins_good_args + qt_defines,
        link_args : noseh_link_args,
        include_directories: [configinc, libsinc],
        dependencies : [glib_deps, gst_dep, gstvideo_dep, gstgl_dep, qt5qml_dep, optional_deps],
        install: true,
        install_dir : plugins_install_dir)
128
      pkgconfig.generate(gstqmlgl, install_dir : plugins_pkgconfig_install_dir)
129 130 131
    endif
  endif
endif