Root/Makefile

Source at commit bc27b094af74a7c6f8b71ceaa63d1ba80d067cbb created 9 years 4 months ago.
By werner, With a little help from m8cutils and abyss, we now have regression tests for the topological sort. "make test" or "make tests" invokes the regression tests, "make valgrind" runs them under valgrind's watchful eyes.
1#
2# Makefile - Makefile of fped, the footprint editor
3#
4# Written 2009, 2010 by Werner Almesberger
5# Copyright 2009, 2010 by Werner Almesberger
6#
7# This program is free software; you can redistribute it and/or modify
8# it under the terms of the GNU General Public License as published by
9# the Free Software Foundation; either version 2 of the License, or
10# (at your option) any later version.
11#
12
13PREFIX = /usr/local
14
15UPLOAD = werner@sita.openmoko.org:public_html/fped/
16
17OBJS = fped.o expr.o coord.o obj.o delete.o inst.o util.o error.o \
18       unparse.o file.o dump.o kicad.o postscript.o meas.o \
19       layer.o overlap.o hole.o tsort.o \
20       cpp.o lex.yy.o y.tab.o \
21       gui.o gui_util.o gui_style.o gui_inst.o gui_status.o gui_canvas.o \
22       gui_tool.o gui_over.o gui_meas.o gui_frame.o gui_frame_drag.o
23
24XPMS = point.xpm delete.xpm delete_off.xpm \
25       vec.xpm frame.xpm \
26       line.xpm rect.xpm pad.xpm rpad.xpm hole.xpm arc.xpm circ.xpm \
27       meas.xpm meas_x.xpm meas_y.xpm \
28       stuff.xpm stuff_off.xpm meas_off.xpm \
29       bright.xpm bright_off.xpm all.xpm all_off.xpm
30
31PNGS = intro-1.png intro-2.png intro-3.png intro-4.png intro-5.png \
32       intro-6.png concept-inst.png
33
34SHELL = /bin/bash
35CFLAGS_GTK = `pkg-config --cflags gtk+-2.0`
36LIBS_GTK = `pkg-config --libs gtk+-2.0`
37
38CFLAGS_WARN = -Wall -Wshadow -Wmissing-prototypes \
39          -Wmissing-declarations -Wno-format-zero-length
40CFLAGS = -g -std=gnu99 $(CFLAGS_GTK) -DCPP='"cpp"' \
41         -DSVN_VERSION='"$(SVN_VERSION)$(SVN_STATUS)"' $(CFLAGS_WARN)
42SLOPPY = -Wno-unused -Wno-implicit-function-declaration \
43     -Wno-missing-prototypes -Wno-missing-declarations
44LDLIBS = -lm -lfl $(LIBS_GTK)
45YACC = bison -y
46YYFLAGS = -v
47
48SVN_VERSION=$(shell svn info -R | sed '/Last Changed Rev: /s///p;d' | \
49    sort -r | sed 1q)
50SVN_STATUS=$(shell [ -z "`svn status -q`" ] || echo +)
51
52
53# ----- Verbosity control -----------------------------------------------------
54
55CPP := $(CPP) # make sure changing CC won't affect CPP
56
57CC_normal := $(CC)
58YACC_normal := $(YACC)
59LEX_normal := $(LEX)
60DEPEND_normal := $(CPP) $(CFLAGS) -MM -MG
61
62CC_quiet = @echo " CC " $@ && $(CC_normal)
63YACC_quiet = @echo " YACC " $@ && $(YACC_normal)
64LEX_quiet = @echo " LEX " $@ && $(LEX_normal)
65GEN_quiet = @echo " GENERATE " $@ &&
66DEPEND_quiet = @$(DEPEND_normal)
67
68ifeq ($(V),1)
69    CC = $(CC_normal)
70    LEX = $(LEX_normal)
71    YACC = $(YACC_normal)
72    GEN =
73    DEPEND = $(DEPEND_normal)
74else
75    CC = $(CC_quiet)
76    LEX = $(LEX_quiet)
77    YACC = $(YACC_quiet)
78    GEN = $(GEN_quiet)
79    DEPEND = $(DEPEND_quiet)
80endif
81
82# ----- Rules -----------------------------------------------------------------
83
84.PHONY: all dep depend clean install uninstall manual upload-manual
85.PHONY: update montage test tests valgrind
86
87.SUFFIXES: .fig .xpm .ppm
88
89# compile and generate dependencies, based on
90# http://scottmcpeak.com/autodepend/autodepend.html
91
92%.o: %.c
93        $(CC) -c $(CFLAGS) $*.c -o $*.o
94        $(DEPEND) $*.c | \
95          sed -e \
96            '/^\(.*:\)\? */{p;s///;s/ *\\\?$$/ /;s/ */:\n/g;H;}' \
97            -e '$${g;p;}' -e d >$*.d; \
98          [ "$${PIPESTATUS[*]}" = "0 0" ] || { rm -f $*.d; exit 1; }
99        
100# generate 26x26 pixels icons, then drop the 1-pixel frame
101
102.fig.ppm:
103        $(GEN) fig2dev -L ppm -Z 0.32 -S 4 $< | \
104          convert -crop 24x24+1+1 - - >$@; \
105          [ "$${PIPESTATUS[*]}" = "0 0" ] || { rm -f $@; exit 1; }
106
107# ppmtoxpm is very chatty, so we suppress its stderr
108
109.ppm.xpm:
110        $(GEN) export TMP=_tmp$$$$; ppmcolormask white $< >$$TMP && \
111          ppmtoxpm -name xpm_`basename $@ .xpm` -alphamask $$TMP \
112          $< >$@ 2>/dev/null && rm -f $$TMP || \
113          { rm -f $@ $$TMP; exit 1; }
114
115all: fped
116
117fped: $(OBJS)
118        $(CC) -o $@ $(OBJS) $(LDLIBS)
119
120lex.yy.c: fpd.l y.tab.h
121        $(LEX) fpd.l
122
123lex.yy.o: lex.yy.c y.tab.h
124        $(CC) -c $(CFLAGS) $(SLOPPY) lex.yy.c
125
126y.tab.c y.tab.h: fpd.y
127        $(YACC) $(YYFLAGS) -d fpd.y
128
129y.tab.o: y.tab.c
130        $(CC) -c $(CFLAGS) $(SLOPPY) y.tab.c
131
132gui_tool.o gui.o: $(XPMS:%=icons/%)
133
134# ----- Upload the GUI manual -------------------------------------------------
135
136manual: $(XPMS:%=icons/%)
137        for n in $(XPMS:%.xpm=%); do \
138            convert icons/$$n.xpm manual/$$n.png || exit 1; done
139        fig2dev -L png -S 4 manual/concept-inst.fig \
140            >manual/concept-inst.png
141
142upload-manual: manual
143        scp gui.html README $(UPLOAD)/
144        scp $(XPMS:%.xpm=manual/%.png) $(PNGS:%=manual/%) \
145          $(UPLOAD)/manual/
146
147# ----- Debugging help --------------------------------------------------------
148
149montage:
150        montage -label %f -frame 3 __dbg????.png png:- | display -
151
152# ----- Dependencies ----------------------------------------------------------
153
154dep depend .depend:
155        @echo 'no need to run "make depend" anymore' 1>&2
156
157-include $(OBJS:.o=.d)
158
159# ----- Tests -----------------------------------------------------------------
160
161test tests: all
162        LANG= sh -c \
163          'passed=0 && cd test && \
164          for n in [a-z]*; do \
165          SCRIPT=$$n . ./$$n; done; \
166          echo "Passed all $$passed tests"'
167
168valgrind:
169        VALGRIND="valgrind -q" $(MAKE) tests
170
171# ----- Cleanup ---------------------------------------------------------------
172
173clean:
174        rm -f $(OBJS) $(XPMS:%=icons/%) $(XPMS:%.xpm=icons/%.ppm)
175        rm -f lex.yy.c y.tab.c y.tab.h y.output .depend $(OBJS:.o=.d)
176        rm -f __dbg????.png _tmp*
177
178# ----- Install / uninstall ---------------------------------------------------
179
180install: all
181        install -m 755 fped $(PREFIX)/bin/
182
183uninstall:
184        rm -f $(PREFIX)/bin/fped
185
186# ----- SVN update ------------------------------------------------------------
187
188update:
189        svn update
190        $(MAKE) dep all
191

Archive Download this file

Branches:
master



interactive