## Common automake fragments for elfutils subdirectory makefiles. ## ## Copyright (C) 2010, 2014, 2016 Red Hat, Inc. ## Copyright (C) 2023, 2025 Mark J. Wielaard ## ## 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 . ## DEFS = -D_GNU_SOURCE -DHAVE_CONFIG_H -DLOCALEDIR='"${localedir}"' # -iquote dirs are just for "header" includes, -I for both
# and "header" includes. We don't want system
includes to # search . and srcdir. We do want the headers under lib and the abs # top build dir (for config.h). # # This is mainly to prevent things like #include to # accidentially import the stack binary instead of the standard C++ # header file (which apparently clang plus libc++ do indirectly). # https://bugs.gentoo.org/925241 # https://sourceware.org/bugzilla/show_bug.cgi?id=33103 # # Note that DEFAULT_INCLUDES might add . and srcdir back. So # DEFAULT_INCLUDES is disabled explicitly in src/Makefile.am (where # the stack binary is build). We could also use the nostdinc automake # option to completely suppress that, but that needs more auditing of # various installed vs not-installed header files. AM_CPPFLAGS = -iquote. -iquote$(srcdir) -I$(top_srcdir)/lib -I$(abs_top_builddir) # 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 if HAVE_USE_AFTER_FREE3_WARNING USE_AFTER_FREE3_WARNING=-Wuse-after-free=3 else USE_AFTER_FREE3_WARNING= endif AM_CFLAGS = -Wall -Wshadow -Wformat=2 \ -Wold-style-definition -Wstrict-prototypes $(TRAMPOLINES_WARNING) \ $(LOGICAL_OP_WARNING) $(DUPLICATED_COND_WARNING) \ $(NULL_DEREFERENCE_WARNING) $(IMPLICIT_FALLTHROUGH_WARNING) \ $(USE_AFTER_FREE3_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 COVERAGE_OUTPUT_DIRECTORY = coverage COVERAGE_OUTPUT_FILE = $(PACKAGE_NAME).lcov .PHONY: clean-coverage coverage clean-local: clean-coverage clean-coverage: -rm -rf $(COVERAGE_OUTPUT_DIRECTORY) -rm -f $(COVERAGE_OUTPUT_FILE) *.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 $@ | grep -F -q TEXTREL; then $(textrel_found); fi print-%: @echo $*=$($*)