From 8d34479711ee9fd69610f953d6ab130bb9a4ab26 Mon Sep 17 00:00:00 2001 From: Levon Gevorgyan Date: Thu, 7 Aug 2025 20:14:10 -0500 Subject: [PATCH] good ol fedora --- lib/build.sh | 50 +++++++++++++++++++++++++++------------------ lib/docker.sh | 19 ++++++++--------- lib/install_deps.sh | 9 ++++---- run-container.sh | 14 ------------- shfmt-watcher.sh | 2 +- 5 files changed, 45 insertions(+), 49 deletions(-) delete mode 100755 run-container.sh diff --git a/lib/build.sh b/lib/build.sh index ec98313..218da8f 100644 --- a/lib/build.sh +++ b/lib/build.sh @@ -15,31 +15,27 @@ set_compile_opts() { # set job count for all builds JOBS="$(nproc)" - MACHINE="$(cc -dumpmachine)" - test "${MACHINE}" == '' && return 1 - MACHINE_LIB="${PREFIX}/lib/${MACHINE}" + mapfile -t pkgconfigDirs < <(find "${PREFIX}" -type d -name pkgconfig) + for d in "${pkgconfigDirs[@]}"; do + if [[ ${d} =~ '64' ]]; then + MACHINE_LIB="${d}" + fi + done + test "${MACHINE_LIB}" == '' && return 1 + pkgconfigString="${pkgconfigDirs[*]}" + PKG_CONFIG_PATH="${pkgconfigString// /:}" # set prefix flags CONFIGURE_FLAGS+=("--prefix=${PREFIX}") MESON_FLAGS+=("--prefix" "${PREFIX}") CMAKE_FLAGS+=("-DCMAKE_PREFIX_PATH=${PREFIX}") CMAKE_FLAGS+=("-DCMAKE_INSTALL_PREFIX=${PREFIX}") - PKG_CONFIG_PATH="${PREFIX}/lib/pkgconfig" - PKG_CONFIG_PATH+=":${MACHINE_LIB}/pkgconfig" export PKG_CONFIG_PATH export PKG_CONFIG_DEBUG_SPEW=1 # add prefix include C_FLAGS+=("-I${PREFIX}/include") - # enabling a clean build - if [[ ${CLEAN} == 'true' ]]; then - CLEAN="${SUDO} rm -rf" - echo_info "performing clean build" - else - CLEAN='void' - fi - # enabling link-time optimization # shellcheck disable=SC2034 unset LTO_SWITCH LTO_FLAG LTO_BOOL @@ -77,7 +73,7 @@ set_compile_opts() { CONFIGURE_FLAGS+=('--enable-static') CMAKE_FLAGS+=("-DBUILD_SHARED_LIBS=OFF") MESON_FLAGS+=('--default-library=static') - CMAKE_FLAGS+=("-DCMAKE_EXE_LINKER_FLAGS='-static'") + CMAKE_FLAGS+=("-DCMAKE_EXE_LINKER_FLAGS=-static") PKG_CFG_FLAGS='--static' LIB_SUFF='a' else @@ -105,9 +101,10 @@ set_compile_opts() { CXX_FLAGS=("${C_FLAGS[@]}") CPP_FLAGS=("${C_FLAGS[@]}") RUSTFLAGS+=("-C target-cpu=${CPU}") - CMAKE_FLAGS+=("-DCMAKE_C_FLAGS='${C_FLAGS[*]}'") - CMAKE_FLAGS+=("-DCMAKE_CXX_FLAGS='${CXX_FLAGS[*]}'") + CMAKE_FLAGS+=("-DCMAKE_C_FLAGS=${C_FLAGS[*]}") + CMAKE_FLAGS+=("-DCMAKE_CXX_FLAGS=${CXX_FLAGS[*]}") MESON_FLAGS+=("-Dc_args=${C_FLAGS[*]}" "-Dcpp_args=${CPP_FLAGS[*]}") + echo_info "CLEAN: $CLEAN" dump_arr CONFIGURE_FLAGS dump_arr C_FLAGS dump_arr RUSTFLAGS @@ -220,9 +217,16 @@ download_release() { rm -rf "${wrong_ver_build}" done + # enabling a clean build + if [[ ${CLEAN} == 'true' ]]; then + DO_CLEAN="rm -rf" + else + DO_CLEAN='void' + fi + # create new build dir for clean builds test -d "${extracted_dir}" && - ${CLEAN} "${extracted_dir}" + { ${DO_CLEAN} "${extracted_dir}" || return 1; } if test "${ext}" != "git"; then wget_out="${base_dl_path}.${ext}" @@ -237,7 +241,10 @@ download_release() { test -d "${extracted_dir}" || { mkdir "${extracted_dir}" - tar -xf "${wget_out}" --strip-components=1 -C "${extracted_dir}" + tar -xf "${wget_out}" \ + --strip-components=1 \ + --no-same-permissions \ + -C "${extracted_dir}" } else # for git downloads @@ -330,6 +337,8 @@ build_libsvtav1() { } build_libsvtav1_psy() { + local hdr10pluslib="$(find "${PREFIX}" -type f -name "libhdr10plus-rs.${LIB_SUFF}")" + local dovilib="$(find "${PREFIX}" -type f -name "libdovi.${LIB_SUFF}")" cmake \ "${CMAKE_FLAGS[@]}" \ -DSVT_AV1_LTO="${LTO_SWITCH}" \ @@ -338,8 +347,9 @@ build_libsvtav1_psy() { -DCOVERAGE=OFF \ -DLIBDOVI_FOUND=1 \ -DLIBHDR10PLUS_RS_FOUND=1 \ - -DLIBHDR10PLUS_RS_LIBRARY="${MACHINE_LIB}/libhdr10plus-rs.${LIB_SUFF}" \ - -DLIBDOVI_LIBRARY="${MACHINE_LIB}/libdovi.${LIB_SUFF}" || return 1 + -DLIBHDR10PLUS_RS_LIBRARY="${hdr10pluslib}" \ + -DLIBDOVI_LIBRARY="${dovilib}" \ + . || return 1 ccache make -j"${JOBS}" || return 1 ${SUDO} make -j"${JOBS}" install || return 1 } diff --git a/lib/docker.sh b/lib/docker.sh index bc49b1e..83fd045 100644 --- a/lib/docker.sh +++ b/lib/docker.sh @@ -53,6 +53,13 @@ validate_selected_image() { fi } +docker_login() { + echo_if_fail docker login \ + -u "${DOCKER_REGISTRY_USER}" \ + -p "${DOCKER_REGISTRY_PASS}" \ + "${DOCKER_REGISTRY}" +} + FB_FUNC_NAMES+=('docker_build_image') FB_FUNC_DESCS['docker_build_image']='build docker image with required dependencies pre-installed' FB_FUNC_COMPLETION['docker_build_image']="${VALID_DOCKER_IMAGES[*]}" @@ -107,11 +114,7 @@ docker_build_image() { # if a docker registry is defined, push to it if [[ ${DOCKER_REGISTRY} != '' ]]; then - docker login \ - -u "${DOCKER_REGISTRY_USER}" \ - -p "${DOCKER_REGISTRY_PASS}" \ - "${DOCKER_REGISTRY}" - + docker_login || return 1 docker buildx build \ --push \ --platform "${PLATFORM}" \ @@ -168,11 +171,7 @@ docker_run_image() { # if a docker registry is defined, pull from it if [[ ${DOCKER_REGISTRY} != '' ]]; then - docker login \ - -u "${DOCKER_REGISTRY_USER}" \ - -p "${DOCKER_REGISTRY_PASS}" \ - "${DOCKER_REGISTRY}" - + docker_login || return 1 docker pull \ "${DOCKER_REGISTRY}/${image_tag}" docker tag "${DOCKER_REGISTRY}/${image_tag}" "${image_tag}" diff --git a/lib/install_deps.sh b/lib/install_deps.sh index 1554f96..913c619 100644 --- a/lib/install_deps.sh +++ b/lib/install_deps.sh @@ -62,7 +62,7 @@ print_req_pkgs() { libvorbis-dev libxcb1-dev pipx libxcb-shm0-dev libxcb-xfixes0-dev zlib1g-dev libssl-dev ninja-build - gobjc++ mawk libnuma-dev libcpuinfo-dev + gobjc++ mawk libnuma-dev mediainfo mkvtoolnix libgtest-dev ) # shellcheck disable=SC2034 @@ -74,7 +74,7 @@ print_req_pkgs() { local dnf_pkgs=( "${common_linux_pkgs[@]}" openssl-devel pipx ninja-build fontconfig-devel wget2 - cpuinfo-devel + cpuinfo-devel glibc-static libstdc++-static ) local req_pkgs_env_name="${pkg_mgr/-/_}_pkgs" @@ -97,9 +97,10 @@ print_pkg_mgr() { echo "export req_pkgs=($(print_req_pkgs))" } -print_os() { +print_os() { if [[ -f /etc/os-release ]]; then - source /etc/os-release ; echo "${ID}-${VERSION_ID}" + source /etc/os-release + echo "${ID}-${VERSION_ID}" fi } diff --git a/run-container.sh b/run-container.sh deleted file mode 100755 index 8cdc082..0000000 --- a/run-container.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -THIS_DIR="$(dirname "${BASH_SOURCE[0]}")" -IMAGE_NAME='ffmpeg_builder' -DISTROS=( debian ubuntu archlinux fedora ) -DISTROS=( debian ) - -for DISTRO in "${DISTROS[@]}"; do - docker run \ - --rm -it \ - -v "${THIS_DIR}":/workdir \ - -w /workdir \ - "${IMAGE_NAME}-${DISTRO}" bash main.sh -done \ No newline at end of file diff --git a/shfmt-watcher.sh b/shfmt-watcher.sh index 606409b..71c08bc 100755 --- a/shfmt-watcher.sh +++ b/shfmt-watcher.sh @@ -5,7 +5,7 @@ base="$(dirname "$(readlink -f "$0")")" inotifywait -m -r \ -e close_write \ -e moved_to \ - --format '%w%f' "$base" | while read -r file; do + --format '%w%f' "$base/lib" "$base/scripts" | while read -r file; do if [[ -f $file && $file =~ .sh ]]; then shfmt --write --simplify "$file" fi