aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 30e8344aae9695a563837583608626f7eca0061c (plain) (blame)
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
.POSIX:

CONFIGFILE = config.mk
include $(CONFIGFILE)

OS = linux
# Linux:   linux
# Mac OS:  macos
# Windows: windows
include mk/$(OS).mk


LIB_MAJOR = 1
LIB_MINOR = 0
LIB_VERSION = $(LIB_MAJOR).$(LIB_MINOR)
LIB_NAME = normalform


OBJ_PUBLIC =\
	libnormalform_ref.o\
	libnormalform_free.o\
	libnormalform_clone.o\
	libnormalform_evaluate.o\
	libnormalform_express.o\
	libnormalform_to_string.o\
	libnormalform_from_string.o\
	libnormalform_variable.o\
	libnormalform_function.o\
	libnormalform_transformation.o\
	libnormalform_true.o\
	libnormalform_false.o\
	libnormalform_not.o\
	libnormalform_all.o\
	libnormalform_any.o\
	libnormalform_one.o\
	libnormalform_and.o\
	libnormalform_or.o\
	libnormalform_xor.o\
	libnormalform_if.o\
	libnormalform_imply.o\
	libnormalform_nand.o\
	libnormalform_nor.o\
	libnormalform_xnor.o\
	libnormalform_nif.o\
	libnormalform_nimply.o\
	libnormalform_exists.o\
	libnormalform_nexists.o\
	libnormalform_unique.o\
	libnormalform_existentially.o\
	libnormalform_universally.o\
	libnormalform_uniquely.o\
	libnormalform_empty.o\
	libnormalform_nonempty.o\
	libnormalform_singleton.o\
	libnormalform_and_checked.o\
	libnormalform_or_checked.o\
	libnormalform_xor_checked.o\
	libnormalform_if_checked.o\
	libnormalform_imply_checked.o\
	libnormalform_nand_checked.o\
	libnormalform_nor_checked.o\
	libnormalform_xnor_checked.o\
	libnormalform_nif_checked.o\
	libnormalform_nimply_checked.o\
	libnormalform_vand.o\
	libnormalform_vor.o\
	libnormalform_vxor.o\
	libnormalform_vif.o\
	libnormalform_vimply.o\
	libnormalform_vnand.o\
	libnormalform_vnor.o\
	libnormalform_vxnor.o\
	libnormalform_vnif.o\
	libnormalform_vnimply.o\
	libnormalform_andl.o\
	libnormalform_orl.o\
	libnormalform_xorl.o\
	libnormalform_ifl.o\
	libnormalform_implyl.o\
	libnormalform_nandl.o\
	libnormalform_norl.o\
	libnormalform_xnorl.o\
	libnormalform_nifl.o\
	libnormalform_nimplyl.o\
	libnormalform_vand_checked.o\
	libnormalform_vor_checked.o\
	libnormalform_vxor_checked.o\
	libnormalform_vif_checked.o\
	libnormalform_vimply_checked.o\
	libnormalform_vnand_checked.o\
	libnormalform_vnor_checked.o\
	libnormalform_vxnor_checked.o\
	libnormalform_vnif_checked.o\
	libnormalform_vnimply_checked.o\
	libnormalform_andl_checked.o\
	libnormalform_orl_checked.o\
	libnormalform_xorl_checked.o\
	libnormalform_ifl_checked.o\
	libnormalform_implyl_checked.o\
	libnormalform_nandl_checked.o\
	libnormalform_norl_checked.o\
	libnormalform_xnorl_checked.o\
	libnormalform_nifl_checked.o\
	libnormalform_nimplyl_checked.o\
	libnormalform_and2.o\
	libnormalform_or2.o\
	libnormalform_xor2.o\
	libnormalform_if2.o\
	libnormalform_imply2.o\
	libnormalform_nand2.o\
	libnormalform_nor2.o\
	libnormalform_xnor2.o\
	libnormalform_nif2.o\
	libnormalform_nimply2.o\

OBJ =\
	$(OBJ_PUBLIC)\
	libnormalform_and2__.o\
	libnormalform_or2__.o\
	libnormalform_xor2__.o\
	libnormalform_set_indices_and_counts__.o\
	libnormalform_reset_indices_and_counts__.o

TOBJ = $(OBJ:.o=.to)\
	libnormalform_andl_macro_test.to\
	libnormalform_orl_macro_test.to\
	libnormalform_xorl_macro_test.to\
	libnormalform_ifl_macro_test.to\
	libnormalform_implyl_macro_test.to\
	libnormalform_nandl_macro_test.to\
	libnormalform_norl_macro_test.to\
	libnormalform_xnorl_macro_test.to\
	libnormalform_nifl_macro_test.to\
	libnormalform_nimplyl_macro_test.to

HDR =\
	libnormalform.h

MAN3 =\
	$(OBJ_PUBLIC:.o=.3)\
	LIBNORMALFORM_AND.3\
	LIBNORMALFORM_OR.3\
	LIBNORMALFORM_XOR.3\
	LIBNORMALFORM_IF.3\
	LIBNORMALFORM_IMPLY.3\
	LIBNORMALFORM_NAND.3\
	LIBNORMALFORM_NOR.3\
	LIBNORMALFORM_XNOR.3\
	LIBNORMALFORM_NIF.3\
	LIBNORMALFORM_NIMPLY.3\
	struct_libnormalform_map.3\
	libnormalform_map.3\
	struct_libnormalform_mapping.3\
	libnormalform_mapping.3\
	struct_libnormalform_representation_spec.3\
	libnormalform_representation_spec.3\
	struct_libnormalform_transformer.3\
	libnormalform_transformer.3\
	enum_libnormalform_builtin_transformer.3\
	libnormalform_builtin_transformer.3\
	struct_libnormalform_function.3\
	struct_libnormalform_variable.3\
	enum_libnormalform_value.3\
	libnormalform_value.3\
	LIBNORMALFORM_SENTENCE.3\
	struct_libnormalform_sentence.3\
	libnormalform_sentence.3

LOBJ = $(OBJ:.o=.lo)
TEST = $(TOBJ:.to=.t)


all: libnormalform.a libnormalform.$(LIBEXT) $(TEST)
$(OBJ): $(HDR) common.h
$(LOBJ): $(HDR) common.h
$(TOBJ): $(HDR) common.h
$(TEST): libnormalform.a $(MEMCHECK)
memcheck.to: memcheck.h

L = libnormalform
C = checked

$L_and2.to    $L_andl.to    $L_vand.to    $L_and_$C.to    $L_andl_$C.to    $L_vand_$C.to    $L_andl_macro_test.to    : $L_and.c
$L_or2.to     $L_orl.to     $L_vor.to     $L_or_$C.to     $L_orl_$C.to     $L_vor_$C.to     $L_orl_macro_test.to     : $L_or.c
$L_xor2.to    $L_xorl.to    $L_vxor.to    $L_xor_$C.to    $L_xorl_$C.to    $L_vxor_$C.to    $L_xorl_macro_test.to    : $L_xor.c
$L_if2.to     $L_ifl.to     $L_vif.to     $L_if_$C.to     $L_ifl_$C.to     $L_vif_$C.to     $L_ifl_macro_test.to     : $L_if.c
$L_imply2.to  $L_implyl.to  $L_vimply.to  $L_imply_$C.to  $L_implyl_$C.to  $L_vimply_$C.to  $L_implyl_macro_test.to  : $L_imply.c
$L_nand2.to   $L_nandl.to   $L_vnand.to   $L_nand_$C.to   $L_nandl_$C.to   $L_vnand_$C.to   $L_nandl_macro_test.to   : $L_nand.c
$L_nor2.to    $L_norl.to    $L_vnor.to    $L_nor_$C.to    $L_norl_$C.to    $L_vnor_$C.to    $L_norl_macro_test.to    : $L_nor.c
$L_xnor2.to   $L_xnorl.to   $L_vxnor.to   $L_xnor_$C.to   $L_xnorl_$C.to   $L_vxnor_$C.to   $L_xnorl_macro_test.to   : $L_xnor.c
$L_nif2.to    $L_nifl.to    $L_vnif.to    $L_nif_$C.to    $L_nifl_$C.to    $L_vnif_$C.to    $L_nifl_macro_test.to    : $L_nif.c
$L_nimply2.to $L_nimplyl.to $L_vnimply.to $L_nimply_$C.to $L_nimplyl_$C.to $L_vnimply_$C.to $L_nimplyl_macro_test.to : $L_nimply.c

.c.o:
	$(CC) -c -o $@ $< $(CFLAGS) $(CPPFLAGS)

.c.lo:
	$(CC) -fPIC -c -o $@ $< $(CFLAGS) $(CPPFLAGS)

.c.to:
	$(CC) -DTEST -DTEST_TIMEOUT_SECONDS=$(TEST_TIMEOUT_SECONDS) -c -o $@ $< $(TEST_CFLAGS) $(TEST_CPPFLAGS)

.to.t:
	$(CC) -o $@ $< libnormalform.a $(MEMCHECK_OBJ) $(TEST_LDFLAGS)

libnormalform.a: $(OBJ)
	@rm -f -- $@
	$(AR) rc $@ $(OBJ)
	$(AR) ts $@ > /dev/null

libnormalform.$(LIBEXT): $(LOBJ)
	$(CC) $(LIBFLAGS) -o $@ $(LOBJ) $(LDFLAGS)

check: $(TEST)
	set -e;\
	for t in $(TEST:.t=); do\
		printf 'Testing %s\n' "$$t" >&2;\
		$(CHECK_PREFIX) ./$$t.t;\
	done

install: libnormalform.a libnormalform.$(LIBEXT)
	mkdir -p -- "$(DESTDIR)$(PREFIX)/lib"
	mkdir -p -- "$(DESTDIR)$(PREFIX)/include"
	cp -- libnormalform.a "$(DESTDIR)$(PREFIX)/lib/"
	cp -- libnormalform.$(LIBEXT) "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBMINOREXT)"
	$(FIX_INSTALL_NAME) "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBMINOREXT)"
	ln -sf -- libnormalform.$(LIBMINOREXT) "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBMAJOREXT)"
	ln -sf -- libnormalform.$(LIBMAJOREXT) "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBEXT)"
	cp -- libnormalform.h "$(DESTDIR)$(PREFIX)/include/"
	mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man7"
	cp -- libnormalform.7 "$(DESTDIR)$(MANPREFIX)/man7/"
	mkdir -p -- "$(DESTDIR)$(MANPREFIX)/man3"
	cp -P -- $$(printf 'man3/%s\n' $(MAN3)) "$(DESTDIR)$(MANPREFIX)/man3/"

uninstall:
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libnormalform.a"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBMAJOREXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBMINOREXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/lib/libnormalform.$(LIBEXT)"
	-rm -f -- "$(DESTDIR)$(PREFIX)/include/libnormalform.h"
	-rm -f -- "$(DESTDIR)$(MANPREFIX)/man7/libnormalform.7"
	-(cd -- "$(DESTDIR)$(MANPREFIX)/man3/" && rm -f -- $(MAN3))

clean:
	-rm -f -- *.o *.a *.lo *.su *.so *.so.* *.dll *.dylib
	-rm -f -- *.gch *.gcov *.gcno *.gcda *.$(LIBEXT) *.t *.to

.SUFFIXES:
.SUFFIXES: .lo .o .c .t .to

.PHONY: all check install uninstall clean