*
* Licensed under the GNU Public License version 3 only, see LICENSE.
*
- * Using COMPILECMD and including the # STOP for bake & shake support
- * @COMPILECMD pwd; cc $@ -o $* -std=gnu89 -O2 -Wall -Wextra -Wpedantic -pipe $CFLAGS # @STOP
- * @EXEC pwd; cc $@ -o $* -std=gnu89 -O2 -Wall -Wextra -Wpedantic -pipe $CFLAGS # @STOP
+ * For Bake
+ * @EXEC cc $@ -o $* -std=gnu89 -O2 -Wall -Wextra -Wpedantic -pipe $CFLAGS @STOP
+ *
+ * For Shake
+ * @COMPILECMD cc $@ -o $* -std=gnu89 -O2 -Wall -Wextra -Wpedantic -pipe $CFLAGS
*/
#include <assert.h>
/* Require space after COMPILECMD/EXEC and before STOP (no space required around newline) */
#define REQUIRE_SPACE
/* May be be left undefined, comes second */
-#define OTHER_START "@EXEC"
+/* #define OTHER_START "@COMPILECMD" */
-#define START "@COMPILECMD"
+#define START "@EXEC"
#define STOP "@STOP"
#define HELP \
"target-file [arguments ...]\n" \
return buf;
}
+/* Strips all prefixing and leading whitespace.
+ * Except if the last character beforehand is a newline. */
static size_t
strip(char * buf) {
size_t i = strlen(buf);
GREEN='\033[32m'
BOLD='\033[1m'
NORMAL='\033[0m'
-
-MARK="@COMPILECMD "
-MARKSTR="${BLUE}@COMPILECMD${NORMAL}"
+
+MARKNAME="@COMPILECMD"
+MARK="${MARKNAME} "
+MARKSTR="${BLUE}${MARKNAME}${NORMAL}"
enable -n echo
IFSTR="${GREEN}<input_file>${NORMAL}"
echo -e "${BOLD}Usage: $0 <input_file>${NORMAL}" >&2
echo -e "\t$0 runs the value of ${MARKSTR}." >&2
- echo -e "\tThe point of this script is ease to compialation of singe source file (toy) programs." >&2
+ echo -e "\tThe point of this script is ease to compialation of single source file (toy) programs." >&2
echo -e "\tThe value of ${MARKSTR} is read from ${IFSTR} in is whatever comes after '${MARK}' until the end of the line." >&2
echo -e "\tInside the value of ${MARKSTR} all mentions of special placeholders are replaced:" >&2
echo -e "\t\t${BLUE}\$@${NORMAL} - ${IFSTR}"
echo -e "\t\t${BLUE}\$*${NORMAL} - ${IFSTR} with the last extension cut off"
+ echo -e "\t\t${BLUE}\$+${NORMAL} - All remaining arguments"
}
-
-
-
-if [[ $# -ne 1 ]]; then
+
+if [[ $# -lt 1 ]]; then
usage
exit 1
fi
usage
exit 0
fi
-
-
-
+
input_file=$1
+shift 1
if [[ ! -f $input_file ]]; then
echo -e "Input file '$input_file' does not exist." >&2
exit 1
fi
-
+
line=$(grep "$MARK" "$input_file" | head -1)
line=${line//\$@/$input_file}
line=${line//\$\*/${input_file%.*}}
-
+line=${line//\$+/$@}
+
if [[ -n $line ]]; then
- command="${line#*@COMPILECMD }"
-
- echo "$command"
+ command="${line#*${MARK}}"
+ echo "Exec: $command"
+ echo "Output:"
eval "$command"
else
echo -e "${MARKSTR} is not defined." >&2