mltframework/mlt

compile error on mlt-7.24.0

ErichBSchulz opened this issue · 1 comments

Hi trying to compile from source.

Sorry I'm a noob with building from source so possible something dumb I've done.

I'm on ubuntu 24.04

I got this warning during the cmake step:

CMake Warning at CMakeLists.txt:301 (find_package):
  By not providing "FindQt6.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Qt6", but
  CMake did not find one.

  Could not find a package configuration file provided by "Qt6" with any of
  the following names:

    Qt6Config.cmake
    qt6-config.cmake

  Add the installation prefix of "Qt6" to CMAKE_PREFIX_PATH or set "Qt6_DIR"
  to a directory containing one of the above files.  If "Qt6" provides a
  separate development package or SDK, be sure it has been installed.

followed by these compile errors:

home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:374:52: error: ‘oss_audioinfo’ has not been declared
  374 |   bool probeDeviceInfo( RtAudio::DeviceInfo &info, oss_audioinfo &ainfo );
      |                                                    ^~~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘virtual void RtApiOss::probeDevices()’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9922:3: error: ‘oss_sysinfo’ was not declared in this scope
 9922 |   oss_sysinfo sysinfo;
      |   ^~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9923:24: error: ‘SNDCTL_SYSINFO’ was not declared in this scope; did you mean ‘SNDCTL_SYNTH_INFO’?
 9923 |   if ( ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo ) == -1 ) {
      |                        ^~~~~~~~~~~~~~
      |                        SNDCTL_SYNTH_INFO
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9923:41: error: ‘sysinfo’ was not declared in this scope; did you mean ‘sysex_info’?
 9923 |   if ( ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo ) == -1 ) {
      |                                         ^~~~~~~
      |                                         sysex_info
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9930:27: error: ‘sysinfo’ was not declared in this scope; did you mean ‘sysex_info’?
 9930 |   unsigned int nDevices = sysinfo.numaudios;
      |                           ^~~~~~~
      |                           sysex_info
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9937:3: error: ‘oss_audioinfo’ was not declared in this scope
 9937 |   oss_audioinfo ainfo;
      |   ^~~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9941:5: error: ‘ainfo’ was not declared in this scope
 9941 |     ainfo.dev = n;
      |     ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9942:26: error: ‘SNDCTL_AUDIOINFO’ was not declared in this scope; did you mean ‘SNDCTL_MIDI_INFO’?
 9942 |     if ( ioctl( mixerfd, SNDCTL_AUDIOINFO, &ainfo ) == -1 ) continue;
      |                          ^~~~~~~~~~~~~~~~
      |                          SNDCTL_MIDI_INFO
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: At global scope:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9974:62: error: ‘oss_audioinfo’ has not been declared
 9974 | bool RtApiOss :: probeDeviceInfo( RtAudio::DeviceInfo &info, oss_audioinfo &ainfo )
      |                                                              ^~~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘bool RtApiOss::probeDeviceInfo(RtAudio::DeviceInfo&, int&)’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9977:14: error: request for member ‘caps’ in ‘ainfo’, which is of non-class type ‘int’
 9977 |   if ( ainfo.caps & PCM_CAP_OUTPUT ) info.outputChannels = ainfo.max_channels;
      |              ^~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9977:21: error: ‘PCM_CAP_OUTPUT’ was not declared in this scope; did you mean ‘PCM_ENABLE_OUTPUT’?
 9977 |   if ( ainfo.caps & PCM_CAP_OUTPUT ) info.outputChannels = ainfo.max_channels;
      |                     ^~~~~~~~~~~~~~
      |                     PCM_ENABLE_OUTPUT
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9977:66: error: request for member ‘max_channels’ in ‘ainfo’, which is of non-class type ‘int’
 9977 |   if ( ainfo.caps & PCM_CAP_OUTPUT ) info.outputChannels = ainfo.max_channels;
      |                                                                  ^~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9978:14: error: request for member ‘caps’ in ‘ainfo’, which is of non-class type ‘int’
 9978 |   if ( ainfo.caps & PCM_CAP_INPUT ) info.inputChannels = ainfo.max_channels;
      |              ^~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9978:21: error: ‘PCM_CAP_INPUT’ was not declared in this scope; did you mean ‘SYNTH_CAP_INPUT’?
 9978 |   if ( ainfo.caps & PCM_CAP_INPUT ) info.inputChannels = ainfo.max_channels;
      |                     ^~~~~~~~~~~~~
      |                     SYNTH_CAP_INPUT
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9978:64: error: request for member ‘max_channels’ in ‘ainfo’, which is of non-class type ‘int’
 9978 |   if ( ainfo.caps & PCM_CAP_INPUT ) info.inputChannels = ainfo.max_channels;
      |                                                                ^~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9979:14: error: request for member ‘caps’ in ‘ainfo’, which is of non-class type ‘int’
 9979 |   if ( ainfo.caps & PCM_CAP_DUPLEX ) {
      |              ^~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9979:21: error: ‘PCM_CAP_DUPLEX’ was not declared in this scope; did you mean ‘DSP_CAP_DUPLEX’?
 9979 |   if ( ainfo.caps & PCM_CAP_DUPLEX ) {
      |                     ^~~~~~~~~~~~~~
      |                     DSP_CAP_DUPLEX
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9980:69: error: request for member ‘caps’ in ‘ainfo’, which is of non-class type ‘int’
 9980 |     if ( info.outputChannels > 0 && info.inputChannels > 0 && ainfo.caps & PCM_CAP_DUPLEX )
      |                                                                     ^~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9985:30: error: request for member ‘iformats’ in ‘ainfo’, which is of non-class type ‘int’
 9985 |   unsigned long mask = ainfo.iformats;
      |                              ^~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9990:15: error: ‘AFMT_S32_LE’ was not declared in this scope; did you mean ‘AFMT_S16_LE’?
 9990 |   if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE )
      |               ^~~~~~~~~~~
      |               AFMT_S16_LE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9990:37: error: ‘AFMT_S32_BE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
 9990 |   if ( mask & AFMT_S32_LE || mask & AFMT_S32_BE )
      |                                     ^~~~~~~~~~~
      |                                     AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9996:15: error: ‘AFMT_S24_LE’ was not declared in this scope; did you mean ‘AFMT_S16_LE’?
 9996 |   if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE )
      |               ^~~~~~~~~~~
      |               AFMT_S16_LE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:9996:37: error: ‘AFMT_S24_BE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
 9996 |   if ( mask & AFMT_S24_LE || mask & AFMT_S24_BE )
      |                                     ^~~~~~~~~~~
      |                                     AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10001:68: error: request for member ‘name’ in ‘ainfo’, which is of non-class type ‘int’
10001 |     errorStream_ << "RtApiOss::probeDeviceInfo: device (" << ainfo.name << ") data format not supported by RtAudio.";
      |                                                                    ^~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10009:14: error: request for member ‘nrates’ in ‘ainfo’, which is of non-class type ‘int’
10009 |   if ( ainfo.nrates ) {
      |              ^~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10010:37: error: request for member ‘nrates’ in ‘ainfo’, which is of non-class type ‘int’
10010 |     for ( unsigned int i=0; i<ainfo.nrates; i++ ) {
      |                                     ^~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10012:20: error: request for member ‘rates’ in ‘ainfo’, which is of non-class type ‘int’
10012 |         if ( ainfo.rates[i] == SAMPLE_RATES[k] ) {
      |                    ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10026:18: error: request for member ‘min_rate’ in ‘ainfo’, which is of non-class type ‘int’
10026 |       if ( ainfo.min_rate <= (int) SAMPLE_RATES[k] && ainfo.max_rate >= (int) SAMPLE_RATES[k] ) {
      |                  ^~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10026:61: error: request for member ‘max_rate’ in ‘ainfo’, which is of non-class type ‘int’
10026 |       if ( ainfo.min_rate <= (int) SAMPLE_RATES[k] && ainfo.max_rate >= (int) SAMPLE_RATES[k] ) {
      |                                                             ^~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10036:104: error: request for member ‘name’ in ‘ainfo’, which is of non-class type ‘int’
10036 | RtApiOss::probeDeviceInfo: no supported sample rates found for device (" << ainfo.name << ").";
      |                                                                                   ^~~~

/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘virtual bool RtApiOss::probeDeviceOpen(unsigned int, RtApi::StreamMode, unsigned int, unsigned int, unsigned int, RtAudioFormat, unsigned int*, RtAudio::StreamOptions*)’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10057:3: error: ‘oss_sysinfo’ was not declared in this scope
10057 |   oss_sysinfo sysinfo;
      |   ^~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10058:32: error: ‘SNDCTL_SYSINFO’ was not declared in this scope; did you mean ‘SNDCTL_SYNTH_INFO’?
10058 |   int result = ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo );
      |                                ^~~~~~~~~~~~~~
      |                                SNDCTL_SYNTH_INFO
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10058:49: error: ‘sysinfo’ was not declared in this scope; did you mean ‘sysex_info’?
10058 |   int result = ioctl( mixerfd, SNDCTL_SYSINFO, &sysinfo );
      |                                                 ^~~~~~~
      |                                                 sysex_info
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10087:3: error: ‘oss_audioinfo’ was not declared in this scope
10087 |   oss_audioinfo ainfo;
      |   ^~~~~~~~~~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10089:5: error: ‘ainfo’ was not declared in this scope
10089 |     ainfo.dev = device;
      |     ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10090:30: error: ‘SNDCTL_AUDIOINFO’ was not declared in this scope; did you mean ‘SNDCTL_MIDI_INFO’?
10090 |     result = ioctl( mixerfd, SNDCTL_AUDIOINFO, &ainfo );
      |                              ^~~~~~~~~~~~~~~~
      |                              SNDCTL_MIDI_INFO
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10097:62: error: ‘ainfo’ was not declared in this scope
10097 |     errorStream_ << "RtApiOss::probeDeviceOpen: device (" << ainfo.name << ") not found.";
      |                                                              ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10103:31: error: ‘ainfo’ was not declared in this scope
10103 |   if ( ( mode == OUTPUT && !( ainfo.caps & PCM_CAP_OUTPUT ) ) ||
      |                               ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10103:44: error: ‘PCM_CAP_OUTPUT’ was not declared in this scope; did you mean ‘PCM_ENABLE_OUTPUT’?
10103 |   if ( ( mode == OUTPUT && !( ainfo.caps & PCM_CAP_OUTPUT ) ) ||
      |                                            ^~~~~~~~~~~~~~
      |                                            PCM_ENABLE_OUTPUT
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10104:43: error: ‘PCM_CAP_INPUT’ was not declared in this scope; did you mean ‘SYNTH_CAP_INPUT’?
10104 |        ( mode == INPUT && !( ainfo.caps & PCM_CAP_INPUT ) ) ) {
      |                                           ^~~~~~~~~~~~~
      |                                           SYNTH_CAP_INPUT
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10122:15: error: ‘ainfo’ was not declared in this scope
10122 |       if ( !( ainfo.caps & PCM_CAP_DUPLEX ) ) {
      |               ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10122:28: error: ‘PCM_CAP_DUPLEX’ was not declared in this scope; did you mean ‘DSP_CAP_DUPLEX’?
10122 |       if ( !( ainfo.caps & PCM_CAP_DUPLEX ) ) {
      |                            ^~~~~~~~~~~~~~
      |                            DSP_CAP_DUPLEX
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10129:117: error: ‘ainfo’ was not declared in this scope
10129 | :probeDeviceOpen: input/output channels must be equal for OSS duplex device (" << ainfo.name << ").";
      |                                                                                   ^~~~~

/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10144:14: error: ‘ainfo’ was not declared in this scope
10144 |   fd = open( ainfo.devnode, flags, 0 );
      |              ^~~~~
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10211:22: error: ‘AFMT_S16_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10211 |     else if ( mask & AFMT_S16_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10218:17: error: ‘AFMT_S24_NE’ was not declared in this scope; did you mean ‘AFMT_S16_NE’?
10218 |     if ( mask & AFMT_S24_NE ) {
      |                 ^~~~~~~~~~~
      |                 AFMT_S16_NE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10222:22: error: ‘AFMT_S24_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10222 |     else if ( mask & AFMT_S24_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10229:17: error: ‘AFMT_S32_NE’ was not declared in this scope; did you mean ‘AFMT_S16_NE’?
10229 |     if ( mask & AFMT_S32_NE ) {
      |                 ^~~~~~~~~~~
      |                 AFMT_S16_NE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10233:22: error: ‘AFMT_S32_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10233 |     else if ( mask & AFMT_S32_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10246:22: error: ‘AFMT_S32_NE’ was not declared in this scope; did you mean ‘AFMT_S16_NE’?
10246 |     else if ( mask & AFMT_S32_NE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_NE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10250:22: error: ‘AFMT_S24_NE’ was not declared in this scope; did you mean ‘AFMT_S16_NE’?
10250 |     else if ( mask & AFMT_S24_NE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_NE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10254:22: error: ‘AFMT_S16_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10254 |     else if ( mask & AFMT_S16_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10259:22: error: ‘AFMT_S32_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10259 |     else if ( mask & AFMT_S32_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10264:22: error: ‘AFMT_S24_OE’ was not declared in this scope; did you mean ‘AFMT_S16_BE’?
10264 |     else if ( mask & AFMT_S24_OE ) {
      |                      ^~~~~~~~~~~
      |                      AFMT_S16_BE
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘virtual void RtApiOss::closeStream()’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10521:29: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10521 |       ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 );
      |                             ^~~~~~~~~~~~~~~
      |                             SNDCTL_DSP_POST
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10523:29: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10523 |       ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 );
      |                             ^~~~~~~~~~~~~~~
      |                             SNDCTL_DSP_POST
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘virtual RtAudioErrorType RtApiOss::stopStream()’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10629:36: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10629 |     result = ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 );
      |                                    ^~~~~~~~~~~~~~~
      |                                    SNDCTL_DSP_POST
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10639:36: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10639 |     result = ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 );
      |                                    ^~~~~~~~~~~~~~~
      |                                    SNDCTL_DSP_POST
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp: In member function ‘virtual RtAudioErrorType RtApiOss::abortStream()’:
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10676:36: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10676 |     result = ioctl( handle->id[0], SNDCTL_DSP_HALT, 0 );
      |                                    ^~~~~~~~~~~~~~~
      |                                    SNDCTL_DSP_POST
/home/erich/mlt-7.24.0/src/modules/rtaudio/RtAudio.cpp:10686:36: error: ‘SNDCTL_DSP_HALT’ was not declared in this scope; did you mean ‘SNDCTL_DSP_POST’?
10686 |     result = ioctl( handle->id[1], SNDCTL_DSP_HALT, 0 );
      |                                    ^~~~~~~~~~~~~~~
      |                                    SNDCTL_DSP_POST
make[2]: *** [src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/build.make:90: src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/RtAudio.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:902: src/modules/rtaudio/CMakeFiles/mltrtaudio.dir/all] Error 2
make: *** [Makefile:136: all] Error 2

CMake Warning at CMakeLists.txt:301 (find_package):
By not providing "FindQt6.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt6", but
CMake did not find one.

Could not find a package configuration file provided by "Qt6" with any of
the following names:

Qt6Config.cmake
qt6-config.cmake

Add the installation prefix of "Qt6" to CMAKE_PREFIX_PATH or set "Qt6_DIR"
to a directory containing one of the above files. If "Qt6" provides a
separate development package or SDK, be sure it has been installed.

The instructions in that message seem self-explanatory. Did you try following those instructions?

error: ‘oss_audioinfo’ has not been declared

Your system is missing the Open Sound System (OSS) development headers. You should research how to add that. This was the first hit I found.
https://help.ubuntu.com/community/OpenSound
Or, maybe you want to disable the rtaudio module.

This bug tracker is not a support forum. Please see our support method here:
https://www.mltframework.org/support/

Maybe you would also find some good information in our build script and Docker file
https://github.com/mltframework/mlt-scripts/blob/master/build/build-melt.sh
https://github.com/mltframework/mlt/blob/master/Dockerfile