1#!/bin/bash 2install_packages=1 3rebuild="" 4sucommand="" 5missing_pkgs=() 6# build dependencies 7PKGLIST="gcc \ 8gcc-c++ \ 9make \ 10cmake \ 11yasm \ 12pkgconf-pkg-config \ 13fakeroot \ 14bzip2 \ 15zlib-devel \ 16patch \ 17rpm-build \ 18sqlite-devel \ 19qt5-qtbase-devel \ 20qt5-linguist \ 21libxslt \ 22mesa-libGL-devel \ 23mesa-libGLU-devel \ 24libvdpau-devel \ 25libva-devel \ 26libXv-devel \ 27libvorbis-devel \ 28libogg-devel \ 29alsa-lib-devel \ 30pulseaudio-libs-devel \ 31fribidi-devel \ 32fontconfig-devel \ 33freetype-devel \ 34opus-devel \ 35lame-devel \ 36libvpx-devel \ 37libaom-devel \ 38nv-codec-headers" 39# optional features 40OPTIONAL_PACKAGES="fdk-aac-devel \ 41twolame-devel \ 42xvidcore-devel \ 43x264-devel \ 44x265-devel" 45# 46usage() 47{ 48 echo "Usage: $0 [Options]" 49 echo "***********************" 50 echo " --help or -h : Print usage" 51 echo " --su : Don't prompt, use su to run commands as root" 52 echo " --sudo : Don't prompt, use sudo to run commands as root" 53 echo " --deps-only : Just install build dependencies and exit" 54 echo " --no-install : Don't install generated RPM packages" 55 echo " --rebuild : Preserve existing build directories" 56} 57# 58fail() 59{ 60 echo "$1" && exit 1 61} 62# 63check_deps() 64{ 65 for i in $@; do 66 rpm -q $i > /dev/null 67 notfound=$?; 68 if [ ${notfound} -eq 1 ]; then 69 missing_pkgs+=($i) 70 fi 71 done 72} 73# 74get_su_command() 75{ 76 if [ "x${sucommand}" != "x" ]; then 77 return 0 78 fi 79 read -p "Shall su or sudo be used to run commands with root privileges? " input 80 if [ "x${input}" = "xsu" ]; then 81 sucommand="su" 82 elif [ "x${input}" = "xsudo" ]; then 83 sucommand="sudo" 84 else 85 echo "Can't parse the input." 86 return 1 87 fi 88} 89# 90install_deps() 91{ 92 check_deps ${PKGLIST} 93 missing_required=(${missing_pkgs[*]}) 94 missing_pkgs=() 95 check_deps ${OPTIONAL_PACKAGES} 96 missing_extras=(${missing_pkgs[*]}) 97 missing_pkgs=() 98 if [ ${#missing_required[@]} -gt 0 ]; then 99 echo "Missing required development packages:" 100 echo ${missing_required[*]} 101 get_su_command || exit 1 102 message="Failed to install all required packages, aborting." 103 if [ "x${sucommand}" = "xsu" ]; then 104 su -c "/usr/bin/dnf install ${missing_required[*]}" || fail ${message} 105 elif [ "x${sucommand}" = "xsudo" ]; then 106 sudo /usr/bin/dnf install ${missing_required[*]} || fail ${message} 107 fi 108 fi 109 if [ ${#missing_extras[@]} -gt 0 ]; then 110 echo "Some useful optional development packages are missing." 111 echo "RPM Fusion repositories must be already configured and enabled on this system to install them." 112 echo ${missing_extras[*]} 113 read -p "Shall these packages be installed too? Type uppercase Y to install. " input 114 if [ "x${input}" = "xY" ]; then 115 get_su_command || { echo "Skipping optional packages." && return 0; } 116 if [ "x${sucommand}" = "xsu" ]; then 117 su -c "/usr/bin/dnf install ${missing_extras[*]}" || return 0 118 elif [ "x${sucommand}" = "xsudo" ]; then 119 sudo /usr/bin/dnf install ${missing_extras[*]} || return 0 120 fi 121 else 122 echo "Skipped." 123 fi 124 fi 125} 126# 127install_avidemux() 128{ 129 echo "Installing Avidemux..." 130 get_su_command || fail "Can't install Avidemux." 131 if $(rpm -qa | grep -q avidemux); then 132 echo "Uninstalling previously installed Avidemux packages." 133 message="Can't remove installed Avidemux packages, aborting." 134 if [ "x${sucommand}" = "xsu" ]; then 135 su -c '/usr/bin/dnf remove "avidemux*"' || fail ${message} 136 elif [ "x${sucommand}" = "xsudo" ]; then 137 sudo /usr/bin/dnf remove "avidemux*" || fail ${message} 138 fi 139 fi 140 cd debs || fail "debs folder not present in the current directory, aborting." 141 message="Installation failed." 142 if [ "x${sucommand}" = "xsu" ]; then 143 su -c "/usr/bin/dnf install avidemux*.rpm" || fail ${message} 144 elif [ "x${sucommand}" = "xsudo" ]; then 145 sudo /usr/bin/dnf install avidemux*.rpm || fail ${message} 146 fi 147} 148# 149echo "Automatic RPM generator for Avidemux, Fedora 29 version" 150ID=$(id -u) 151if [ "x${ID}" = "x0" ]; then 152 fail "Don't build Avidemux as root, aborting" 153fi 154# 155while [ $# != 0 ]; do 156 config_option="$1" 157 case "${config_option}" in 158 -h|--help) 159 usage 160 exit 0 161 ;; 162 --deps-only) 163 install_deps 164 exit 0 165 ;; 166 --su) 167 sucommand="su" 168 ;; 169 --sudo) 170 sucommand="sudo" 171 ;; 172 --no-install) 173 install_packages=0 174 ;; 175 --rebuild) 176 rebuild="${config_option}" 177 ;; 178 *) 179 echo "unknown parameter ${config_option}" 180 usage 181 exit 1 182 ;; 183 esac 184 shift 185done 186# 187install_deps 188# 189echo "Building..." 190umask 0022 191logfile="/tmp/log-bootstrap-$(date +%F_%T).log" 192bash bootStrap.bash ${rebuild} --rpm 2>&1 | tee ${logfile} 193if [ ${PIPESTATUS[0]} -ne 0 ]; then 194 fail "Build failed, please inspect ${logfile} and /tmp/logbuild* files." 195fi 196# 197echo "Build completed, the RPMS are in the debs folder" 198# 199if [ ${install_packages} -eq 1 ]; then 200 install_avidemux 201fi 202# 203exit 0 204