/c (b9a622397ba215256c724bdadc12e6b161cce6b8) (2477 bytes) (mode 100755) (type blob)
#!/bin/sh
###################################################################
# Wrapper around c compilers
# Makes compiling and writing c easier
# for people who write small programs (unfortunately not everyone).
# Mostly made for personal workflow.
# Inspired by the Go compiler.
###################################################################
if [ "$1" = "" ]
then
echo "$0 [command] (file|foldername)" | sed "s|/.*/||g"
echo
echo "commands:"
echo
echo " build compiles all c files in a directory"
echo " mk compiles a single file using tcc"
echo " run compiles and runs the c file pointed to"
echo " clean removes the binary named after the directory"
echo
exit
fi
whatdo="$1"
file="$2" # optional
CC="clang"
while getopts ":c:" c; do
case "$c" in
c) CC="$OPTARG"; whatdo="$3"; file="$4"
;;
esac
done
# add all the link options you can think of.
translate="s|math.h|-lm|; s|xcb/xcb.h|-lxcb|; s|xcb/xcb_util.h|-lxcb-util|;"
stdgone="s/assert.h|ctype.h|dirent.h|errno.h|fcntl.h|inttypes.h|limits.h|locale.h|setjmp.h|signal.h|stdarg.h|stdio.h|string.h|stdlib.h|time.h|unistd.h|sys\/types.h|sys\/wait.h|iostream|vector|string|long|iomanip//g;"
cfiletext="^//cfiles: " # uses grep regex
flags() {
incflangs=""
cflags=""
cfiles="$(grep -h "$cfiletext" *.c | cut -b 11-)"
include="$(grep -h "^#include <" *.c | uniq | sed "s/#include <//g;s/>//g;$translate;$stdgone")"
echo $cfiles $cflags $include $incflags
}
singleflags() {
incflangs=""
cflags=""
cfiles="$(grep "$cfiletext" "$file" | cut -c 11-)"
include="$(grep -h "^#include <" $file $cfiles | uniq | sed -E "s/#include <//g;s/>//g;$translate;$stdgone")"
echo $cfiles $cflags $include $incflags
}
build() {
[ "$file" != "" ] && [ -d "$file" ] && cd "$file"
arecfiles="$(ls -l | grep "\.c")"
[ "$arecfiles" = "" ] && echo "not a buildable directory" && exit
binname="$(pwd | sed "s|/.*/||g")" # The name of the working directory
allflags="$(flags)"
$CC $allflags -o "$binname" *.c
}
mak() {
[ ! -e "$file" ] || [ -d "$file" ] && echo "give one existing file name" && exit
filebase="${file%.*}"
allflags="$(singleflags)"
$CC -o "$filebase" $allflags "$file"
}
clean() {
[ "$file" != "" ] && [ -d "$file" ] && cd "$file"
binname="$(pwd | sed "s|/.*/||g")"
[ -f "$binname" ] && rm "$binname"
}
case "$whatdo" in
"build") build ;;
"debug") debugbuild ;;
"mk") mak ;;
"run") mak && "$(readlink -f $filebase)" ;;
"drun") debugonone ;;
"clean") clean ;;
esac
Mode |
Type |
Size |
Ref |
File |
100644 |
blob |
35149 |
f288702d2fa16d3cdf0035b15a9fcbc552cd88e7 |
COPYING |
100755 |
blob |
628 |
aea31675501c3d82c411eb99ff64d69446a550a0 |
INSTALL |
100644 |
blob |
2429 |
d98741b40437761e17e1fa301e70952d8ff98387 |
README |
100755 |
blob |
2477 |
b9a622397ba215256c724bdadc12e6b161cce6b8 |
c |
100644 |
blob |
4161 |
d3c21fdd338bf33819184988562e3961f7883484 |
clp.c |
100755 |
blob |
1743 |
15d2d1cd7b083c7d4120e7902d9cba9616afe151 |
comp |
100644 |
blob |
807 |
59c452396f94f50dbe567bc19530fd386a52b652 |
echo.c |
100755 |
blob |
695 |
a6ca102f88d4643c962a52dc416f1e7a159962b9 |
exho |
100755 |
blob |
783 |
5a9e33def49890e1fbbb5af04d35a39e078f17dd |
ins |
100644 |
blob |
979 |
89b230aabe515c66e967be21a4d9dff3ac5248da |
nl.l |
100644 |
blob |
1920 |
97b9e917313c878d8f4899893143c320b779de3f |
sc.c |
100644 |
blob |
1127 |
c105483de17bc09fe24e3b0fecfbce024fa380b0 |
spng.c |
100644 |
blob |
1178 |
1433a0105fd7a07e7ede04214e26552241f36b64 |
tee.c |
100644 |
blob |
2084 |
7c05702000203c8061b07e7238dc0b5049b91ca6 |
wc.c |
100644 |
blob |
796 |
7359238b347bc985adc97e744cde0f8aa2ee6fbc |
yes.c |
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"
Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/spicylord/clutils
Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/spicylord/clutils
Clone this repository using git:
git clone git://git.rocketgit.com/user/spicylord/clutils
You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a
merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main