# Makefile for building Parsee # ================================ # TODO: Consider making something akin to a configure script that checks # for dependencies, or maybe even use *autoconf* (the devil!) # # TODO: Either get rid of the GNU extensions, or use a script/program # to build Parsee on a POSIXly environment. I'd dig parsee-buildout, tbf. # =========================== Parsee Flags ============================= include build.conf REPOSITORY=$(shell git remote get-url origin) # =========================== Compilation Flags ============================ CYTO_INC ?=/usr/local/include/ # Where Cytoplasm's include path is # located. CYTO_LIB ?=/usr/local/lib # Where's Cytoplasm's library is # located. PREFIX ?=/usr/local SOURCE=src OBJECT=build AYAS=ayaya ETC=etc INCLUDES=src/include CC ?=cc CFLAGS=-I$(SOURCE) -I$(INCLUDES) -I$(CYTO_INC) -DNAME="\"$(NAME)\"" -DVERSION="\"$(VERSION)\"" -DREPOSITORY=\"$(REPOSITORY)\" -DCODE=\"$(CODE)\" -O3 -g -Wall -Werror LDFLAGS=-L $(CYTO_LIB) -lCytoplasm -O3 -g AFLAGS=-C "$(ETC)/ayadoc/style.css" -p "$(NAME)" # ============================ Compilation ================================= SRC_FILES:=$(shell find $(SOURCE) -name '*.c') $(shell find $(ETC)/media -name '*.png') OBJ_FILES:=${subst $(ETC)/media/,$(OBJECT)/,${subst $(SOURCE)/,$(OBJECT)/,$(patsubst %.png, %.o, $(patsubst %.c, %.o, $(SRC_FILES)))}} CPP_FILES:=$(shell find $(INCLUDES) -name '*.h') AYA_FILES:=${subst $(INCLUDES)/,$(AYAS)/,$(patsubst %.h, %.html, $(CPP_FILES))} all: utils binary binary: $(OBJ_FILES) $(CC) $(LDFLAGS) $(OBJ_FILES) -o $(BINARY) tags: $(SRC_FILES) @ctags --recurse $(SOURCE)/ clean: rm -rf $(OBJECT) $(BINARY) $(AYAS) $(OBJECT)/%.o: $(ETC)/media/%.png @mkdir -p $(shell dirname "$@") @echo "const char media_$(shell basename $< .png)[] =" > $@.c @base64 $< | \ sed -e 's/^\(.*\)$$/ "\1"/' | \ sed -e '$$ s/^\(.*\)$$/\1;/' >> $@.c $(CC) -c $(CFLAGS) $@.c -o $@ $(OBJECT)/%.o: $(SOURCE)/%.c @mkdir -p $(shell dirname "$@") $(CC) -c $(CFLAGS) $< -o $@ utils: (cd tools && make) ayadoc: utils $(AYA_FILES) $(AYAS)/%.html: $(INCLUDES)/%.h @mkdir -p $(shell dirname "$@") tools/out/aya $(AFLAGS) -i $< -o $@ # Installs everything. install: binary utils ayadoc install_setup install_parsee install_tools install_aya install_man @echo Installed $(NAME) to $(PREFIX)! install_setup: install -dm755 "$(PREFIX)/bin" install -dm755 "$(PREFIX)/share/doc" install -dm755 "$(PREFIX)/man" install_parsee: install -Dm755 "$(BINARY)" "$(PREFIX)/bin/$(BINARY)" TOOLS:=$(shell find 'tools/out' -name '*') ITOOL:=${subst tools/out/,$(PREFIX)/bin/,$(patsubst tools/out/%, tools/out/$(BINARY)-%, $(TOOLS))} install_tools: $(ITOOL) $(PREFIX)/bin/$(BINARY)-%: tools/out/% install -Dm755 "$<" "$@" IHTML:=${subst $(AYAS)/,$(PREFIX)/share/doc/$(BINARY)/,$(AYA_FILES)} install_aya: $(IHTML) $(PREFIX)/share/doc/$(BINARY)/%: $(AYAS)/% install -Dm644 "$<" "$@" MPAGE:=$(shell find 'etc/man' -name '*.*') PPAGE:=${subst etc/man/,$(PREFIX)/man/,$(MPAGE)} install_man: $(PPAGE) $(PREFIX)/man/%: etc/man/% install -Dm644 "$<" "$@"