aboutsummaryrefslogtreecommitdiff
path: root/browser/linux/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'browser/linux/build.sh')
-rwxr-xr-xbrowser/linux/build.sh159
1 files changed, 159 insertions, 0 deletions
diff --git a/browser/linux/build.sh b/browser/linux/build.sh
new file mode 100755
index 0000000..52becb8
--- /dev/null
+++ b/browser/linux/build.sh
@@ -0,0 +1,159 @@
+#!/bin/bash
+printf "\n------------------------------------- SCRIPT SETUP ------------------------------------------\n";
+
+# Prevents build from breaking in CI/CD environments
+export SHELL=/bin/bash;
+
+# Sets up internal script variables
+printf "\nSetting up script variables\n";
+SCRIPT_FOLDER=$(realpath $(dirname $0));
+REPOSITORY_FOLDER=$(realpath $SCRIPT_FOLDER/../);
+BRANDING_FOLDER=$SCRIPT_FOLDER/resources/source_files/browser/branding/librewolf;
+ICON_FOLDER=$REPOSITORY_FOLDER/branding/icon/;
+PACKAGE_FILE="librewolf*.tar.bz2";
+APPIMAGE_RESOURCE_FOLDER=$SCRIPT_FOLDER/resources/appimage;
+printf "SCRIPT_FOLDER: $SCRIPT_FOLDER\n";
+printf "REPOSITORY_FOLDER: $REPOSITORY_FOLDER\n";
+printf "BRANDING_FOLDER: $BRANDING_FOLDER\n";
+printf "ICON_FOLDER: $ICON_FOLDER\n";
+printf "PACKAGE_FILE: $PACKAGE_FILE\n";
+printf "APPIMAGE_RESOURCE_FOLDER: $APPIMAGE_RESOURCE_FOLDER\n";
+
+# Installs some needed dependencies
+printf "\nInstalling script dependencies\n";
+apt update;
+apt install sudo python python3 inkscape icnsutils wget fuse libfuse-dev kmod -y;
+
+# Loads the FUSE kernel module
+sudo depmod;
+sudo modprobe fuse;
+
+printf "\n\n---------------------------------- ICON GENERATION ------------------------------------------\n";
+
+printf "\nGenerating icons from $ICON_FOLDER and moving to $BRANDING_FOLDER\n";
+
+# Linux Icons
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/default16.png -w 16 -h 16;
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/default32.png -w 32 -h 32;
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/default48.png -w 48 -h 48;
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/default64.png -w 64 -h 64;
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/default128.png -w 128 -h 128;
+
+# Windows Icons
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/VisualElements_70.png -w 70 -h70;
+inkscape -z -f $ICON_FOLDER/icon.svg -e $BRANDING_FOLDER/VisualElements_150.png -w 150 -h150;
+
+# TODO: Add Apple Icons
+png2icns $BRANDING_FOLDER/firefox.icns $BRANDING_FOLDER/default128.png;
+
+inkscape -z -f $ICON_FOLDER/document-icon.svg -e $BRANDING_FOLDER/document-icon.png -w 128 -h 128;
+png2icns $BRANDING_FOLDER/document.icns $BRANDING_FOLDER/document-icon.png;
+rm -r $BRANDING_FOLDER/document-icon.png
+printf "\n\n-------------------------------------- PREBUILD ---------------------------------------------\n";
+
+# Downloads and runs bootstrapper to install dependencies.
+printf "\nRunning bootstrapper to install build dependencies\n";
+wget https://hg.mozilla.org/mozilla-central/raw-file/default/python/mozboot/bin/bootstrap.py;
+python ./bootstrap.py --application-choice=browser --no-interactive;
+
+# adds the new rust install to PATH
+printf "\nAdding new rust install to PATH\n";
+. $HOME/.cargo/env;
+
+printf "\n\n--------------------------------------- BUILD -----------------------------------------------\n";
+
+# Creates and enters the folder where compiling will take place
+printf "\nCreating compile folder\n";
+mkdir compile_folder;
+cd compile_folder;
+
+# Clones the firefox source code for compiling
+printf "\nCloning Firefox Source Code\n";
+hg clone https://hg.mozilla.org/releases/mozilla-release;
+
+# Copies our branding to the source code, changing it from firefox to librewolf
+printf "\nCopying branding to firefox source code\n";
+cp -r $SCRIPT_FOLDER/resources/source_files/* mozilla-release;
+
+cd mozilla-release;
+
+# Bootstraps librewolf again (using the ./mach script inside the source code)
+printf "\nRunning bootstrapper to install build dependencies (using ./mach script within source code)\n";
+./mach bootstrap --application-choice=browser --no-interactive;
+
+# Builds librewolf
+printf "\nBuilding LibreWolf\n";
+./mach build;
+
+# Packages LibreWolf
+printf "\nPackaging LibreWolf\n";
+./mach package;
+
+cd $SCRIPT_FOLDER;
+
+# moves the packaged tarball to the main folder
+printf "\nRelocating binary tarball to script folder\n"
+cp ./compile_folder/mozilla-release/obj*/dist/librewolf*.tar.bz2 ./;
+
+printf "\n\n--------------------------------- SETTINGS INTEGRATION --------------------------------------\n";
+
+# Extracts the binary tarball
+printf "\nExtracting librewolf binary tarball\n";
+tar -xvf ./$PACKAGE_FILE;
+
+# Adds the librefox config files to the packaged tarball
+printf "\nCopying librewolf settings to extracted binary tarball\n";
+cp -r $REPOSITORY_FOLDER/settings/* ./librewolf;
+
+# Repacks the binary tarball
+printf "\nRecompressing binary tarball\n";
+tar -jcvf ./$PACKAGE_FILE librewolf;
+
+# Moves the final binary tarball to build_output
+printf "\nMoving binary tarball to build_output folder\n";
+mv $PACKAGE_FILE $SCRIPT_FOLDER/build_output/;
+
+printf "\n\n------------------------------------ APPIMAGE BUILD -----------------------------------------\n";
+
+# Copy and generate icons
+printf "\nGenerating AppImage Icons\n";
+cp $ICON_FOLDER/icon.svg $APPIMAGE_RESOURCE_FOLDER/librewolf.svg;
+ln -rs $APPIMAGE_RESOURCE_FOLDER/librewolf.svg $SCRIPT_FOLDER/resources/appimage/.DirIcon;
+
+# Copy appimage resources to main tarball
+printf "Copying AppImage resources to binary tarball folder\n";
+cp -vrT $APPIMAGE_RESOURCE_FOLDER ./librewolf;
+
+# Downloads appimage tool
+printf "\nDownloading AppImage Tool\n";
+wget https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-x86_64.AppImage -O appimagetool;
+chmod +x ./appimagetool;
+./appimagetool --appimage-extract;
+
+# Generate AppImage
+printf "\nGenerating AppImage\n";
+./squashfs-root/AppRun ./librewolf;
+chmod +x ./LibreWolf*.AppImage;
+
+# Move AppImage to build_output folder
+printf "\nMoving AppImage to build_output folder\n";
+mv ./LibreWolf*.AppImage ./build_output;
+
+printf "\n\n---------------------------------------- CLEANUP --------------------------------------------\n";
+
+# Remove the compile folder
+printf "\nDeleting the compile_folder\n";
+rm -rf ./compile_folder;
+
+# Delete the extracted binary tarball folder
+printf "\nDeleting extracted binary tarball folder\n";
+rm -rf ./librewolf;
+
+# Delete the appimage tool
+printf "\nRemoving AppImage tool\n";
+rm -f ./appimagetool;
+rm -rf ./squashfs-root;
+
+# Delete the bootstrapper script
+printf "\nRemoving bootstrapper.py\n";
+rm -f ./bootstrap.py;
bgstack15