makemkv-oss build error on 1.18.1 on Linux

Everything related to MakeMKV
Post Reply
dickdaggins
Posts: 2
Joined: Thu Aug 28, 2025 6:44 pm

makemkv-oss build error on 1.18.1 on Linux

Post by dickdaggins »

Hi, not sure the best place to put this. On linux I can't build makemkv-oss due to this error:

Code: Select all

828.4 libffabi/src/ffabi.c:607:45: error: 'FF_PROFILE_UNKNOWN' undeclared (first use in this function); did you mean 'FFM_PROFILE_UNKNOWN'?
828.4   607 |             if (codec->profiles[i].profile==FF_PROFILE_UNKNOWN)
828.4       |                                             ^~~~~~~~~~~~~~~~~~
828.4       |                                             FFM_PROFILE_UNKNOWN
The 828.4 seems to be seconds into the build.

Hope this helps track the issue down, I was able to build before just fine so I think the error is actual.
dickdaggins
Posts: 2
Joined: Thu Aug 28, 2025 6:44 pm

Re: makemkv-oss build error on 1.18.1 on Linux

Post by dickdaggins »

Figured it out, didn't realize ffmpeg also had updated around the same time to a new major version. makemkv-oss doesn't support building against ffmpeg 8.0.

Here's my build scripts in case anyone runs into this and wants a quick fix:

Dockerfile:

Code: Select all

# This builds an image with makemkv installed
#sudo docker build /path/to/DockerfileFolder/ -f /path/to/DockerfileFolder/Dockerfile -t makemkv:latest

# Always stable-slim debian
FROM debian:stable-slim AS base

# Update, upgrade, ignore config file questions; Debian images auto-run apt-get clean
RUN \
    apt-get update && \
    apt-get upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"

RUN \
    apt-get install -y \
    build-essential \
    pkg-config \
    libc6-dev \
    libssl-dev \
    libexpat1-dev \
    libavcodec-dev \
    libgl1-mesa-dev \
    qtbase5-dev \
    zlib1g-dev \
    curl \
    wget \
    nasm \
    gnupg && \
    apt-get dist-clean

COPY ./makemkv_install.sh /makemkv_install.sh
RUN \
    chmod +x /makemkv_install.sh && \
    /makemkv_install.sh NA 7.1.1 && \
    rm /makemkv_install.sh
makemkv_install.sh:

Code: Select all

#!/bin/bash
# Setup based on https://github.com/tianon/dockerfiles/blob/master/makemkv/Dockerfile
# The Expat/MIT License
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.

MAKEMKV_VERSION_OVERRIDE=$1
FFMPEG_VERSION_OVERRIDE=$2 # Provide NA 1st entry (MAKEMKV_VERSION_OVERRIDE) to use just this and auto-get MAKEMKV_VERSION

INS="" # Empty insert
if [[ -z $MAKEMKV_VERSION_OVERRIDE ]] || [ "$MAKEMKV_VERSION_OVERRIDE" == "NA" ]; then
    # Auto-grab latest version
    MAKEMKV_VERSION=$(wget -q -O- https://www.makemkv.com/download/ | grep -o "[0-9.]*.txt" | sed 's/.txt//')
    # echo -e "Downloading MakeMKV $MAKEMKV_VERSION sha, bin, and oss"
else
    MAKEMKV_VERSION_CURRENT=$(wget -q -O- https://www.makemkv.com/download/ | grep -o "[0-9.]*.txt" | sed 's/.txt//')
    MAKEMKV_VERSION="$MAKEMKV_VERSION_OVERRIDE"
    if [ "$MAKEMKV_VERSION_CURRENT" != "$MAKEMKV_VERSION" ]; then
        INS="/old" # Insert /old for a version that's not the current
    fi
fi

set -ex
savedAptMark="$(apt-mark showmanual)"

#ffmpeg time
dir2return2=$(pwd)
wget -q -O- https://ffmpeg.org/ffmpeg-devel.asc | gpg --import
# gpg --batch --keyserver keyserver.ubuntu.com --recv-keys FCF986EA15E6E293A5644F10B4322F04D67658D8 #ffmpeg key
if [[ -z $FFMPEG_VERSION_OVERRIDE ]] || [ "$FFMPEG_VERSION_OVERRIDE" == "NA" ]; then
    # Auto-grab latest version
    ffmpeg_latest=$(wget -q -O- "https://github.com/FFmpeg/FFmpeg/tags/" | grep -Ev '\-dev' | grep -oP '/tag/n\K\d+\.\d+[\d\.]*' | sort -ruV | head -n1)
    # echo -e "Downloading MakeMKV $MAKEMKV_VERSION sha, bin, and oss"
else
    ffmpeg_latest="$FFMPEG_VERSION_OVERRIDE"
fi
wget -O "ffmpeg-$ffmpeg_latest.tar.xz" "https://ffmpeg.org/releases/ffmpeg-$ffmpeg_latest.tar.xz"
wget -O "ffmpeg-$ffmpeg_latest.tar.xz.asc" "https://ffmpeg.org/releases/ffmpeg-$ffmpeg_latest.tar.xz.asc"
gpg --verify ffmpeg-$ffmpeg_latest.tar.xz.asc ffmpeg-$ffmpeg_latest.tar.xz || exit 1
gpgconf --kill all
mkdir -p "ffmpeg-$ffmpeg_latest"
tar -xvf "ffmpeg-$ffmpeg_latest.tar.xz" -C "ffmpeg-$ffmpeg_latest" --strip-components=1
rm "ffmpeg-$ffmpeg_latest.tar.xz"
cd "ffmpeg-$ffmpeg_latest"
./configure --prefix=/tmp/ffmpeg --enable-static --disable-shared --enable-pic
make install
cd ..
rm -r "ffmpeg-$ffmpeg_latest"
rm "ffmpeg-$ffmpeg_latest.tar.xz.asc"
cd "$dir2return2" #like it never happened

#back to makemkv
wget -O 'sha256sums.txt.sig' "https://www.makemkv.com/download${INS}/makemkv-sha-${MAKEMKV_VERSION}.txt"
export GNUPGHOME="$(mktemp -d)"
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 2ECF23305F1FC0B32001673394E3083A18042697 #makemkv key
gpg --batch --decrypt --output sha256sums.txt sha256sums.txt.sig
gpgconf --kill all
rm -rf "$GNUPGHOME" sha256sums.txt.sig


makemkv_install_dir='/opt/makemkv'
export PREFIX='/usr'
for ball in makemkv-oss makemkv-bin; do
	wget -O "$ball.tgz" "https://www.makemkv.com/download${INS}/${ball}-${MAKEMKV_VERSION}.tar.gz"
	sha256="$(grep "  $ball-${MAKEMKV_VERSION}[.]tar[.]gz\$" sha256sums.txt)"
	sha256="${sha256%% *}"
	[ -n "$sha256" ]
	echo "$sha256 *$ball.tgz" | sha256sum -c -
	mkdir -p "$ball"
	tar -xvf "$ball.tgz" -C "$ball" --strip-components=1
	rm "$ball.tgz"
	cd "$ball"
	if [ -f configure ]; then
		./configure --prefix="$PREFIX"
	else
		mkdir -p tmp
		touch tmp/eula_accepted
	fi
    if [ "$ball" = makemkv-oss ]; then # get that ffmpeg in the build
        PKG_CONFIG_PATH=/tmp/ffmpeg/lib/pkgconfig ./configure
    fi
    make -j "$(nproc)" PREFIX="$PREFIX"
    make install DESTDIR="$makemkv_install_dir" PREFIX="$PREFIX"
	cd ..
	rm -r "$ball"
done
rm -rf /tmp/ffmpeg # clean up ffmpeg

rm sha256sums.txt
apt-mark auto '.*' > /dev/null

[ -z "$savedAptMark" ] || apt-mark manual $savedAptMark
find /usr/local -type f -executable -o -name '*.so' -exec ldd '{}' ';' \
	| awk '/=>/ { so = $(NF-1); if (index(so, "/usr/local/") == 1) { next }; gsub("^/(usr/)?", "", so); printf "*%s\n", so }' \
	| sort -u \
	| xargs -r dpkg-query --search \
	| cut -d: -f1 \
	| sort -u \
	| xargs -r apt-mark manual

# Bonus unfindable libs https://github.com/jlesage/docker-makemkv/blob/master/src/makemkv/build.sh
mkdir -p "$makemkv_install_dir$PREFIX"/lib/qt5/plugins/platforms
cp -av /usr/plugins/platforms/libqxcb.so "$makemkv_install_dir$PREFIX"/lib/qt5/plugins/platforms/ || :
cp -av /usr/lib/x86_64-linux-gnu/libcurl.so.4* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_compat* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnsl*so* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_nis[.-]* "$makemkv_install_dir$PREFIX"/lib/ || :
cp -av /lib/x86_64-linux-gnu/libnss_files* "$makemkv_install_dir$PREFIX"/lib/ || :

# Now make sure the dependencies are where they need to be as well https://github.com/jlesage/docker-makemkv/blob/master/src/makemkv/build.sh
find "$makemkv_install_dir$PREFIX" -type f -executable -or -name 'lib*.so*' | while read BIN
do
    RAW_DEPS="$(LD_LIBRARY_PATH="$makemkv_install_dir$PREFIX/lib" ldd "$BIN")"
    echo "Dependencies for $BIN:"
    echo "================================"
    echo "$RAW_DEPS"
    echo "================================"

    if echo "$RAW_DEPS" | grep -q " not found"; then
        echo "ERROR: Some libraries are missing!"
        exit 1
    fi

    LD_LIBRARY_PATH="$makemkv_install_dir$PREFIX/lib" ldd "$BIN" | (grep " => " || true) | cut -d'>' -f2 | sed 's/^[[:space:]]*//' | cut -d'(' -f1 | while read dep
    do
        dep_real="$(realpath "$dep")"
        dep_basename="$(basename "$dep_real")"

        # Skip already-processed libraries.
        [ ! -f "$makemkv_install_dir$PREFIX/lib/$dep_basename" ] || continue

        echo "  -> Found library: $dep"
        cp "$dep_real" "$makemkv_install_dir$PREFIX/lib/"
        while true; do
            [ -L "$dep" ] || break;
            ln -sf "$dep_basename" "$makemkv_install_dir$PREFIX"/lib/$(basename $dep)
            dep="$(readlink -f "$dep")"
        done
    done
done
Post Reply