@@ -57,7 +57,9 @@ TESTS_BIN="${BUILD}/tests/bin"
57
57
58
58
UNITY_TAG=" v2.6.0"
59
59
60
- # INCLUDE="$(pwd)/include"
60
+ EXCLUDE=(" file.c" " config.c" " prompt.c" " exec.c" " error.c" " builtins.c" " escape.c" )
61
+
62
+ # LIB="$(pwd)/lib"
61
63
COLOR=true
62
64
63
65
CC=" clang"
74
76
75
77
CFLAGS=" -O3 -Wall -Wextra -I./include/"
76
78
77
- LINKER_FLAGS=" -Wall -Wextra "
79
+ LINKER_FLAGS=" "
78
80
79
81
if [[ ${OSTYPE} != " msys" ]]; then
80
82
LINKER_FLAGS+=" -fuse-ld=mold"
81
83
else
82
- CFLAGS+=" -I/usr/include"
84
+ CFLAGS+=" -I/usr/include -fsanitize=address "
83
85
LINKER_FLAGS+=" -lbsd -L/usr/lib"
84
86
fi
85
87
@@ -142,34 +144,40 @@ EOF
142
144
143
145
compile () {
144
146
local -a C_FILES
147
+ local -a C_FILES_RL
145
148
146
- local -a TRIMMED_C_FILES
147
- local -a TRIMMED_C_FILENAMES
149
+ local -a TRIMMED_FILES
150
+ local -a CFILE_DIFF
148
151
149
152
local RECOMPILE
150
- local TRIMMED_C_FILE
151
- local TRIMMED_C_FILENAME
153
+ local TRIMMED_FILE
154
+
155
+ if ! [[ ${# EXCLUDE[@]} -eq 0 ]]; then
156
+ echo -e " Housekeeping!!!"
157
+ clean " ${OUT} " " ${BIN} " " y"
158
+ fi
152
159
153
160
mapfile -t C_FILES < <( find " ${DIR} " -type f -name " *.c" )
161
+ for i in " ${! C_FILES[@]} " ; do C_FILES_RL[i]=" $( basename " ${C_FILES[i]} " ) " ; done
162
+
163
+ CFILE_DIFF=($( comm -23 <( printf " %s\n" " ${C_FILES_RL[@]} " | sort) <( printf " %s\n" " ${EXCLUDE[@]} " | sort) ) )
154
164
155
- for (( i = 0 ; i < ${# C_FILES[@]} ; i++ )) ; do
156
- TRIMMED_C_FILE=" ${C_FILES[${i}]% .* } "
157
- TRIMMED_C_FILENAME=" ${TRIMMED_C_FILE##*/ } "
158
- TRIMMED_C_FILES+=(" ${TRIMMED_C_FILE} " )
159
- TRIMMED_C_FILENAMES+=(" ${TRIMMED_C_FILENAME} " )
160
- echo -e " ${BLUE} >${CLEAR} Compiling: ${CYAN}${C_FILES[${i}]}${CLEAR} "
161
- if [[ -f " ${OUT} /${TRIMMED_C_FILENAME} .o" ]]; then
162
- echo -ne " ${YELLOW} !${CLEAR} ${CYAN}${TRIMMED_C_FILENAME} .o${CLEAR} seems to already exist, you wanna recompile it? [${GREEN} Y${CLEAR} /${RED} n${CLEAR} ]: "
165
+ for (( i = 0 ; i < ${# CFILE_DIFF[@]} ; i++ )) ; do
166
+ TRIMMED_FILE=" ${CFILE_DIFF[${i}]% .* } "
167
+ TRIMMED_FILES+=(" ${TRIMMED_FILE} " )
168
+ echo -e " ${BLUE} >${CLEAR} Compiling: ${CYAN}${TRIMMED_FILE} .c${CLEAR} "
169
+ if [[ -f " ${OUT} /${TRIMMED_FILE} .o" ]]; then
170
+ echo -ne " ${YELLOW} !${CLEAR} ${CYAN}${TRIMMED_FILE} .o${CLEAR} seems to already exist, you wanna recompile it? [${GREEN} Y${CLEAR} /${RED} n${CLEAR} ]: "
163
171
read -r RECOMPILE
164
172
if [[ ! ${RECOMPILE} =~ [Nn] ]]; then
165
- echo -e " Running: ${CC} ${CFLAGS} -c ${C_FILES[${i}]} -o ${OUT} /${TRIMMED_C_FILENAME } .o"
173
+ echo -e " Running: ${CC} ${CFLAGS} -c ${DIR} / ${TRIMMED_FILE} .c -o ${OUT} /${TRIMMED_FILE } .o"
166
174
# shellcheck disable=SC2086
167
- " ${CC} " ${CFLAGS} -c " ${C_FILES[${i}]} " -o " ${OUT} /${TRIMMED_C_FILENAME } .o"
175
+ " ${CC} " ${CFLAGS} -c " ${DIR} / ${TRIMMED_FILE} .c " -o " ${OUT} /${TRIMMED_FILE } .o"
168
176
fi
169
177
else
170
- echo -e " Running: ${CC} ${CFLAGS} -c ${C_FILES[${i}]} -o ${OUT} /${TRIMMED_C_FILENAME } .o"
178
+ echo -e " Running: ${CC} ${CFLAGS} -c ${DIR} / ${TRIMMED_FILE} .c -o ${OUT} /${TRIMMED_FILE } .o"
171
179
# shellcheck disable=SC2086
172
- " ${CC} " ${CFLAGS} -c " ${C_FILES[${i}]} " -o " ${OUT} /${TRIMMED_C_FILENAME } .o"
180
+ " ${CC} " ${CFLAGS} -c " ${DIR} / ${TRIMMED_FILE} .c " -o " ${OUT} /${TRIMMED_FILE } .o"
173
181
fi
174
182
done
175
183
@@ -178,8 +186,8 @@ compile() {
178
186
# shellcheck disable=SC2086
179
187
" ${CC} " ${CFLAGS} -c " ${SRC} /main.c" -o " ${OUT} /main.o"
180
188
181
- for i in " ${! TRIMMED_C_FILENAMES [@]} " ; do TRIMMED_C_FILENAMES [i]=" ${TRIMMED_C_FILENAMES [i]} .c" ; done
182
- echo -e " ${GREEN} ✓${CLEAR} Compiled ${CYAN}${TRIMMED_C_FILENAMES [*]}${CLEAR} & ${CYAN} main.c${CLEAR} successfully"
189
+ for i in " ${! TRIMMED_FILES [@]} " ; do TRIMMED_FILES [i]=" ${TRIMMED_FILES [i]} .c" ; done
190
+ echo -e " ${GREEN} ✓${CLEAR} Compiled ${CYAN}${TRIMMED_FILES [*]}${CLEAR} & ${CYAN} main.c${CLEAR} successfully"
183
191
}
184
192
185
193
# links all object files in out/ to an executable in /bin
@@ -207,7 +215,7 @@ link() {
207
215
pushd " ${OUT} " > /dev/null || handle_failure " Failed to pushd" # || echo "Failed to pushd" && exit 1
208
216
209
217
echo -e " ${BLUE} >${CLEAR} Linking: ${CYAN}${TRIMMED_FILES[*]}${CLEAR} "
210
-
218
+ for i in " ${ ! TRIMMED_FILES[@]} " ; do TRIMMED_FILES[i]= " ${OUT} / ${TRIMMED_FILES[i]} " ; done
211
219
if [[ -f " ${BIN} /${EXECUTABLE_NAME} " ]]; then
212
220
echo -ne " ${YELLOW} !${CLEAR} ${CYAN}${EXECUTABLE_NAME}${CLEAR} seems to already exist, you wanna relink it? [${GREEN} Y${CLEAR} /${RED} n${CLEAR} ]: "
213
221
read -r RELINK
@@ -348,7 +356,7 @@ unit_test() {
348
356
349
357
popd > /dev/null || handle_failure " Failed to popd" # || echo "Failed to popd" && exit 1
350
358
351
- # rm -fr "${TESTS_OUT}" "${TESTS_BIN}"
359
+ # rm -fr "${TESTS_OUT}" "${TESTS_BIN}"
352
360
}
353
361
354
362
# removes dangling object files that shouldn't be there, used to be required, not that much as of lately though.
@@ -386,8 +394,8 @@ clean() {
386
394
local LOCALBIN
387
395
local LOG
388
396
389
- LOCALOUT=${1}
390
- LOCALBIN=${2}
397
+ LOCALOUT=${1:? }
398
+ LOCALBIN=${2:? }
391
399
CONFIRMATION=${3}
392
400
LOG=${4: true}
393
401
@@ -401,10 +409,10 @@ clean() {
401
409
CLEAN=" y"
402
410
fi
403
411
if [[ ${CLEAN} =~ [Yy] ]]; then
404
- rm -fr " ${LOCALOUT:? } /* "
405
- rm -fr " ${LOCALBIN:? } /* "
412
+ rm -fr " ${LOCALOUT} " / *
413
+ rm -fr " ${LOCALBIN} " / *
406
414
if ${LOG} ; then
407
- echo -e " ${GREEN} ✓${CLEAR} Cleaned ${CYAN}${LOCALOUT}${CLEAR} & ${CYAN}${LOCALBIN}${CLEAR} successfully."
415
+ echo -e " ${GREEN} ✓${CLEAR} Cleaned ${CYAN}${LOCALOUT} /* ${CLEAR} & ${CYAN}${LOCALBIN} /* ${CLEAR} successfully."
408
416
fi
409
417
else
410
418
echo -e " ${GREEN} ✓${CLEAR} Cancelled."
0 commit comments