## Common automake fragments for elfutils subdirectory makefiles.
##
## Copyright (C) 2010, 2014, 2016 Red Hat, Inc.
##
## This file is part of elfutils.
##
## This file is free software; you can redistribute it and/or modify
## it under the terms of either
##
##   * the GNU Lesser General Public License as published by the Free
##     Software Foundation; either version 3 of the License, or (at
##     your option) any later version
##
## or
##
##   * the GNU General Public License as published by the Free
##     Software Foundation; either version 2 of the License, or (at
##     your option) any later version
##
## or both in parallel, as here.
##
## elfutils is distributed in the hope that it will be useful, but
## WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
## General Public License for more details.
##
## You should have received copies of the GNU General Public License and
## the GNU Lesser General Public License along with this program.  If
## not, see <http://www.gnu.org/licenses/>.
##

DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"'
AM_CPPFLAGS = -I. -I$(srcdir) -I$(top_srcdir)/lib -I..

# Drop the 'u' flag that automake adds by default. It is incompatible
# with deterministic archives.
ARFLAGS = cr

# Warn about stack usage of more than 256K = 262144 bytes.
if ADD_STACK_USAGE_WARNING
STACK_USAGE_WARNING=-Wstack-usage=262144
STACK_USAGE_NO_ERROR=-Wno-error=stack-usage=
else
STACK_USAGE_WARNING=
STACK_USAGE_NO_ERROR=
endif

if SANE_LOGICAL_OP_WARNING
LOGICAL_OP_WARNING=-Wlogical-op
else
LOGICAL_OP_WARNING=
endif

if HAVE_DUPLICATED_COND_WARNING
DUPLICATED_COND_WARNING=-Wduplicated-cond
else
DUPLICATED_COND_WARNING=
endif

if HAVE_NULL_DEREFERENCE_WARNING
NULL_DEREFERENCE_WARNING=-Wnull-dereference
else
NULL_DEREFERENCE_WARNING=
endif

if HAVE_IMPLICIT_FALLTHROUGH_WARNING
# Use strict fallthrough. Only __attribute__((fallthrough)) will prevent the
# warning
if HAVE_IMPLICIT_FALLTHROUGH_5_WARNING
IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough=5
else
IMPLICIT_FALLTHROUGH_WARNING=-Wimplicit-fallthrough
endif
else
IMPLICIT_FALLTHROUGH_WARNING=
endif

if HAVE_TRAMPOLINES_WARNING
TRAMPOLINES_WARNING=-Wtrampolines
else
TRAMPOLINES_WARNING=
endif

if HAVE_NO_PACKED_NOT_ALIGNED_WARNING
NO_PACKED_NOT_ALIGNED_WARNING=-Wno-packed-not-aligned
else
NO_PACKED_NOT_ALIGNED_WARNING=
endif

AM_CFLAGS = -std=gnu99 -Wall -Wshadow -Wformat=2 \
	    -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \
	    $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
	    $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
	    $(if $($(*F)_no_Werror),,-Werror) \
	    $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
	    $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
	    $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \
	    $($(*F)_CFLAGS)

AM_CXXFLAGS = -std=c++11 -Wall -Wshadow \
	   $(TRAMPOLINES_WARNING) \
	   $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \
	   $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \
	   $(if $($(*F)_no_Werror),,-Werror) \
	   $(if $($(*F)_no_Wunused),,-Wunused -Wextra) \
	   $(if $($(*F)_no_Wstack_usage),,$(STACK_USAGE_WARNING)) \
	   $(if $($(*F)_no_Wpacked_not_aligned),$(NO_PACKED_NOT_ALIGNED_WARNING),) \
	   $($(*F)_CXXFLAGS)

COMPILE.os = $(filter-out -fprofile-arcs -ftest-coverage, $(COMPILE))

DEFS.os = -DPIC -DSHARED
if SYMBOL_VERSIONING
DEFS.os += -DSYMBOL_VERSIONING
else
endif

%.os: %.c %.o
if AMDEP
	$(AM_V_CC)if $(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) -MT $@ -MD -MP \
	  -MF "$(DEPDIR)/$*.Tpo" `test -f '$<' || echo '$(srcdir)/'`$<; \
	then cat "$(DEPDIR)/$*.Tpo" >> "$(DEPDIR)/$*.Po"; \
	     rm -f "$(DEPDIR)/$*.Tpo"; \
	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
	fi
else
	$(AM_V_CC)$(COMPILE.os) -c -o $@ $(fpic_CFLAGS) $(DEFS.os) $<
endif

CLEANFILES = *.gcno *.gcda

textrel_msg = echo "WARNING: TEXTREL found in '$@'"
if FATAL_TEXTREL
textrel_found = $(textrel_msg); exit 1
else
textrel_found = $(textrel_msg)
endif
textrel_check = if $(READELF) -d $@ | fgrep -q TEXTREL; then $(textrel_found); fi

print-%:
	@echo $*=$($*)
