From 43f57d5e738ee54b5d2b14061483f8cf80d34ab1 Mon Sep 17 00:00:00 2001 From: Emily Boudreaux Date: Fri, 21 Mar 2025 11:14:28 -0400 Subject: [PATCH] build(mk): updated auto build script --- .gitignore | 1 + mk | 104 ++++++++++++++++++++++++++++++++++++++++++----------- 2 files changed, 84 insertions(+), 21 deletions(-) diff --git a/.gitignore b/.gitignore index 4e708e7..77b7f3d 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,4 @@ output/ .boost_installed 4DSSE_logs/ +.last_build_flags diff --git a/mk b/mk index 1c9bb3c..28e2811 100755 --- a/mk +++ b/mk @@ -5,9 +5,11 @@ set -e # --- Defaults --- userFlag=0 testsFlag=0 +runTestsFlag=0 buildDir="build" installDir="$HOME/.local/4DSSE" + # --- Help Menu --- show_help() { cat < /dev/null; then + log "${RED}[Error] Meson is not installed. Exiting...${NC}" + log "${YELLOW}[Info] Please install Meson and try again.${NC}" + exit 1 +else + log "${MAGENTA}[Success] Meson is installed. Continuing...${NC}" +fi + # --- Build 4DSSE --- log "${BLUE}[Info] Building 4DSSE...${NC}" if [[ $userFlag -eq 1 ]]; then @@ -105,7 +123,7 @@ else log "${BLUE}[Info] Installing 4DSSE for developers...${NC}" fi -if [[ $testsFlag -eq 1 ]]; then +if [[ $testsFlag -eq 0 ]]; then log "${BLUE}[Info] Building with tests...${NC}" else log "${BLUE}[Info] Building without tests...${NC}" @@ -115,7 +133,7 @@ fi 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}" + log "${MAGENTA}[Succsess] Boost already installed. Skipping...${NC}" else log "${BLUE}[Info] Installing Boost...${NC}" if ! ./build-config/boost/install.sh; then @@ -127,21 +145,62 @@ else 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 +#check if the last build flags are the same as the current build flags +# if the flags are the same skip the configuration step +# if they are different then reconfigure the build directory + +# do not use grep -oP as it is not POSIX compliant + +doReconfigure=1 + +log "${BLUE}[Info] Checking last build flags...${NC}" +if [[ -f $buildDir/.last_build_flags ]]; then + lastUserFlag=$(grep -Eo 'userFlag=[0-9]+' $buildDir/.last_build_flags | cut -d'=' -f2) + lastTestsFlag=$(grep -Eo 'testsFlag=[0-9]+' $buildDir/.last_build_flags | cut -d'=' -f2) + if [[ $lastUserFlag -eq $userFlag && $lastTestsFlag -eq $testsFlag ]]; then + log "${MAGENTA}[Succsess] Last build flags match current build flags. Skipping configuration...${NC}" + doReconfigure=0 else - if [[ $testsFlag -eq 1 ]]; then - meson setup "$buildDir" --buildtype=debug - else - meson setup "$buildDir" --buildtype=debug -Dbuild_tests=false - fi + log "${YELLOW}[Info] Last build flags do not match current build flags. Reconfiguring...${NC}" + rm -rf $buildDir fi - log "${GREEN}[Success] Build directory configured successfully.${NC}" +else + log "${BLUE}[Info] Last build flags not found. Reconfiguring...${NC}" +fi + + +# --- Check if the build dir has been configured with the correct flags --- +if [[ $doReconfigure -eq 1 ]]; then + log "${BLUE}[Info] Configuring build directory...${NC}" + if [ -f "$buildDir/build.ninja" ]; then + log "${MAGENTA}[Succsess] Build directory already configured. Skipping...${NC}" + else + if [[ $userFlag -eq 1 ]]; then + meson setup "$buildDir" -Duser_mode=true --buildtype=release + else + if [[ $testsFlag -eq 0 ]]; 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] Caching last build flags...${NC}" + + # --- Cache the last build flags --- + if [[ $userFlag -eq 1 ]]; then + echo "userFlag=1" > $buildDir/.last_build_flags + else + echo "userFlag=0" > $buildDir/.last_build_flags + fi + if [[ $testsFlag -eq 1 ]]; then + echo "testsFlag=1" >> $buildDir/.last_build_flags + else + echo "testsFlag=0" >> $buildDir/.last_build_flags + fi + + log "${GREEN}[Success] Last build flags cached.${NC}" fi log "${BLUE}[Info] Building 4DSSE...${NC}" @@ -150,10 +209,10 @@ 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" + meson install -C "$buildDir" fi -if [[ $testsFlag -eq 1 ]]; then +if [[ $runTestsFlag -eq 1 ]]; then log "${BLUE}[Info] Running tests...${NC}" meson test -C "$buildDir" fi @@ -162,4 +221,7 @@ if [[ $userFlag -eq 1 ]]; then log "${GREEN}[Success] 4DSSE built and installed successfully.${NC}" else log "${GREEN}[Success] 4DSSE built successfully.${NC}" -fi \ No newline at end of file +fi + + +log "${GREEN}[Success] 4DSSE mk script complete.${NC}"