|
| 1 | +#!/bin/sh |
| 2 | + |
| 3 | +OS_NAME="$(cmake -P ./PrintOS.cmake 2>&1)" |
| 4 | +PROJECT_NAME="SimpleSearchEngine" |
| 5 | +SECOND_TARGET="SimpleSearchEngineIndexer" |
| 6 | +CMAKE_BUILD_DIR="$HOME/CMakeBuilds" |
| 7 | +CMAKE_PROJECT_DIR="$CMAKE_BUILD_DIR/$PROJECT_NAME" |
| 8 | + |
| 9 | +if [ "x$SAVE_PREV" = "x" ]; then |
| 10 | + if [ -e "$CMAKE_PROJECT_DIR" ]; then |
| 11 | + rm -rf "$CMAKE_PROJECT_DIR" |
| 12 | + fi |
| 13 | +fi |
| 14 | + |
| 15 | +EXEC_EXTENSION=".exe" |
| 16 | +EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$PROJECT_NAME$EXEC_EXTENSION" |
| 17 | +SECOND_EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$SECOND_TARGET$EXEC_EXTENSION" |
| 18 | + |
| 19 | +if [ "$OS_NAME" = "Linux" ]; then |
| 20 | + EXEC_EXTENSION=".run" |
| 21 | + EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$PROJECT_NAME" |
| 22 | + SECOND_EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$SECOND_TARGET" |
| 23 | +elif [ "$OS_NAME" = "MacOS" ]; then |
| 24 | + EXEC_EXTENSION=".run" |
| 25 | + EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$PROJECT_NAME" |
| 26 | + SECOND_EXEC_PATH="$CMAKE_PROJECT_DIR/bin/$SECOND_TARGET" |
| 27 | +fi |
| 28 | + |
| 29 | +EXEC_LINK_PATH="$HOME/$PROJECT_NAME$EXEC_EXTENSION" |
| 30 | +SECOND_EXEC_LINK_PATH="$HOME/$SECOND_TARGET$EXEC_EXTENSION" |
| 31 | + |
| 32 | +if (cmake -S . -B "$CMAKE_PROJECT_DIR" -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" && cmake --build "$CMAKE_PROJECT_DIR" --target "$PROJECT_NAME" "$SECOND_TARGET"); then |
| 33 | + rm -f "$EXEC_LINK_PATH" |
| 34 | + rm -f "$SECOND_EXEC_LINK_PATH" |
| 35 | + ln -s "$EXEC_PATH" "$EXEC_LINK_PATH" |
| 36 | + ln -s "$SECOND_EXEC_PATH" "$SECOND_EXEC_LINK_PATH" |
| 37 | + echo '' |
| 38 | + |
| 39 | + if ("$EXEC_LINK_PATH" -h >/dev/null 2>/dev/null && "$SECOND_EXEC_LINK_PATH" -h >/dev/null 2>/dev/null); then |
| 40 | + echo "Congratulations! $PROJECT_NAME was compiled successfully." |
| 41 | + echo '' |
| 42 | + "$EXEC_LINK_PATH" -h |
| 43 | + echo '' |
| 44 | + "$SECOND_EXEC_LINK_PATH" -h |
| 45 | + echo '' |
| 46 | + |
| 47 | + if [ "$OS_NAME" = "Linux" ]; then |
| 48 | + printf 'Do you want to add this utility to /usr/bin (y/n)? ' && read -r CHOISE |
| 49 | + COMMON_LINK_PATH="/usr/bin/${PROJECT_NAME:?}" |
| 50 | + COMMON_SECOND_LINK_PATH="/usr/bin/${SECOND_TARGET:?}" |
| 51 | + COMMON_PROJECT_DIR="/opt/${PROJECT_NAME:?}" |
| 52 | + COMMON_EXEC_PATH="$COMMON_PROJECT_DIR/bin/$PROJECT_NAME" |
| 53 | + COMMON_SECOND_EXEC_PATH="$COMMON_PROJECT_DIR/bin/$SECOND_TARGET" |
| 54 | + |
| 55 | + if [ "$CHOISE" = "y" ]; then |
| 56 | + sudo -S rm -f "$COMMON_LINK_PATH" |
| 57 | + sudo rm -f "$COMMON_SECOND_LINK_PATH" |
| 58 | + |
| 59 | + if (sudo ln -s "$EXEC_PATH" "$COMMON_LINK_PATH"); then |
| 60 | + if [ -e "$COMMON_PROJECT_DIR" ]; then |
| 61 | + sudo rm -rf "$COMMON_PROJECT_DIR" |
| 62 | + fi |
| 63 | + |
| 64 | + sudo rm -f "$COMMON_LINK_PATH" |
| 65 | + sudo cp -r "$CMAKE_PROJECT_DIR" "$COMMON_PROJECT_DIR" |
| 66 | + sudo ln -s "$COMMON_EXEC_PATH" "$COMMON_LINK_PATH" |
| 67 | + sudo ln -s "$COMMON_SECOND_EXEC_PATH" "$COMMON_SECOND_LINK_PATH" |
| 68 | + echo "Accepted, run utility with $PROJECT_NAME and $SECOND_TARGET" |
| 69 | + else |
| 70 | + echo 'Please try again later.' |
| 71 | + echo "Declined, run utility with $EXEC_LINK_PATH and $SECOND_EXEC_LINK_PATH" |
| 72 | + fi |
| 73 | + else |
| 74 | + echo "Declined, run utility with $EXEC_LINK_PATH and $SECOND_EXEC_LINK_PATH" |
| 75 | + fi |
| 76 | + else |
| 77 | + echo "Run utility with $EXEC_LINK_PATH and $SECOND_EXEC_LINK_PATH" |
| 78 | + fi |
| 79 | + exit 0 |
| 80 | + elif (cd "$CMAKE_PROJECT_DIR" && "./$PROJECT_NAME$EXEC_EXTENSION" -h >/dev/null 2>/dev/null); then |
| 81 | + rm -f "$EXEC_LINK_PATH" |
| 82 | + rm -f "$SECOND_EXEC_LINK_PATH" |
| 83 | + rm -rf "$HOME/${PROJECT_NAME:?}" |
| 84 | + echo "Congratulations! $PROJECT_NAME was compiled successfully." |
| 85 | + echo "Because of Windows-specific limitations, it is not possible to create a link to it." |
| 86 | + echo "You can run it from $HOME/$PROJECT_NAME as .\\$PROJECT_NAME$EXEC_EXTENSION and .\\$SECOND_TARGET$EXEC_EXTENSION" |
| 87 | + echo "Or you can run CMD.EXE with administrative privileges and type: " |
| 88 | + echo 'mklink "%userprofile%\SimpleSearchEngine.exe" "%userprofile%\SimpleSearchEngine\SimpleSearchEngine.exe"' |
| 89 | + echo 'mklink "%userprofile%\SimpleSearchEngineIndexer.exe" "%userprofile%\SimpleSearchEngine\SimpleSearchEngineIndexer.exe"' |
| 90 | + echo '' |
| 91 | + mkdir "$HOME/$PROJECT_NAME" |
| 92 | + cp "$CMAKE_PROJECT_DIR/$PROJECT_NAME$EXEC_EXTENSION" "$HOME/$PROJECT_NAME/$PROJECT_NAME$EXEC_EXTENSION" |
| 93 | + cp "$CMAKE_PROJECT_DIR/$SECOND_TARGET$EXEC_EXTENSION" "$HOME/$PROJECT_NAME/$SECOND_TARGET$EXEC_EXTENSION" |
| 94 | + cd "$HOME/$PROJECT_NAME" && "./$PROJECT_NAME$EXEC_EXTENSION" -h && "./$SECOND_TARGET$EXEC_EXTENSION" -h |
| 95 | + exit 0 |
| 96 | + else |
| 97 | + echo 'Oops! Could not execute the program.' |
| 98 | + exit 1 |
| 99 | + fi |
| 100 | +else |
| 101 | + echo 'Error occurred during running CMake. Make sure that it is installed and configured properly.' |
| 102 | + exit 1 |
| 103 | +fi |
0 commit comments