1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
all: cfdg
#
# Dirs
#
OBJ_DIR = objs
COMMON_DIR = src-common
UNIX_DIR = src-unix
DERIVED_DIR = $(OBJ_DIR)
AGG_DIR = src-agg
SRC_DIRS = $(COMMON_DIR) $(UNIX_DIR) $(DERIVED_DIR) $(AGG_DIR)/src
vpath %.cpp $(SRC_DIRS)
vpath %.c $(SRC_DIRS)
INC_DIRS = $(COMMON_DIR) $(UNIX_DIR) $(DERIVED_DIR) $(AGG_DIR)/include $(COMMON_DIR)/agg-extras
#
# Sources and Objects
#
COMMON_SRCS = cfdg.cpp Rand48.cpp makeCFfilename.cpp \
cfdgimpl.cpp renderimpl.cpp builder.cpp shape.cpp \
yglue.cpp variation.cpp countable.cpp tempfile.cpp \
aggCanvas.cpp HSBColor.cpp SVGCanvas.cpp \
primShape.cpp bounds.cpp shape.cpp shapeSTL.cpp tiledCanvas.cpp
UNIX_SRCS = pngCanvas.cpp posixSystem.cpp main.cpp posixTimer.cpp \
posixVersion.cpp
DERIVED_SRCS = lex.yy.c y.tab.c
AGG_SRCS = agg_trans_affine.cpp agg_curves.cpp agg_vcgen_contour.cpp \
agg_vcgen_stroke.cpp agg_bezier_arc.cpp
SRCS = $(COMMON_SRCS) $(UNIX_SRCS) $(DERIVED_SRCS) $(AGG_SRCS)
OBJS = $(patsubst %.c,$(OBJ_DIR)/%.o, \
$(patsubst %.cpp,$(OBJ_DIR)/%.o,$(SRCS)))
DEPS = $(patsubst %.o,%.d,$(OBJS))
deps: $(OBJ_DIR) $(DEPS)
include $(DEPS)
$(OBJS): $(OBJ_DIR)/Sentry
#
# Executable
#
# Under Mac OS X replace $(LINK.o) with g++.
# Under Cygwin replace strip $@ with strip $@.exe
cfdg: $(OBJS)
$(LINK.o) $^ -L/usr/local/lib -lstdc++ -lpng -lz -fexceptions -o $@
strip $@
#
# Derived
#
$(DERIVED_DIR)/lex.yy.c: $(COMMON_DIR)/cfdg.l
flex -t $^ > $@
$(DERIVED_DIR)/y.tab.h: $(DERIVED_DIR)/y.tab.c
$(DERIVED_DIR)/y.tab.c: $(COMMON_DIR)/cfdg.y
cd $(DERIVED_DIR); yacc -d ../$(COMMON_DIR)/cfdg.y
$(OBJ_DIR)/lex.yy.o: $(DERIVED_DIR)/y.tab.h
#
# Utility
#
clean :
rm -f $(OBJ_DIR)/*
rm -f cfdg
distclean: clean
rmdir $(OBJ_DIR)
$(OBJ_DIR)/Sentry :
mkdir -p $(OBJ_DIR) 2> /dev/null || true
touch $@
#
# Tests
#
RTEST_CFDG = input/rendering-tests.cfdg
OUTPUT_DIR = output
rtests: $(OUTPUT_DIR)/rtest-700.png $(OUTPUT_DIR)/rtest-2k.png
$(OUTPUT_DIR)/rtest-700.png: cfdg $(RTEST_CFDG)
./cfdg -s 700 $(RTEST_CFDG) $@
$(OUTPUT_DIR)/rtest-2k.png: cfdg $(RTEST_CFDG)
./cfdg -s 2000 $(RTEST_CFDG) $@
#
# Rules
#
CPPFLAGS += $(patsubst %,-I%,$(INC_DIRS))
CPPFLAGS += -O3 -Wall
#CPPFLAGS += -ggdb
$(OBJ_DIR)/%.o : %.cpp
$(COMPILE.cpp) $(OUTPUT_OPTION) $<
$(OBJ_DIR)/%.o : %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<
$(OBJ_DIR)/%.d : %.cpp
mkdir -p $(OBJ_DIR) 2> /dev/null || true
set -e; $(COMPILE.cpp) -MM $< \
| sed 's,\(.*\.o\)\( *:\),$(OBJ_DIR)/\1 $@\2,g' > $@; \
[ -s $@ ] || rm -f $@
$(OBJ_DIR)/%.d : %.c
mkdir -p $(OBJ_DIR) 2> /dev/null || true
set -e; $(COMPILE.c) -MM $< \
| sed 's,\(.*\.o\)\( *:\),$(OBJ_DIR)/\1 $@\2,g' > $@; \
[ -s $@ ] || rm -f $@
$(OBJ_DIR)/y.tab.d:
$(OBJ_DIR)/lex.yy.d:
|