--- Makefile +++ Makefile @@ -1,19 +1,47 @@ -ALL : markdown - -PROGRAM=markdown +PROGRAM=peg-markdown +LNAME=peg-markdown +LIBRARY=lib$(LNAME).so +VER_MAJOR=0 +VER_MINOR=4.12 +SONAME=$(LIBRARY).$(VER_MAJOR) +REALNAME=$(SONAME).$(VER_MINOR) +CC ?= gcc CFLAGS ?= -Wall -O3 -ansi OBJS=markdown_parser.o markdown_output.o markdown_lib.o PEGDIR=peg-0.1.4 -LEG=$(PEGDIR)/leg +LEG := $(shell ./check-leg) + +PREFIX ?= /usr/local +BINDIR ?= $(PREFIX)/bin +LIBDIR ?= $(PREFIX)/lib +INCDIR ?= $(PREFIX)/inc + +INSTALL ?= install +INSTALL_PROG ?= $(INSTALL) -m755 +INSTALL_H ?= $(INSTALL) -m644 + +ALL : $(PROGRAM) build-doc $(LEG): - CC=gcc make -C $(PEGDIR) + CC=$(CC) make -C $(PEGDIR) %.o : %.c markdown_peg.h - $(CC) -c `pkg-config --cflags glib-2.0` $(CFLAGS) -o $@ $< + $(CC) -c `pkg-config --cflags glib-2.0` $(CFLAGS) -fPIC -o $@ $< -$(PROGRAM) : markdown.c $(OBJS) - $(CC) `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` $(CFLAGS) -o $@ $(OBJS) $< +$(PROGRAM) : markdown.c $(LIBRARY) + $(CC) `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` $(CFLAGS) -o $@ $< \ + -L. -l $(LNAME) + +$(LIBRARY) : $(SONAME) + ln -s $(SONAME) $(LIBRARY) + +$(SONAME) : $(REALNAME) + ln -s $(REALNAME) $(SONAME) + +$(REALNAME) : $(OBJS) + $(CC) -shared -Wl,-soname,$(SONAME) \ + -o $(REALNAME) $(OBJS) \ + `pkg-config --cflags glib-2.0` `pkg-config --libs glib-2.0` markdown_parser.c : markdown_parser.leg $(LEG) markdown_peg.h parsing_functions.c utility_functions.c $(LEG) -o $@ $< @@ -21,7 +49,8 @@ .PHONY: clean test clean: - rm -f markdown_parser.c $(PROGRAM) $(OBJS); \ + rm -f markdown_parser.c $(PROGRAM) $(OBJS) \ + $(LIBRARY) $(SONAME) $(REALNAME); \ make -C $(PEGDIR) clean distclean: clean @@ -29,8 +58,13 @@ test: $(PROGRAM) cd MarkdownTest_1.0.3; \ + export LD_LIBRARY_PATH=..; \ ./MarkdownTest.pl --script=../$(PROGRAM) --tidy leak-check: $(PROGRAM) - valgrind --leak-check=full ./markdown README + export LD_LIBRARY_PATH=.; \ + valgrind --leak-check=full ./$(PROGRAM) README +build-doc: $(PROGRAM) + export LD_LIBRARY_PATH=.; \ + ./$(PROGRAM) README > README.html