From 814664adeef3fd98985ca42d2b4f30467a76fd53 Mon Sep 17 00:00:00 2001 From: Levon Gevorgyan Date: Sat, 13 Sep 2025 18:03:04 -0500 Subject: [PATCH] many small fixes --- lib/build.sh | 73 +++++++++++++++++++++++++++----------------------- lib/docker.sh | 26 +++++++++--------- lib/package.sh | 2 ++ lib/utils.sh | 24 +++++++++++++++++ 4 files changed, 79 insertions(+), 46 deletions(-) diff --git a/lib/build.sh b/lib/build.sh index 5aeee74..c487cc2 100644 --- a/lib/build.sh +++ b/lib/build.sh @@ -7,11 +7,9 @@ set_compile_opts() { CONFIGURE_FLAGS MESON_FLAGS \ RUSTFLAGS CMAKE_FLAGS \ FFMPEG_EXTRA_FLAGS \ - CARGO_FLAGS CARGO_CINSTALL_FLAGS + CARGO_CINSTALL_FLAGS export LDFLAGS C_FLAGS CXX_FLAGS CPP_FLAGS \ - CONFIGURE_FLAGS MESON_FLAGS \ - RUSTFLAGS CMAKE_FLAGS \ - FFMPEG_EXTRA_FLAGS PATH + RUSTFLAGS PATH # set job count for all builds JOBS="$(nproc)" @@ -21,10 +19,11 @@ set_compile_opts() { LIBDIR="${PREFIX}/lib" LDFLAGS=("-L${LIBDIR}") - # set prefix flags + # set prefix flags and basic flags CONFIGURE_FLAGS+=( "--prefix=${PREFIX}" "--libdir=${LIBDIR}" + "--disable-debug" ) MESON_FLAGS+=( "--prefix" "${PREFIX}" @@ -37,10 +36,8 @@ set_compile_opts() { "-DCMAKE_INSTALL_LIBDIR=lib" "-DCMAKE_BUILD_TYPE=Release" ) - CARGO_BUILD_TYPE=release - CARGO_FLAGS+=("--${CARGO_BUILD_TYPE}") CARGO_CINSTALL_FLAGS=( - "--${CARGO_BUILD_TYPE}" + "--release" "--prefix" "${PREFIX}" "--libdir" "${LIBDIR}" ) @@ -63,7 +60,7 @@ set_compile_opts() { MESON_FLAGS+=("-Db_lto=true") RUSTFLAGS+=("-C lto=yes" "-C inline-threshold=1000" "-C codegen-units=1") else - LTO_FLAG='' + LTO_FLAG=' ' MESON_FLAGS+=("-Db_lto=false") RUSTFLAGS+=("-C lto=no") fi @@ -110,6 +107,7 @@ set_compile_opts() { USE_LIB_SUFF="${STATIC_LIB_SUFF}" DEL_LIB_SUFF="${SHARED_LIB_SUFF}" else + FFMPEG_EXTRA_FLAGS+=(--extra-ldflags="${LDFLAGS[*]}") LDFLAGS+=("-Wl,-rpath,${LIBDIR}" "-Wl,-rpath-link,${LIBDIR}") CONFIGURE_FLAGS+=( '--enable-shared' @@ -165,9 +163,22 @@ set_compile_opts() { # shellcheck disable=SC2178 RUSTFLAGS="${RUSTFLAGS[*]}" - # make sure RUSTUP_HOME and CARGO_HOME are defined - RUSTUP_HOME="${RUSTUP_HOME:-"${HOME}/.rustup"}" - CARGO_HOME="${CARGO_HOME:-"${HOME}/.cargo"}" + # make sure RUSTUP_HOME and CARGO_HOME are defined for SUDO builds + # set fallback values + local rustupHome cargoHome + if has_cmd rustup; then + rustupHome="$(bash_dirname "$(command -v rustup)")" + # move out of bin/ dir + rustupHome="$(cd "${rustupHome}/../" && echo "$PWD")" + fi + if has_cmd cargo; then + cargoHome="$(bash_dirname "$(command -v cargo)")" + # move out of bin/ dir + cargoHome="$(cd "${cargoHome}/../" && echo "$PWD")" + fi + + RUSTUP_HOME="${RUSTUP_HOME:-"${rustupHome}"}" + CARGO_HOME="${CARGO_HOME:-"${cargoHome}"}" test -d "${RUSTUP_HOME}" || echo_exit "RUSTUP_HOME does not exist" test -d "${CARGO_HOME}" || echo_exit "CARGO_HOME does not exist" export RUSTUP_HOME CARGO_HOME @@ -474,40 +485,28 @@ del_pkgconfig_gcc_s() { ### RUST ### build_hdr10plus_tool() { - cargo build "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_MODIFY} cp \ - "target/${CARGO_BUILD_TYPE}/hdr10plus_tool" \ - "${PREFIX}/bin/" || return 1 + ${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1 # build libhdr10plus cd hdr10plus || return 1 - cargo cbuild "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 + ${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 sanitize_sysroot_libs libhdr10plus-rs || return 1 } build_dovi_tool() { - cargo build "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_MODIFY} cp \ - "target/${CARGO_BUILD_TYPE}/dovi_tool" \ - "${PREFIX}/bin/" || return 1 + ${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1 # build libdovi cd dolby_vision || return 1 - cargo cbuild "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 + ${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 sanitize_sysroot_libs libdovi || return 1 } build_librav1e() { - cargo build "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_MODIFY} cp \ - "target/${CARGO_BUILD_TYPE}/rav1e" \ - "${PREFIX}/bin/" || return 1 + ${SUDO_CARGO} bash -c "cargo install --path . --root ${PREFIX}" || return 1 # build librav1e - cargo cbuild "${CARGO_FLAGS[@]}" || return 1 - ${SUDO_CARGO} bash -lc "PATH=\"${PATH}\" cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 + ${SUDO_CARGO} bash -c "cargo cinstall ${CARGO_CINSTALL_FLAGS[*]}" || return 1 sanitize_sysroot_libs librav1e || return 1 del_pkgconfig_gcc_s rav1e.pc || return 1 } @@ -537,8 +536,8 @@ build_libsvtav1() { } build_libsvtav1_psy() { - local hdr10pluslib="$(find -L "${PREFIX}" -type f -name "libhdr10plus-rs.${USE_LIB_SUFF}")" - local dovilib="$(find -L "${PREFIX}" -type f -name "libdovi.${USE_LIB_SUFF}")" + local hdr10pluslib="${LIBDIR}/libhdr10plus-rs.${USE_LIB_SUFF}" + local dovilib="${LIBDIR}/libdovi.${USE_LIB_SUFF}" cmake \ "${CMAKE_FLAGS[@]}" \ -DBUILD_TESTING=OFF \ @@ -749,8 +748,16 @@ build_libx264() { } build_libmp3lame() { + # https://sourceforge.net/p/lame/mailman/message/36081038/ + if is_darwin; then + remove_line \ + 'include/libmp3lame.sym' \ + 'lame_init_old' || return 1 + fi + ./configure \ - "${CONFIGURE_FLAGS[@]}" || return 1 + "${CONFIGURE_FLAGS[@]}" \ + --enable-nasm || return 1 ccache make -j"${JOBS}" || return 1 ${SUDO_MODIFY} make -j"${JOBS}" install || return 1 sanitize_sysroot_libs libmp3lame || return 1 diff --git a/lib/docker.sh b/lib/docker.sh index f8d1d86..5902e5f 100644 --- a/lib/docker.sh +++ b/lib/docker.sh @@ -34,9 +34,9 @@ check_docker() { # get full image digest for a given image get_docker_image_tag() { - local distro="$1" + local image="$1" local tag='' - case "${distro}" in + case "${image}" in ubuntu) tag='ubuntu:24.04' ;; debian) tag='debian:13' ;; fedora) tag='fedora:42' ;; @@ -73,9 +73,10 @@ echo_platform() { validate_selected_image() { local selectedImage="$1" local valid=1 - for distro in "${VALID_DOCKER_IMAGES[@]}"; do - if [[ ${selectedImage} == "${distro}" ]]; then + for image in "${VALID_DOCKER_IMAGES[@]}"; do + if [[ ${selectedImage} == "${image}" ]]; then valid=0 + break fi done if [[ valid -eq 1 ]]; then @@ -102,10 +103,10 @@ docker_build_image() { test -d "${DOCKER_DIR}" || mkdir -p "${DOCKER_DIR}" PLATFORM="${PLATFORM:-$(echo_platform)}" - echo_info "sourcing package manager for ${distro}" - local dockerDistro="$(get_docker_image_tag "${distro}")" + echo_info "sourcing package manager for ${image}" + local dockerDistro="$(get_docker_image_tag "${image}")" # specific file for evaluated package manager info - distroPkgMgr="${DOCKER_DIR}/$(bash_basename "${distro}")-pkg_mgr" + distroPkgMgr="${DOCKER_DIR}/$(bash_basename "${image}")-pkg_mgr" # get package manager info docker run \ "${DOCKER_RUN_FLAGS[@]}" \ @@ -116,7 +117,7 @@ docker_build_image() { # shellcheck disable=SC1090 source "${distroPkgMgr}" - dockerfile="${DOCKER_DIR}/Dockerfile_$(bash_basename "${distro}")" + dockerfile="${DOCKER_DIR}/Dockerfile_$(bash_basename "${image}")" { echo "FROM ${dockerDistro}" echo 'SHELL ["/bin/bash", "-c"]' @@ -154,7 +155,7 @@ docker_build_image() { } >"${dockerfile}" - image_tag="$(set_distro_image_tag "${distro}")" + image_tag="$(set_distro_image_tag "${image}")" docker buildx build \ --platform "${PLATFORM}" \ -t "${image_tag}" \ @@ -182,7 +183,7 @@ docker_save_image() { local image="$1" validate_selected_image "${image}" || return 1 check_docker || return 1 - image_tag="$(set_distro_image_tag "${distro}")" + image_tag="$(set_distro_image_tag "${image}")" echo_info "saving docker image for ${image_tag}" docker save "${image_tag}" | zstd -T0 >"${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")" || @@ -196,7 +197,7 @@ docker_load_image() { local image="$1" validate_selected_image "${image}" || return 1 check_docker || return 1 - image_tag="$(set_distro_image_tag "${distro}")" + image_tag="$(set_distro_image_tag "${image}")" echo_info "loading docker image for ${image_tag}" local archive="${DOCKER_DIR}/$(docker_image_archive_name "${image_tag}")" test -f "$archive" || return 1 @@ -222,8 +223,7 @@ docker_run_image() { runCmd+=("${cmd[@]}") fi - dockerDistro="${distro//-/:}" - image_tag="$(set_distro_image_tag "${distro}")" + image_tag="$(set_distro_image_tag "${image}")" # if a docker registry is defined, pull from it if [[ ${DOCKER_REGISTRY} != '' ]]; then diff --git a/lib/package.sh b/lib/package.sh index a7c753d..74e7851 100644 --- a/lib/package.sh +++ b/lib/package.sh @@ -15,6 +15,7 @@ FB_FUNC_DESCS['package']='package ffmpeg build' package() { check_for_package_cfg || return 0 + echo_info "packaging" local pkgDir="${IGN_DIR}/package" test -d "${pkgDir}" && rm -rf "${pkgDir}" mkdir "${pkgDir}" || return 1 @@ -26,4 +27,5 @@ package() { local tarball="ffmpeg-build-${HOSTTYPE}-$(print_os).tar" tar -cf "${tarball}" ff* || return 1 xz -e -9 "${tarball}" || return 1 + echo_pass "finished packaging ${tarball}.xz" } diff --git a/lib/utils.sh b/lib/utils.sh index 93b5d16..923c11f 100644 --- a/lib/utils.sh +++ b/lib/utils.sh @@ -203,6 +203,30 @@ is_positive_integer() { return 0 } +replace_line() { + local file="$1" + local search="$2" + local newLine="$3" + local newFile="${TMP_DIR}/$(bash_basename "${file}")" + + test -f "${newFile}" && rm "${newFile}" + while read -r line; do + if line_contains "${line}" "${search}"; then + echo -en "${newLine}" >>"${newFile}" + continue + fi + echo "${line}" >>"${newFile}" + done <"${file}" + + cp "${newFile}" "${file}" +} + +remove_line() { + local file="$1" + local search="$2" + replace_line "${file}" "${search}" '' +} + bash_sort() { local arr=("$@") local n=${#arr[@]}