Browse Source

Increase crossbuilding flexibility

bryan 3 years ago
parent
commit
7ea4205c3a
1 changed files with 105 additions and 107 deletions
  1. 105 107
      installJRMC

+ 105 - 107
installJRMC

@@ -42,11 +42,9 @@ printHelp() {
 		    --install, -i repo|rpm
 		        repo: Install MC from repository, updates are handled by the system package manager
 		        rpm: Build and install RPM locally (RPM-based distros only)
-		    --build
-		        Build RPM from source DEB (but don't install it)
-            --build-suse
-                Override OS detection and build SUSE RPM
-		    --MCVERSION VERSION
+		    --build [TARGET DISTRO]
+		        Build RPM from source DEB but do not install. Optional parameter allows cross-building RPMs (ex. 'suse', 'fedora', 'centos').
+		    --mcversion VERSION
 		        Specify the MC version, ex. "28.0.25" (Default: latest version)
 		    --outputdir PATH
 		        Generate rpmbuild output in this directory (Default: $PWD/output)
@@ -81,11 +79,11 @@ printHelp() {
 
 		SERVICES
 		    jriver-mediaserver
-		        Enable and start a mediaserver systemd service (REQUIRES an existing X server)
+		        Enable and start a mediaserver systemd service (requires an existing X server)
 		    jriver-mediacenter
-		        Enable and start a mediacenter systemd service (REQUIRES an existing X server)
+		        Enable and start a mediacenter systemd service (requires an existing X server)
 		    jriver-x11vnc
-		        Enable and start x11vnc for the local desktop (REQUIRES an existing X server)
+		        Enable and start x11vnc for the local desktop (requires an existing X server)
 		        Usually combined with jriver-mediaserver or jriver-mediacenter services
 		        --vncpass and --display are optional (see below)
 		    jriver-xvnc
@@ -238,7 +236,7 @@ parseInput() {
         INSTALL_TYPE="repo"
     fi
 
-    if _input=$(getopt -o +i:vdhus:c: -l install:,build,build-suse,outputdir:,mcversion:,restorefile:,betapass:,service-user:,service:,version,debug,help,uninstall,createrepo,createrepo-suse,createrepo-webroot:,createrepo-user:,vncpass:,display:,container:,tests,compat -- "$@"); then
+    if _input=$(getopt -o +i:vdhus:c: -l install:,build::,outputdir:,mcversion:,restorefile:,betapass:,service-user:,service:,version,debug,help,uninstall,createrepo,createrepo-suse,createrepo-webroot:,createrepo-user:,vncpass:,display:,container:,tests,compat -- "$@"); then
         eval set -- "$_input"
         while true; do
             case "$1" in
@@ -255,6 +253,7 @@ parseInput() {
                     ;;
                 --build)
                     BUILD_SWITCH=true
+                    shift && BUILD_TARGET="$1"
                     ;;
                 --build-suse)
                     BUILD_SWITCH=true
@@ -335,6 +334,8 @@ parseInput() {
         err "Incorrect options provided"
         printHelp && exit 1
     fi
+
+    [[ -v BUILD_TARGET ]] && echo "$BUILD_TARGET"
 }
 
 
@@ -592,7 +593,6 @@ acquireDeb() {
         return 0
     fi
 
-    installPackage --silent wget
     if [[ -v BETAPASS ]]; then
         echo "Checking beta repo..."
         if wget -q -O "$DEBFILENAME" \
@@ -624,126 +624,126 @@ acquireDeb() {
 packageTranslations() {
     debug "Running: ${FUNCNAME[0]}"
 
-    declare requires id i
+
+}
+
+
+#######################################
+# Creates a SPEC file and builds the RPM from the source DEB using rpmbuild
+#######################################
+buildRPM() {
+    debug "Running: ${FUNCNAME[0]}"
+
+    declare _ec id i
+    declare -a requires recommends
     declare -A dupes
-    declare -ga REQUIRES RECOMMENDS
+    declare -g MCRPM="$OUTPUTDIR/RPMS/x86_64/MediaCenter-$MCVERSION.x86_64.rpm"
+
+    # skip rebuilding the rpm if it already exists
+    if [[ -f "$MCRPM" ]]; then
+        echo "$MCRPM already exists. Skipping build step."
+        return 0
+    fi
+
+    [[ ! -d "$OUTPUTDIR/SPECS" ]] && mkdir -p "$OUTPUTDIR/SPECS"
     
     id="$ID" # For crossbuilding, use a temp mutable ID
+    [[ -v BUILD_SUSE_SWITCH ]] && id="opensuse"
 
     # Load deb dependencies into array
-    IFS=',' read -ra REQUIRES <<< "$(dpkg-deb -f "$DEBFILENAME" Depends)"
-    IFS=',' read -ra RECOMMENDS <<< "$(dpkg-deb -f "$DEBFILENAME" Recommends)"
+    IFS=',' read -ra requires <<< "$(dpkg-deb -f "$DEBFILENAME" Depends)"
+    IFS=',' read -ra recommends <<< "$(dpkg-deb -f "$DEBFILENAME" Recommends)"
 
     # Clean up formatting
-    REQUIRES=("${REQUIRES[@]%%|*}")
-    REQUIRES=("${REQUIRES[@]/?:/}")
-    REQUIRES=("${REQUIRES[@]# }")
-    REQUIRES=("${REQUIRES[@]% }")
-    REQUIRES=("${REQUIRES[@]//\(/}")
-    REQUIRES=("${REQUIRES[@]//)/}")
-    RECOMMENDS=("${RECOMMENDS[@]%%|*}")
-    RECOMMENDS=("${RECOMMENDS[@]/?:/}")
-    RECOMMENDS=("${RECOMMENDS[@]# }")
-    RECOMMENDS=("${RECOMMENDS[@]% }")
-    RECOMMENDS=("${RECOMMENDS[@]//\(/}")
-    RECOMMENDS=("${RECOMMENDS[@]//)/}")
+    requires=("${requires[@]%%|*}")
+    requires=("${requires[@]/?:/}")
+    requires=("${requires[@]# }")
+    requires=("${requires[@]% }")
+    requires=("${requires[@]//\(/}")
+    requires=("${requires[@]//)/}")
+    recommends=("${recommends[@]%%|*}")
+    recommends=("${recommends[@]/?:/}")
+    recommends=("${recommends[@]# }")
+    recommends=("${recommends[@]% }")
+    recommends=("${recommends[@]//\(/}")
+    recommends=("${recommends[@]//)/}")
 
     # Translate package names
-    [[ -v BUILD_SUSE_SWITCH ]] && id="opensuse"
     case "$id" in
         fedora|centos)
-            REQUIRES=("${REQUIRES[@]/libc6/glibc}")
-            REQUIRES=("${REQUIRES[@]/libasound2/alsa-lib}")
-            REQUIRES=("${REQUIRES[@]/libuuid1/libuuid}")
-            REQUIRES=("${REQUIRES[@]/libx11-6/libX11}")
-            REQUIRES=("${REQUIRES[@]/libxext6/libXext}")
-            REQUIRES=("${REQUIRES[@]/libxcb1/libxcb}")
-            REQUIRES=("${REQUIRES[@]/libxdmcp6/libXdmcp}")
-            REQUIRES=("${REQUIRES[@]/libstdc++6/libstdc++}")
-            REQUIRES=("${REQUIRES[@]/libgtk-3-0/gtk3}")
-            REQUIRES=("${REQUIRES[@]/libgl1/mesa-libGL}")
-            REQUIRES=("${REQUIRES[@]/libpango-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangoft2-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangox-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangoxft-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libnss3/nss}")
-            REQUIRES=("${REQUIRES[@]/libnspr4/nspr}")
-            REQUIRES=("${REQUIRES[@]/libgomp1/libgomp}")
-            REQUIRES=("${REQUIRES[@]/libfribidi0/fribidi}")
-            REQUIRES=("${REQUIRES[@]/libfontconfig1/fontconfig}")
-            REQUIRES=("${REQUIRES[@]/libfreetype6/freetype}")
-            REQUIRES=("${REQUIRES[@]/libharfbuzz0b/harfbuzz}")
-            REQUIRES=("${REQUIRES[@]/libgbm1/mesa-libgbm}")
-            REQUIRES=("${REQUIRES[@]/libva2/libva}")
-            REQUIRES=("${REQUIRES[@]/libepoxy0/libepoxy}")
-            REQUIRES=("${REQUIRES[@]/liblcms2-2/lcms2}")
-            REQUIRES=("${REQUIRES[@]/libvulkan1/vulkan-loader}")
-            REQUIRES=("${REQUIRES[@]/libepoxy0/libepoxy}")
+            requires=("${requires[@]/libc6/glibc}")
+            requires=("${requires[@]/libasound2/alsa-lib}")
+            requires=("${requires[@]/libuuid1/libuuid}")
+            requires=("${requires[@]/libx11-6/libX11}")
+            requires=("${requires[@]/libxext6/libXext}")
+            requires=("${requires[@]/libxcb1/libxcb}")
+            requires=("${requires[@]/libxdmcp6/libXdmcp}")
+            requires=("${requires[@]/libstdc++6/libstdc++}")
+            requires=("${requires[@]/libgtk-3-0/gtk3}")
+            requires=("${requires[@]/libgl1/mesa-libGL}")
+            requires=("${requires[@]/libpango-1.0-0/pango}")
+            requires=("${requires[@]/libpangoft2-1.0-0/pango}")
+            requires=("${requires[@]/libpangox-1.0-0/pango}")
+            requires=("${requires[@]/libpangoxft-1.0-0/pango}")
+            requires=("${requires[@]/libnss3/nss}")
+            requires=("${requires[@]/libnspr4/nspr}")
+            requires=("${requires[@]/libgomp1/libgomp}")
+            requires=("${requires[@]/libfribidi0/fribidi}")
+            requires=("${requires[@]/libfontconfig1/fontconfig}")
+            requires=("${requires[@]/libfreetype6/freetype}")
+            requires=("${requires[@]/libharfbuzz0b/harfbuzz}")
+            requires=("${requires[@]/libgbm1/mesa-libgbm}")
+            requires=("${requires[@]/libva2/libva}")
+            requires=("${requires[@]/libepoxy0/libepoxy}")
+            requires=("${requires[@]/liblcms2-2/lcms2}")
+            requires=("${requires[@]/libvulkan1/vulkan-loader}")
+            requires=("${requires[@]/libepoxy0/libepoxy}")
             ;;
         opensuse*)
-            REQUIRES=("${REQUIRES[@]/libc6/glibc}")
-            REQUIRES=("${REQUIRES[@]/libasound2/alsa-lib}")
-            REQUIRES=("${REQUIRES[@]/libx11-6/libX11-6}")
-            REQUIRES=("${REQUIRES[@]/libxext6/libXext6}")
-            REQUIRES=("${REQUIRES[@]/libxdmcp6/libXdmcp6}")
-            REQUIRES=("${REQUIRES[@]/libgtk-3-0/gtk3}")
-            REQUIRES=("${REQUIRES[@]/libgl1/Mesa-libGL1}")
-            REQUIRES=("${REQUIRES[@]/libpango-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangoft2-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangox-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libpangoxft-1.0-0/pango}")
-            REQUIRES=("${REQUIRES[@]/libnss3/mozilla-nss}")
-            REQUIRES=("${REQUIRES[@]/libnspr4/mozilla-nspr}")
-            REQUIRES=("${REQUIRES[@]/libfribidi0/fribidi}")
-            REQUIRES=("${REQUIRES[@]/libfontconfig1/fontconfig}")
-            REQUIRES=("${REQUIRES[@]/libfreetype6*/freetype}") # Remove minimum version specifier
-            REQUIRES=("${REQUIRES[@]/libharfbuzz0b/libharfbuzz0}")
-            for i in "${!REQUIRES[@]}"; do
-                [[ "${REQUIRES[$i]}" == "mesa-vulkan-drivers" ]] && unset -v 'REQUIRES[i]'
+            requires=("${requires[@]/libc6/glibc}")
+            requires=("${requires[@]/libasound2/alsa-lib}")
+            requires=("${requires[@]/libx11-6/libX11-6}")
+            requires=("${requires[@]/libxext6/libXext6}")
+            requires=("${requires[@]/libxdmcp6/libXdmcp6}")
+            requires=("${requires[@]/libgtk-3-0/gtk3}")
+            requires=("${requires[@]/libgl1/Mesa-libGL1}")
+            requires=("${requires[@]/libpango-1.0-0/pango}")
+            requires=("${requires[@]/libpangoft2-1.0-0/pango}")
+            requires=("${requires[@]/libpangox-1.0-0/pango}")
+            requires=("${requires[@]/libpangoxft-1.0-0/pango}")
+            requires=("${requires[@]/libnss3/mozilla-nss}")
+            requires=("${requires[@]/libnspr4/mozilla-nspr}")
+            requires=("${requires[@]/libfribidi0/fribidi}")
+            requires=("${requires[@]/libfontconfig1/fontconfig}")
+            requires=("${requires[@]/libfreetype6*/freetype}") # Remove minimum version specifier
+            requires=("${requires[@]/libharfbuzz0b/libharfbuzz0}")
+            for i in "${!requires[@]}"; do
+                [[ "${requires[$i]}" == "mesa-vulkan-drivers" ]] && unset -v 'requires[i]'
             done
-            RECOMMENDS+=("libvulkan_intel")
-            RECOMMENDS+=("libvulkan_radeon")
+            recommends+=("libvulkan_intel")
+            recommends+=("libvulkan_radeon")
             ;;
     esac
 
     # Remove duplicates
-    for i in "${REQUIRES[@]}"; do
+    for i in "${requires[@]}"; do
         if [[ ! -v dupes[${i%% *}] ]]; then
-            requires+=("$i")
+            tmp+=("$i")
         fi
         dupes["${i%% *}"]=1
     done
-    REQUIRES=("${requires[@]}")
+    requires=("${tmp[@]}")
 
     # Convert array to newline delim'd string (for heredoc)
-    printf -v REQUIRES "Requires: %s\n" "${REQUIRES[@]}"
-    printf -v RECOMMENDS "Recommends: %s\n" "${RECOMMENDS[@]}"
+    printf -v requires "Requires: %s\n" "${requires[@]}"
+    printf -v recommends "Recommends: %s\n" "${recommends[@]}"
     # Strip last newline
-    REQUIRES="${REQUIRES%?}" 
-    RECOMMENDS="${RECOMMENDS%?}"
-}
-
-
-#######################################
-# Creates a SPEC file and builds the RPM from the source DEB using rpmbuild
-#######################################
-buildRPM() {
-    debug "Running: ${FUNCNAME[0]}"
-
-    declare _ec
-    declare -g MCRPM="$OUTPUTDIR/RPMS/x86_64/MediaCenter-$MCVERSION.x86_64.rpm"
-
-    # skip rebuilding the rpm if it already exists
-    if [[ -f "$MCRPM" ]]; then
-        echo "$MCRPM already exists. Skipping build step."
-        return 0
-    fi
-
-    [[ ! -d "$OUTPUTDIR/SPECS" ]] && mkdir -p "$OUTPUTDIR/SPECS"
+    requires="${requires%?}" 
+    recommends="${recommends%?}"
 
 	if [[ -v COMPAT_SWITCH ]]; then
 		# Strip minimum versions
-		REQUIRES=$(echo "$REQUIRES" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
+		requires=$(echo "$requires" | awk -F" " 'NF == 4 {print $1 " " $2} NF != 4 {print $0}')
 	fi
 
     # Create spec file
@@ -759,8 +759,8 @@ buildRPM() {
 
 		AutoReq:  0
 
-		${REQUIRES:-}
-		${RECOMMENDS:-}
+		${requires:-}
+		${recommends:-}
 
 		Provides: mediacenter$MVERSION
 
@@ -1515,10 +1515,8 @@ main() {
 
     # Build RPM from source deb package
     if [[ -v BUILD_SWITCH ]]; then
-        acquireDeb
         installPackage --silent "wget" "dpkg" "rpm-build"
-        packageTranslations
-
+        acquireDeb
         if ! buildRPM; then
             err "Build failed."
             # For automation, let's remove the source DEB and reaquire it on next run