diff --git a/lib/meson.build b/lib/meson.build index dd613764..b690c859 100644 --- a/lib/meson.build +++ b/lib/meson.build @@ -125,11 +125,18 @@ libmist = library('mist', 'websocket.cpp', extra_code, include_directories: incroot, - dependencies: ssl_deps, + dependencies: mist_deps, install: true, ) +libmist_dep = declare_dependency( + link_with: [libmist], + dependencies: mist_deps, + include_directories: incroot +) + if have_srt - libmist_srt = library('mist_srt', 'socket_srt.cpp', include_directories: incroot, link_with: libmist, dependencies: libsrt, install: true) + libmist_srt = library('mist_srt', 'socket_srt.cpp', dependencies: [libsrt, libmist_dep], install: true) + libmist_srt_dep = declare_dependency(link_with: [libmist_srt]) endif diff --git a/meson.build b/meson.build index 5297faca..79bfc7d3 100644 --- a/meson.build +++ b/meson.build @@ -13,9 +13,19 @@ release = release.strip() # Grab version number from git, if available # Falls back to a file called "VERSION" or the string "Unknown" otherwise -rv = run_command('git', 'describe', '--tags', check: false) -version = rv.stdout().strip() -if rv.returncode() != 0 +git = find_program('git', required: false) +if git.found() + rv = run_command(git, 'describe', '--tags', check: false) + version = rv.stdout().strip() + if rv.returncode() != 0 + fs = import('fs') + if fs.is_file('VERSION') + version = fs.read('VERSION').strip() + else + version = 'Unknown' + endif + endif +else fs = import('fs') if fs.is_file('VERSION') version = fs.read('VERSION').strip() @@ -90,7 +100,7 @@ message('Building release @0@ for version @1@ @ debug level @2@'.format(release, # Set dependencies -ssl_deps = [] +mist_deps = [] if usessl ccpp = meson.get_compiler('cpp') @@ -119,8 +129,8 @@ if usessl mbedcrypto = mbedtls_proj.get_variable('mbedcrypto_dep') endif - srtp2 = dependency('libsrtp2', fallback : ['libsrtp2', 'libsrtp2_dep']) - ssl_deps = [mbedtls, mbedx509, mbedcrypto] + mist_deps += [mbedtls, mbedx509, mbedcrypto] + mist_deps += dependency('libsrtp2', default_options: ['tests=disabled'], fallback: ['libsrtp2', 'libsrtp2_dep']) endif libsrt = false @@ -135,6 +145,13 @@ if not get_option('NORIST') endif have_librist = not get_option('NORIST') and librist.found() +# Add thread dependency since we always have thread code in libmist +mist_deps += dependency('threads') + +# Add rt dependency when using shared memory +if not get_option('NOSHM') + mist_deps += ccpp.find_library('rt', required : true) +endif # Set build targets @@ -160,7 +177,6 @@ foreach exec : executables exec_tgts += executable( exec.get('name'), exec.get('sources'), - link_with: exec.get('link'), dependencies: exec.get('deps'), cpp_args: exec.get('defines'), install: true, diff --git a/src/analysers/meson.build b/src/analysers/meson.build index 9ca82f61..97b4cdf3 100644 --- a/src/analysers/meson.build +++ b/src/analysers/meson.build @@ -21,20 +21,18 @@ foreach analyser : analysers 'analyser_'+analyser.get('format')+'.cpp'), header_tgts, ], - 'link': libmist, 'defines': [ string_opt.format('ANALYSERHEADER', 'analyser_'+analyser.get('format')+'.h'), '-DANALYSERTYPE=Analyser'+analyser.get('name') ], - 'deps': [] + 'deps': [libmist_dep] } endforeach executables += { 'name': 'MistTranslateH264', 'sources' : [files('h264_translate.cpp'), header_tgts], - 'link': libmist, 'defines': [], - 'deps' : [] + 'deps' : [libmist_dep] } diff --git a/src/controller/meson.build b/src/controller/meson.build index 682f424b..54ac1f5e 100644 --- a/src/controller/meson.build +++ b/src/controller/meson.build @@ -15,8 +15,7 @@ executables += { 'controller_push.cpp'), header_tgts, server_html], - 'link': libmist, 'defines': [], - 'deps' : [] + 'deps' : [libmist_dep] } diff --git a/src/input/meson.build b/src/input/meson.build index eb0de5e9..437e47bc 100644 --- a/src/input/meson.build +++ b/src/input/meson.build @@ -45,24 +45,20 @@ endif inputs_tgts = [] foreach input : inputs - link_libs = [libmist] - deps = [] + deps = [libmist_dep] if input.has_key('extra') if input.get('extra').contains('with_rist') deps += librist endif if input.get('extra').contains('with_srt') - link_libs += libmist_srt + deps += libmist_srt_dep deps += libsrt endif endif if input.get('name').contains('AV') deps += av_libs endif - if input.get('name').contains('HLS') - deps += ssl_deps - endif executables += { 'name' : 'MistIn'+input.get('name'), @@ -75,9 +71,7 @@ foreach input : inputs io_cpp, header_tgts ], - 'link' : link_libs, 'deps' : deps, - 'inc': [], 'defines': [ string_opt.format('INPUTTYPE', 'input_'+input.get('format')+'.h') ] diff --git a/src/meson.build b/src/meson.build index 3d9147e2..43c40a04 100644 --- a/src/meson.build +++ b/src/meson.build @@ -10,8 +10,7 @@ subdir('controller') executables += { 'name': 'MistSession', 'sources' : [files('session.cpp'), header_tgts], - 'link': libmist, 'defines': [], - 'deps' : [] + 'deps' : [libmist_dep] } diff --git a/src/output/meson.build b/src/output/meson.build index 42a762d6..f9f137bc 100644 --- a/src/output/meson.build +++ b/src/output/meson.build @@ -19,6 +19,7 @@ outputs = [ {'name' : 'RTSP', 'format' : 'rtsp'}, {'name' : 'WAV', 'format' : 'wav', 'extra': ['http']}, {'name' : 'SDP', 'format' : 'sdp', 'extra': ['http']}, + {'name' : 'HTTP', 'format' : 'http_internal', 'extra': ['http','embed']}, ] if usessl @@ -37,7 +38,7 @@ if have_srt endif if get_option('WITH_JPG') - outputs += {'name' : 'JPG', 'format' : 'jpg', 'extra': ['http','jpg']} + outputs += {'name' : 'JPG', 'format' : 'jpg', 'extra': ['http','embed']} endif if get_option('WITH_SANITY') @@ -53,11 +54,9 @@ output_cpp = files('output.cpp') outputs_tgts = [] foreach output : outputs - link_libs = [libmist] - deps = [] + deps = [libmist_dep] base = files('mist_out.cpp') tsBaseClass = 'Output' - extra_tgt_dep = [] sources = [ files('output.cpp', @@ -77,7 +76,6 @@ foreach output : outputs endif endif if extra.contains('jpg') - extra_tgt_dep = embed_tgts endif if extra.contains('ts') sources += files('output_ts_base.cpp') @@ -86,28 +84,25 @@ foreach output : outputs deps += librist endif if extra.contains('with_srt') - link_libs += libmist_srt + deps += libmist_srt_dep deps += libsrt endif if extra.contains('srtp') - deps += srtp2 sources += files('output_webrtc_srtp.cpp', 'output_webrtc_srtp.h') endif + if extra.contains('embed') + sources += embed_tgts + endif else sources += base endif - if output.get('name').contains('HTTPS') - deps += ssl_deps - endif executables += { 'name': 'MistOut'+output.get('name'), 'sources' : [ sources, - extra_tgt_dep, header_tgts ], - 'link' : link_libs, 'deps' : deps, 'defines' : [ string_opt.format('OUTPUTTYPE', 'output_'+output.get('format')+'.h'), @@ -116,22 +111,3 @@ foreach output : outputs } endforeach -executables += { - 'name' : 'MistOutHTTP', - 'sources' : [ - files( - 'mist_out.cpp', - 'output.cpp', - 'output_http.cpp', - 'output_http_internal.cpp', - ), - io_cpp, - header_tgts, - embed_tgts, - ], - 'link' : libmist, - 'defines' :[ - string_opt.format('OUTPUTTYPE', 'output_http_internal.h') - ], - 'deps' : [] -} diff --git a/src/process/meson.build b/src/process/meson.build index d36e9fa9..30409786 100644 --- a/src/process/meson.build +++ b/src/process/meson.build @@ -6,9 +6,10 @@ process_common = static_library('mist_process_common', output_cpp, io_cpp, header_tgts, - include_directories: incroot, + dependencies: libmist_dep, install: false, ) +process_common_dep = declare_dependency(link_with: process_common) executables += { 'name' : 'MistProcFFMPEG', @@ -16,8 +17,7 @@ executables += { files('process_ffmpeg.cpp'), header_tgts ], - 'link' : [libmist, process_common], - 'deps' :[], + 'deps' :[libmist_dep, process_common_dep], 'defines': [], } @@ -27,8 +27,7 @@ executables += { files('process_exec.cpp'), header_tgts ], - 'link' : [libmist, process_common], - 'deps' :[], + 'deps' :[libmist_dep, process_common_dep], 'defines': [], } @@ -43,8 +42,7 @@ executables += { io_cpp, header_tgts ], - 'link' : [libmist], - 'deps' :[], + 'deps' :[libmist_dep], 'defines': [], } diff --git a/src/utils/meson.build b/src/utils/meson.build index c69275aa..e07017d0 100644 --- a/src/utils/meson.build +++ b/src/utils/meson.build @@ -21,8 +21,7 @@ foreach util : utils files('util_'+util.get('file')+'.cpp'), header_tgts ], - 'link' : libmist, - 'deps' : [], + 'deps' : [libmist_dep], 'defines' :[], } endforeach diff --git a/subprojects/packagefiles/libsrt/meson.build b/subprojects/packagefiles/libsrt/meson.build index 30a5c6ef..5d18484b 100644 --- a/subprojects/packagefiles/libsrt/meson.build +++ b/subprojects/packagefiles/libsrt/meson.build @@ -11,6 +11,7 @@ if not mbedtls_lib.found() mbedx509_lib = ccpp.find_library('mbedx509') mbedcrypto_lib = ccpp.find_library('mbedcrypto') endif +thread_dep = dependency('threads') header_tgts = [] @@ -64,13 +65,13 @@ srt_src = files( libsrt = library( 'srt', sources: [srt_src, versionfile], - dependencies: [mbedtls_lib, mbedx509_lib, mbedcrypto_lib], + dependencies: [mbedtls_lib, mbedx509_lib, mbedcrypto_lib, thread_dep], include_directories: ['srt', 'haicrypt', 'srtcore'] ) srt_dep = declare_dependency( link_with : [libsrt], - dependencies: [mbedtls_lib, mbedx509_lib, mbedcrypto_lib], + dependencies: [mbedtls_lib, mbedx509_lib, mbedcrypto_lib, thread_dep], sources: [header_tgts], include_directories: include_directories('.'), ) diff --git a/test/meson.build b/test/meson.build index 0f678f2d..7716aaf5 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,23 +1,23 @@ # Testing binaries that are not unit tests, but intended for manual use -urltest = executable('urltest', 'url.cpp', include_directories: incroot, link_with: libmist) -logtest = executable('logtest', 'log.cpp', include_directories: incroot, link_with: libmist) -downloadertest = executable('downloadertest', 'downloader.cpp', include_directories: incroot, link_with: libmist) -urireadertest = executable('urireadertest', 'urireader.cpp', include_directories: incroot, link_with: libmist, dependencies: ssl_deps) -jsontest = executable('jsontest', 'json.cpp', include_directories: incroot, link_with: libmist) -resolvetest = executable('resolvetest', 'resolve.cpp', include_directories: incroot, link_with: libmist, dependencies: ssl_deps) -streamstatustest = executable('streamstatustest', 'status.cpp', include_directories: incroot, link_with: libmist) -websockettest = executable('websockettest', 'websocket.cpp', include_directories: incroot, link_with: libmist) +urltest = executable('urltest', 'url.cpp', dependencies: libmist_dep) +logtest = executable('logtest', 'log.cpp', dependencies: libmist_dep) +downloadertest = executable('downloadertest', 'downloader.cpp', dependencies: libmist_dep) +urireadertest = executable('urireadertest', 'urireader.cpp', dependencies: libmist_dep) +jsontest = executable('jsontest', 'json.cpp', dependencies: libmist_dep) +resolvetest = executable('resolvetest', 'resolve.cpp', dependencies: libmist_dep) +streamstatustest = executable('streamstatustest', 'status.cpp', dependencies: libmist_dep) +websockettest = executable('websockettest', 'websocket.cpp', dependencies: libmist_dep) # Actual unit tests -dtsc_sizing_test = executable('dtsc_sizing_test', 'dtsc_sizing.cpp', include_directories: incroot, link_with: libmist) +dtsc_sizing_test = executable('dtsc_sizing_test', 'dtsc_sizing.cpp', dependencies: libmist_dep) test('DTSC Sizing Test', dtsc_sizing_test) -bitwritertest = executable('bitwritertest', 'bitwriter.cpp', include_directories: incroot, link_with: libmist) +bitwritertest = executable('bitwritertest', 'bitwriter.cpp', dependencies: libmist_dep) test('bitWriter Test', bitwritertest) -#abst_test = executable('abst_test', 'abst_test.cpp', include_directories: incroot, link_with: libmist) +#abst_test = executable('abst_test', 'abst_test.cpp', dependencies: libmist_dep) #test('MP4::ABST Test', abst_test)