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