| # |
| # Copyright 2018 Gavin D. Howard |
| # |
| # Permission to use, copy, modify, and/or distribute this software for any |
| # purpose with or without fee is hereby granted. |
| # |
| # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH |
| # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY |
| # AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, |
| # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM |
| # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR |
| # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| # PERFORMANCE OF THIS SOFTWARE. |
| # |
| |
| BC_SRC = $(sort $(wildcard src/*.c)) |
| BC_OBJ = $(BC_SRC:.c=.o) |
| |
| GEN_DIR = gen |
| GEN_EXEC = strgen |
| |
| BC_LIB = $(GEN_DIR)/lib.bc |
| BC_LIB_C = $(GEN_DIR)/lib.c |
| BC_LIB_O = $(GEN_DIR)/lib.o |
| |
| BC_HELP = $(GEN_DIR)/help.txt |
| BC_HELP_C = $(GEN_DIR)/help.c |
| BC_HELP_O = $(GEN_DIR)/help.o |
| |
| BC_EXEC = bc |
| |
| PREFIX ?= /usr/local |
| |
| INSTALL = ./install.sh |
| |
| -include config.mak |
| |
| CFLAGS += -Wall -Wextra -pedantic -std=c99 -funsigned-char |
| CPPFLAGS += -I./include/ -D_POSIX_C_SOURCE=200809L |
| |
| LDLIBS += -lm |
| |
| HOSTCC ?= $(CC) |
| |
| all: $(BC_EXEC) |
| |
| help: |
| @echo "available targets:" |
| @echo "" |
| @echo " all build bc (uses config.mak if there is one)" |
| @echo " clean remove all build files" |
| @echo " install install to $(PREFIX)/bin" |
| @echo " uninstall uninstall from $(PREFIX)/bin" |
| @echo " test runs the test suite" |
| @echo " timeconst runs the test on the Linux timeconst.bc script" |
| @echo " the timeconst.bc script must be in the parent directory" |
| @echo "" |
| @echo "useful environment variables:" |
| @echo "" |
| @echo " CC C compiler" |
| @echo " HOSTCC Host C compiler" |
| @echo " CFLAGS C compiler flags" |
| @echo " CPPFLAGS C preprocessor flags" |
| @echo " LDLIBS Libraries to link to" |
| @echo " PREFIX the prefix to install to" |
| @echo " if PREFIX is \"/usr\", $(BC_EXEC) will be installed to \"/usr/bin\"" |
| @echo " GEN_EMU Emulator to run $(GEN_EXEC) under (leave empty if not necessary)" |
| |
| $(GEN_EXEC): |
| $(HOSTCC) -o $(GEN_EXEC) $(GEN_DIR)/$(GEN_EXEC).c |
| |
| $(BC_LIB_C): $(GEN_EXEC) |
| $(GEN_EMU) ./$(GEN_EXEC) $(BC_LIB) $(BC_LIB_C) bc_lib bc_lib_name |
| |
| $(BC_HELP_C): $(GEN_EXEC) |
| $(GEN_EMU) ./$(GEN_EXEC) $(BC_HELP) $(BC_HELP_C) bc_help |
| |
| $(BC_EXEC): $(BC_OBJ) $(BC_LIB_O) $(BC_HELP_O) |
| $(CC) $(CFLAGS) -o $(BC_EXEC) $(BC_OBJ) $(BC_LIB_O) $(BC_HELP_O) $(LDLIBS) $(LDFLAGS) |
| |
| test: |
| tests/all.sh |
| |
| valgrind: |
| tests/all.sh valgrind --leak-check=full --show-leak-kinds=all ./bc |
| |
| timeconst: |
| tests/timeconst.sh |
| |
| clean: |
| $(RM) $(BC_OBJ) |
| $(RM) $(BC_EXEC) |
| $(RM) $(GEN_EXEC) |
| $(RM) $(BC_LIB_C) |
| $(RM) $(BC_LIB_O) |
| $(RM) $(BC_HELP_C) |
| $(RM) $(BC_HELP_O) |
| $(RM) .log_test.txt .log_bc.txt |
| $(RM) .math.txt .results.txt .ops.txt |
| |
| clean_tests: clean |
| $(RM) tests/parse.txt tests/parse_results.txt |
| $(RM) tests/print.txt tests/print_results.txt |
| $(RM) tests/bessel.txt tests/bessel_results.txt |
| |
| install: $(BC_EXEC) |
| $(INSTALL) -Dm 755 $(BC_EXEC) $(DESTDIR)$(PREFIX)/bin/$(BC_EXEC) |
| |
| uninstall: |
| rm -rf $(DESTDIR)$(PREFIX)/bin/$(BC_EXEC) |
| |
| .PHONY: all help clean clean_tests install uninstall test |