#!/usr/bin/env bash set -e # --- Defaults --- userFlag=0 testsFlag=0 buildDir="build" installDir="$HOME/.local/4DSSE" # --- Help Menu --- show_help() { cat <> "$LOGFILE" } if [[ -f "$LOGFILE" ]]; then # Get the calendar datetime of the log file creation. # convert UNIX timestamp to human-readable date rm "$LOGFILE" log "${BLUE}[Info] Old log file removed.${NC}" fi touch "$LOGFILE" # --- Build 4DSSE --- log "${BLUE}[Info] Building 4DSSE...${NC}" if [[ $userFlag -eq 1 ]]; then log "${BLUE}[Info] Installing 4DSSE in user mode...${NC}" else log "${BLUE}[Info] Installing 4DSSE for developers...${NC}" fi if [[ $testsFlag -eq 1 ]]; then log "${BLUE}[Info] Building with tests...${NC}" else log "${BLUE}[Info] Building without tests...${NC}" fi # --- First check Boost status --- log "${BLUE}[Info] Checking Boost status...${NC}" # if the following script exists with anything other than a 0 status the script will exit if [[ -f ./build-config/boost/.boost_installed ]]; then log "${BLUE}[Info] Boost already installed. Skipping...${NC}" else log "${BLUE}[Info] Installing Boost...${NC}" if ! ./build-config/boost/install.sh; then log "${RED}[Error] Boost check failed. Exiting...${NC}" exit 1 else touch ./build-config/boost/.boost_installed log "${GREEN}[Success] Boost check passed.${NC}" fi fi # --- Check if the build dir has been configured with the correct flags --- log "${BLUE}[Info] Configuring build directory...${NC}" if [ -f "$buildDir/build.ninja" ]; then log "${BLUE}[Info] Build directory already configured. Skipping...${NC}" else if [[ $userFlag -eq 1 ]]; then meson setup "$buildDir" -Duser_mode=true --buildtype=release else if [[ $testsFlag -eq 1 ]]; then meson setup "$buildDir" --buildtype=debug else meson setup "$buildDir" --buildtype=debug -Dbuild_tests=false fi fi log "${GREEN}[Success] Build directory configured successfully.${NC}" fi log "${BLUE}[Info] Building 4DSSE...${NC}" meson compile -C "$buildDir" # --- Install 4DSSE --- if [[ $userFlag -eq 1 ]]; then log "${BLUE}[Info] Installing 4DSSE in user mode...${NC}" meson install -C "$buildDir" --no-rebuild --prefix="$installDir" fi if [[ $testsFlag -eq 1 ]]; then log "${BLUE}[Info] Running tests...${NC}" meson test -C "$buildDir" fi if [[ $userFlag -eq 1 ]]; then log "${GREEN}[Success] 4DSSE built and installed successfully.${NC}" else log "${GREEN}[Success] 4DSSE built successfully.${NC}" fi