-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathMakefile
124 lines (94 loc) · 4.13 KB
/
Makefile
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
include choose_mrbuild.mk
include $(MRBUILD_MK)/Makefile.common.header
PROJECT_NAME := mrgingham
ABI_VERSION := 2
TAIL_VERSION := 1
DIST_BIN := mrgingham mrgingham-observe-pixel-uncertainty mrgingham-rotate-corners
DIST_MAN := $(addsuffix .1,$(DIST_BIN))
# I want the tool I ship to be called "mrgingham", but I already have
# mrgingham.cc: it's a part of the LIBRARY
mrgingham: mrgingham-from-image
cp $< $@
EXTRA_CLEAN += mrgingham
all: mrgingham
BIN_SOURCES := mrgingham-from-image.cc
BIN_SOURCES += test-dump-chessboard-corners.cc test-dump-blobs.cc test-find-grid-from-points.cc
LIB_SOURCES := find_grid.cc find_blobs.cc find_chessboard_corners.cc mrgingham.cc ChESS.c
# The opencv people (or maybe the Debian people?) have renamed the opencv.pc
# file in opencv 4. So now I look for both version 4 and the default. What will
# happen with opencv5? We'll see!
CXXFLAGS_CV := $(shell pkg-config --cflags opencv4 2>/dev/null || pkg-config --cflags opencv 2>/dev/null)
LDLIBS_CV := $(shell pkg-config --libs opencv4 2>/dev/null || pkg-config --libs opencv 2>/dev/null)
CCXXFLAGS += $(CXXFLAGS_CV)
LDLIBS += $(LDLIBS_CV) -lpthread
CCXXFLAGS += -fvisibility=hidden
CFLAGS += -std=gnu99
CCXXFLAGS += -Wno-unused-function -Wno-missing-field-initializers -Wno-unused-parameter -Wno-strict-aliasing -Wno-int-to-pointer-cast -Wno-unused-variable
# On opencv4 I do this:
ifneq ($(wildcard /usr/include/opencv4),)
CCXXFLAGS += -D CV_LOAD_IMAGE_GRAYSCALE=cv::IMREAD_GRAYSCALE
endif
test:
test/test--mrgingham-rotate-corners
.PHONY: test
DIST_INCLUDE := mrgingham.hh point.hh
# I construct the README.org from the template. The only thing I do is to insert
# the manpages. Note that this is more complicated than it looks:
#
# 1. The documentation is extracted into a .pod by make-pod-from-help
# 2. This documentation is stripped out here wih pod2text, and included in the
# README. This README is an org-mode file, and the README.template.org
# container included the manpage text inside a #+BEGIN_EXAMPLE/#+END_EXAMPLE.
# So the manpages are treated as a verbatim, unformatted text blob
# 3. Further down, the same POD is converted to a manpage via pod2man
define MAKE_README =
BEGIN \
{ \
for $$a (@ARGV) \
{ \
$$base = $$a =~ s/\.pod$$//r; \
$$c{$$base} = `pod2text $$a | mawk "/REPOSITORY/{exit} {print}"`; \
} \
} \
\
while(<STDIN>) \
{ \
print s/xxx-manpage-(.*?)-xxx/$$c{$$1}/gr; \
}
endef
README.org: README.template.org $(DIST_BIN:%=%.pod)
< $(filter README%,$^) perl -e '$(MAKE_README)' $(filter-out README%,$^) > $@
all: README.org
%.1: %.pod
pod2man --center="mrgingham: chessboard corner finder" --name=MRGINGHAM --release="mrgingham $(VERSION)" --section=1 $^ $@
%.pod: %
$(MRBUILD_BIN)/make-pod-from-help $< > [email protected]
cat footer.pod >> [email protected]
mv [email protected] $@
EXTRA_CLEAN += *.1 $(addsuffix .pod,$(DIST_BIN)) README.org
%.usage.h: %.usage
< $^ sed 's/\\/\\\\/g; s/"/\\"/g; s/^/"/; s/$$/\\n"/;' > $@
EXTRA_CLEAN += *.usage.h
mrgingham-from-image.o: mrgingham.usage.h
########## chessboard-generating rules
########## I can "make chessboard.10x14.pdf" and it'll do the right thing
chessboard.%.fig: generate-chessboard-fig.py
./$< $(subst x, ,$*) > [email protected]
mv [email protected] $@
%.pdf: %.fig
fig2dev -L pdf $< > [email protected]
mv [email protected] $@
########## python stuff
mrgingham_pywrap.o: CCXXFLAGS += $(PY_MRBUILD_CFLAGS)
mrgingham_pywrap_cplusplus_bridge.o: CCXXFLAGS += -fPIC
mrgingham_pywrap.o: $(addsuffix .h,$(wildcard *.docstring))
# The python library is called "mrgingham.$(SO)". This is confusing, but is the
# best I could do. Because I want to be able to "import mrgingham"; and the
# normal way of creating a "mrgingham" subdirectory for all the python stuff
# doesn't work here: I already have a directory entry called "mrgingham"; it's
# the main commandline tool.
mrgingham$(PY_EXT_SUFFIX): mrgingham_pywrap.o mrgingham_pywrap_cplusplus_bridge.o libmrgingham.$(SO)
$(PY_MRBUILD_LINKER) $(PY_MRBUILD_LDFLAGS) $^ -o $@
DIST_PY3_MODULES := mrgingham$(PY_EXT_SUFFIX)
all: mrgingham$(PY_EXT_SUFFIX)
include $(MRBUILD_MK)/Makefile.common.footer