meson.build 7.03 KB
Newer Older
1
project('gstreamer-sharp', ['cs', 'c'], version: '1.17.0.1',
2
    meson_version: '>=0.48', license: 'LGPL')
3 4 5 6 7 8 9 10 11 12 13

if host_machine.system() == 'osx'
  lib_prefix=''
  lib_suffix='.dylib'
else
  lib_prefix='.so'
  lib_suffix=''
endif

gtk_sharp_required_version = '>=3.22.6'

14 15 16 17 18 19 20
csc = meson.get_compiler('cs')
if csc.get_id() == 'mono'
    add_project_arguments('-keyfile:' + join_paths(meson.current_source_dir(), meson.project_name() + '.snk'),
        language: ['cs'])
endif


21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
subproject('gtk-sharp', default_options: ['install=false'])
gtk_sharp = subproject('gtk-sharp')

glib_sharp_dep = gtk_sharp.get_variable('glib_sharp_dep')
glib_sharp = gtk_sharp.get_variable('glib_sharp')

gio_sharp_dep = gtk_sharp.get_variable('gio_sharp_dep')
gio_sharp = gtk_sharp.get_variable('gio_sharp')

gapi_fixup = gtk_sharp.get_variable('gapi_fixup')
gapi_codegen = gtk_sharp.get_variable('gapi_codegen')

glib_api_includes = gtk_sharp.get_variable('glib_api_includes')
gio_api_includes = gtk_sharp.get_variable('gio_api_includes')
has_gtk = gtk_sharp.get_variable('has_gtk')
if has_gtk
  gtk_sharp_dep = [gtk_sharp.get_variable('gtk_sharp_dep'),
    gtk_sharp.get_variable('atk_sharp_dep')]
39 40 41 42
else
  gtk_sharp_dep = dependency('gtk-sharp-3.0', version: gtk_sharp_required_version,
      required: false)
endif
43

44
mono_path = [gtk_sharp.get_variable('mono_path'), join_paths(meson.current_build_dir(), 'sources')]
45

46
codegen_dependencies = [gapi_codegen, gapi_fixup, glib_sharp, gio_sharp]
47 48
gapi_fixup = gapi_fixup.full_path()
gapi_codegen = gapi_codegen.full_path()
49 50 51

gacutil = find_program('gacutil')
generate_api = find_program('generate_code.py')
52
nuget = find_program('nuget.py')
53
diff = find_program('Tests/test_abi.py')
54 55 56 57 58 59 60

# TODO Handle monodoc

apiversion = '1.0'
gst_required_version = '>=@0@'.format(meson.project_version())
gst_deps = []

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
# dependency name, [subproject-name, internal-dep-name, library-name']
gst_deps_defs = [
  ['gstreamer', ['gstreamer', 'gst_dep'], 'libgst'],
  ['gstreamer-app', ['gst-plugins-base', 'app_dep'], 'gstapp'],
  ['gstreamer-audio', ['gst-plugins-base', 'audio_dep'], 'gstaudio'],
  ['gstreamer-base', ['gstreamer', 'gst_base_dep'], 'gst_base'],
  ['gstreamer-controller', ['gstreamer', 'gst_controller_dep'], 'gst_controller'],
  ['gstreamer-fft', ['gst-plugins-base', 'fft_dep'], 'gstfft'],
  ['gstreamer-net', ['gstreamer', 'gst_net_dep'], 'gst_net'],
  ['gstreamer-pbutils', ['gst-plugins-base', 'pbutils_dep'], 'pbutils'],
  ['gstreamer-riff', ['gst-plugins-base', 'riff_dep'], 'gstriff'],
  ['gstreamer-rtp', ['gst-plugins-base', 'rtp_dep'], 'gst_rtp'],
  ['gstreamer-rtsp', ['gst-plugins-base', 'rtsp_dep'], 'gst_rtsp'],
  ['gstreamer-sdp', ['gst-plugins-base', 'sdp_dep'], 'gstsdp'],
  ['gstreamer-tag', ['gst-plugins-base', 'tag_dep'], 'gsttag'],
76 77 78
  ['gstreamer-video', ['gst-plugins-base', 'video_dep'], 'gstvideo'],
  ['gstreamer-webrtc', ['gst-plugins-bad', 'gstwebrtc_dep'], 'gstwebrtc'],
]
79 80

foreach dep: gst_deps_defs
81 82 83 84
  gst_deps += [dependency(dep.get(0) + '-' + apiversion, version: gst_required_version,
    fallback: dep.get(1))]
endforeach

85
ges_dep = dependency('gst-editing-services-' + apiversion, version: gst_required_version,
86
    fallback: ['gst-editing-services', 'ges_dep'], required: false)
87

88 89 90 91
if ges_dep.found()
    gst_deps_defs +=  [
        ['gst-editing-services', ['gst-editing-services', 'ges_dep'], 'libges'],
    ]
92
    mono_path += [join_paths(meson.current_build_dir(), 'ges')]
93 94 95 96 97
endif

testsenv = environment()
testsenv.prepend('MONO_PATH', mono_path)
i = 0
98
testsenv_ld_library_path = []
99 100
foreach dep: gst_deps + [ges_dep]
    if dep.type_name() == 'pkgconfig'
101
        testsenv_ld_library_path += [dep.get_pkgconfig_variable('libdir')]
102 103 104 105 106 107 108 109 110 111 112 113 114 115
    else
        depdef = gst_deps_defs[i][1]
        libname = gst_deps_defs[i].get(2, '')
        if libname != ''
            proj = subproject(depdef[0])
            libpath = proj.get_variable(libname).full_path().split('/')
            dirname = ''
            j = 1
            foreach comp: libpath
                if j < libpath.length()
                    dirname += '/' + comp
                endif
                j += 1
            endforeach
116
            testsenv_ld_library_path += [dirname]
117 118 119 120
        endif
    endif
    i += 1
endforeach
121 122
# FIXME: port this to macOS and Windows
testsenv.prepend('LD_LIBRARY_PATH', testsenv_ld_library_path)
123

124
subdir('sources')
125 126
if ges_dep.found()
  subdir('ges')
127 128 129 130 131 132 133 134 135 136
  custom_target('GESSharp-nuget',
      command: [nuget, '--package-name', 'GESSharp',
          '--assembly', ges_sharp.full_path(),
          '--dependency=GstSharp:' + meson.project_version(),
          '--project-url', 'https://gstreamer.freedesktop.org/modules/gstreamer-sharp.html',
          '--icon-url', 'https://gstreamer.freedesktop.org/images/header-logo-top.png',
          '--license-url', 'https://cgit.freedesktop.org/gstreamer/gstreamer-sharp/plain/COPYING',
          '--version', meson.project_version(),
          '--tags', 'GStreamer GES GstSharp bindings',
          '--builddir', meson.current_build_dir(),
137
          '--dependency', 'GstSharp:' + meson.project_version(),
138 139 140
      ],
      output: 'GESSharp.' + meson.project_version() + '.nupkg'
  )
141 142
endif

143 144 145 146 147 148 149 150 151 152 153 154 155 156
custom_target('GstSharp-nuget',
    command: [nuget, '--package-name', 'GstSharp',
        '--assembly', gst_sharp.full_path(),
        '--assembly', gio_sharp.full_path(),
        '--assembly', glib_sharp.full_path(),
        '--project-url', 'https://gstreamer.freedesktop.org/modules/gstreamer-sharp.html',
        '--icon-url', 'https://gstreamer.freedesktop.org/images/header-logo-top.png',
        '--license-url', 'https://cgit.freedesktop.org/gstreamer/gstreamer-sharp/plain/COPYING',
        '--version', meson.project_version(),
        '--tags', 'GStreamer GstSharp bindings',
        '--builddir', meson.current_build_dir(),
    ],
    output: 'GstSharp.' + meson.project_version() + '.nupkg',
)
157

158
subdir('samples')
159 160 161 162 163 164 165 166
subdir('Tests')

bindinator = subproject('bindinator', default_options: ['gapi_fixup=@0@'.format(gapi_fixup)])
if bindinator.get_variable('found')
    bindinate = bindinator.get_variable('bindinate')
    run_target('bindinate_gstreamer',
        command: [bindinate,
            '--name=gstreamer', '--regenerate=true',
167
            '--merge-with=GstApp-1.0,GstAudio-1.0,GstBase-1.0,GstController-1.0,GstNet-1.0,GstPbutils-1.0,GstRtp-1.0,GstRtsp-1.0,GstSdp-1.0,GstTag-1.0,GstVideo-1.0,GstWebRTC-1.0',
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
            '--gir=Gst-1.0',
            '--copy-girs=@0@'.format(join_paths(meson.current_source_dir(), 'girs'))],
        depends: []
    )
    run_target('bindinate_ges',
        command: ['sh', '-c',
            '''@0@ --name=gst-editing-services --regenerate=true --gir=GES-1.0 && mv @1@/sources/gst-editing-services-sharp-api.raw @1@/ges/gst-editing-services-api.raw '''.format(
            bindinate.path(),
            meson.current_source_dir()),
        ],
        depends: []
    )
    python3 = import('python3').find_python()
    run_target('update-code', command: [find_program('update_sources.py')])
    run_target('update-all', command: [find_program('update_sources.py'), 'bindinate'])
else
    warning('Bindinator not usable as some required dependencies are not avalaible.')
185
endif