1## Common automake fragments for elfutils subdirectory makefiles.
2##
3## Copyright (C) 2010, 2014, 2016 Red Hat, Inc.
4##
5## This file is part of elfutils.
6##
7## This file is free software; you can redistribute it and/or modify
8## it under the terms of either
9##
10##   * the GNU Lesser General Public License as published by the Free
11##     Software Foundation; either version 3 of the License, or (at
12##     your option) any later version
13##
14## or
15##
16##   * the GNU General Public License as published by the Free
17##     Software Foundation; either version 2 of the License, or (at
18##     your option) any later version
19##
20## or both in parallel, as here.
21##
22## elfutils is distributed in the hope that it will be useful, but
23## WITHOUT ANY WARRANTY; without even the implied warranty of
24## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25## General Public License for more details.
26##
27## You should have received copies of the GNU General Public License and
28## the GNU Lesser General Public License along with this program.  If
29## not, see <http://www.gnu.org/licenses/>.
30##
31
32DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"'
33AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I..
34
35# Drop the 'u' flag that automake adds by default. It is incompatible
36# with deterministic archives.
37ARFLAGS = cr
38
39# Warn about stack usage of more than 256K = 262144 bytes.
40if ADD_STACK_USAGE_WARNING
41STACK_USAGE_WARNING=-Wstack-usage=262144
42else
43STACK_USAGE_WARNING=
44endif
45
46if SANE_LOGICAL_OP_WARNING
47LOGICAL_OP_WARNING=-Wlogical-op
48else
49LOGICAL_OP_WARNING=
50endif
51
52if HAVE_DUPLICATED_COND_WARNING
53DUPLICATED_COND_WARNING=-Wduplicated-cond
54else
55DUPLICATED_COND_WARNING=
56endif
57
58if HAVE_NULL_DEREFERENCE_WARNING
59NULL_DEREFERENCE_WARNING=-Wnull-dereference
60else
61NULL_DEREFERENCE_WARNING=
62endif
63
64if HAVE_IMPLICIT_FALLTHROUGH_WARNING
65# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the
66# warning
67IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5
68else
69IMPLICIT_FALLTHROUGH_WARNING=
70endif
71
72AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \
73	    -Wold-style-definition -Wstrict-prototypes -Wtrampolines \
74	    $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
75	    $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
76	    $(if $($(*F)_no_Werror),,-Werror) \
77	    $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
78	    $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
79	    $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
80	    $($(*F)_CFLAGS)
81
82AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \
83	   -Wtrampolines \
84	   $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
85	   $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
86	   $(if $($(*F)_no_Werror),,-Werror) \
87	   $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
88	   $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
89	   $(if $($(*F)_no_Wpacked_not_aligned),-Wno-packed-not-aligned,) \
90	   $($(*F)_CXXFLAGS)
91
92COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE))
93
94DEFS.os = -DPIC -DSHARED
95if SYMBOL_VERSIONING
96DEFS.os += -DSYMBOL_VERSIONING
97else
98endif
99
100%.os: %.c %.o
101if AMDEP
102	$(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \
103	  -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
104	then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
105	     rm -f "$(DEPDIR)/$*.Tpo"; \
106	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
107	fi
108else
109	$(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $<
110endif
111
112CLEANFILES = *.gcno *.gcda
113
114textrel_msg = echo "WARNING: TEXTREL found in '$@'"
115if FATAL_TEXTREL
116textrel_found = $(textrel_msg); exit 1
117else
118textrel_found = $(textrel_msg)
119endif
120textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then $(textrel_found); fi
121
122print-%:
123	@echo $*=$($*)
124