debian-dots

dotfiles (does the obvious)
git clone [email protected]:dracuxan/debian-dots.git
Log | Files | Refs | README | LICENSE

run (4558B)


      1 #!/bin/bash
      2 FILE_PATH=$1
      3 shift     # Remove the file path from the list of arguments
      4 ARGS="$@" # Capture any additional arguments
      5 
      6 BUILD_ONLY=false
      7 TEST_PROJECT=false
      8 REPL=false
      9 MIX=false
     10 C_FLAGS=""
     11 
     12 for arg in "$@"; do
     13     case $arg in
     14     --build | -b)
     15         BUILD_ONLY=true
     16         shift
     17         ;;
     18     --test | -t)
     19         TEST_PROJECT=true
     20         shift
     21         ;;
     22     --repl | -r)
     23         REPL=true
     24         shift
     25         ;;
     26     --mix | -m)
     27         MIX=true
     28         shift
     29         ;;
     30     --cflags)
     31         shift
     32         C_FLAGS="$1"
     33         shift
     34         ;;
     35     esac
     36 done
     37 
     38 # Ensure a file path is provided
     39 if [[ -z "$FILE_PATH" ]]; then
     40     echo "Usage: $0 <source_file> [program arguments if any] [--build-only(optional)]"
     41     exit 1
     42 fi
     43 
     44 if [[ -f "build.zig" ]]; then
     45     IS_ZIG_PROJECT=true
     46 else
     47     IS_ZIG_PROJECT=false
     48 fi
     49 
     50 EXT="${FILE_PATH##*.}"
     51 FILE_NAME=$(basename "$FILE_PATH" ."$EXT")
     52 
     53 case "$EXT" in
     54 c)
     55     echo "Compiling ${FILE_NAME}.c..."
     56     # Ensure 'bin' directory exists for compiled binaries
     57     mkdir -p "bin"
     58     gcc -Wall -Wextra -lm $C_FLAGS "$FILE_PATH" -o "bin/${FILE_NAME}"
     59     if [[ $? -ne 0 ]]; then
     60         echo "Compilation failed."
     61         exit 1
     62     fi
     63     if $BUILD_ONLY; then
     64         echo "done"
     65         exit 0
     66     fi
     67     echo ""
     68     echo "Running bin/${FILE_NAME}..."
     69     echo ""
     70     ./bin/${FILE_NAME} $ARGS
     71     ;;
     72 go)
     73     if $TEST_PROJECT; then
     74         echo "Running tests..."
     75         echo ""
     76         go test $FILE_PATH
     77     else
     78         echo "Compiling ${FILE_NAME}.go..."
     79         echo ""
     80         # Ensure 'bin' directory exists for compiled binaries
     81         mkdir -p "bin"
     82         go build -o "bin/${FILE_NAME}" "$FILE_PATH"
     83         if [[ $? -ne 0 ]]; then
     84             echo "Compilation failed."
     85             exit 1
     86         fi
     87         if $BUILD_ONLY; then
     88             echo "Binary compiled at bin/${FILE_NAME}"
     89         else
     90             echo "Running bin/${FILE_NAME}..."
     91             ./bin/${FILE_NAME} $ARGS
     92         fi
     93     fi
     94     ;;
     95 rs)
     96     echo "Running ${FILE_NAME}.rs with rustc..."
     97     echo ""
     98     mkdir -p "target"
     99     rustc "$FILE_PATH" -o ./target/$FILE_NAME
    100     ./target/${FILE_NAME} $ARGS
    101     ;;
    102 exs | ex)
    103     if $TEST_PROJECT; then
    104         mix test
    105     elif $MIX; then
    106         echo "running script with mix..."
    107         echo ""
    108         mix run ${FILE_PATH}
    109     elif $REPL; then
    110         if [[ "$EXT" == "exs" ]] && [[ "$FILE_NAME" != "mix" ]]; then
    111             echo "starting iex repl..."
    112             echo ""
    113             iex ${FILE_PATH}
    114         else
    115             echo "running app with iex..."
    116             echo ""
    117             iex -S mix
    118         fi
    119     else
    120         if [[ "$EXT" == "exs" ]] && [[ "$FILE_NAME" != "mix" ]]; then
    121             echo "Running ${FILE_NAME}.exs with elixir..."
    122             echo ""
    123             elixir "$FILE_PATH" $ARGS
    124         else
    125             if $BUILD_ONLY; then
    126                 echo "Compiling mix project..."
    127                 echo ""
    128                 mix escript.build
    129 
    130             else
    131                 echo "Running mix project..."
    132                 echo ""
    133                 mix run
    134             fi
    135         fi
    136 
    137     fi
    138     ;;
    139 zig)
    140     if $IS_ZIG_PROJECT; then
    141         # Project mode
    142         if $TEST_PROJECT; then
    143             echo "Running Zig project tests..."
    144             echo ""
    145             zig build test
    146 
    147         elif $BUILD_ONLY; then
    148             echo "Building Zig project..."
    149             echo ""
    150             zig build
    151 
    152         else
    153             echo "Running Zig project..."
    154             echo ""
    155             zig build run -- $ARGS
    156         fi
    157 
    158     else
    159         # Single file mode
    160         if $TEST_PROJECT; then
    161             echo "Running tests for ${FILE_NAME}.zig..."
    162             echo ""
    163             zig test "$FILE_PATH"
    164 
    165         elif $BUILD_ONLY; then
    166             echo "Building ${FILE_NAME}.zig..."
    167             echo ""
    168             mkdir -p target
    169             zig build-exe "$FILE_PATH" -o "target/${FILE_NAME}"
    170 
    171         else
    172             echo "Running ${FILE_NAME}.zig..."
    173             echo ""
    174             zig run "$FILE_PATH" -- $ARGS
    175         fi
    176     fi
    177     ;;
    178 ts | js)
    179     if [[ "$EXT" == "js" ]]; then
    180         echo "Running ${FILE_NAME}.js..."
    181     else
    182 
    183         echo "Running ${FILE_NAME}.ts..."
    184     fi
    185     echo ""
    186     node $FILE_PATH
    187     ;;
    188 py)
    189     echo "Running ${FILE_NAME}.py...."
    190     echo ""
    191     python3 $FILE_PATH
    192     ;;
    193 sh)
    194     echo "Running ${FILE_NAME}.sh script...."
    195     echo ""
    196     bash $FILE_PATH
    197     ;;
    198 html)
    199     echo "starting http server..."
    200     echo ""
    201     http-server --port 5173
    202     ;;
    203 *)
    204     echo "Unsupported file type: .$EXT"
    205     exit 1
    206     ;;
    207 esac
    208 
    209 exit 0