# WARN_CFLAGS user override but starts off set by configure
# PTHREAD_CFLAGS set by configure, not included in CFLAGS so that we
# don't pull the pthreads library into shared libraries
+# ASAN_FLAGS set by configure when --enable-asan is used
ALL_CFLAGS = $(DEFS) $(DEFINES) $(KRB_INCLUDES) $(LOCALINCLUDES) \
-DKRB5_DEPRECATED=1 \
-DKRB5_PRIVATE \
- $(CPPFLAGS) $(CFLAGS) $(WARN_CFLAGS) $(PTHREAD_CFLAGS)
+ $(CPPFLAGS) $(CFLAGS) $(WARN_CFLAGS) $(PTHREAD_CFLAGS) $(ASAN_FLAGS)
ALL_CXXFLAGS = $(DEFS) $(DEFINES) $(KRB_INCLUDES) $(LOCALINCLUDES) \
-DKRB5_DEPRECATED=1 \
-DKRB5_PRIVATE \
- $(CPPFLAGS) $(CXXFLAGS) $(WARN_CXXFLAGS) $(PTHREAD_CFLAGS)
+ $(CPPFLAGS) $(CXXFLAGS) $(WARN_CXXFLAGS) $(PTHREAD_CFLAGS) \
+ $(ASAN_FLAGS)
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
WARN_CFLAGS = @WARN_CFLAGS@
WARN_CXXFLAGS = @WARN_CXXFLAGS@
+ASAN_FLAGS = @ASAN_FLAGS@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
THREAD_LINKOPTS = $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
# prog: foo.o bar.o $(KRB5_BASE_DEPLIBS)
# $(CC_LINK) -o $@ foo.o bar.o $(KRB5_BASE_LIBS)
-CC_LINK=@CC_LINK@
-CXX_LINK=@CXX_LINK@
+CC_LINK=@CC_LINK@ $(ASAN_FLAGS)
+CXX_LINK=@CXX_LINK@ $(ASAN_FLAGS)
# Makefile.in files which build programs can override the list of
# directories to look for dependent libraries in (in the form -Ldir1
DYNOBJ_EXPDEPS=@DYNOBJ_EXPDEPS@
DYNOBJ_EXPFLAGS=@DYNOBJ_EXPFLAGS@
+# For some platforms, a flag which causes shared library creation to
+# check for undefined symbols. Suppressed when using --enable-asan.
+UNDEF_CHECK=@UNDEF_CHECK@
+
# File with symbol names to be exported, both functions and data,
# currently not distinguished.
SHLIB_EXPORT_FILE=$(srcdir)/$(LIBPREFIX)$(LIBBASE).exports
SHLIBEXT=.so
# Linux ld doesn't default to stuffing the SONAME field...
# Use objdump -x to examine the fields of the library
- LDCOMBINE='$(CC) -shared -fPIC -Wl,-h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT),--no-undefined'
+ # UNDEF_CHECK is suppressed by --enable-asan
+ LDCOMBINE='$(CC) -shared -fPIC -Wl,-h,$(LIBPREFIX)$(LIBBASE)$(SHLIBSEXT) $(UNDEF_CHECK)'
+ UNDEF_CHECK='-Wl,--no-undefined'
# $(EXPORT_CHECK) runs export-check.pl when in maintainer mode.
LDCOMBINE_TAIL='-Wl,--version-script binutils.versions $(EXPORT_CHECK)'
SHLIB_EXPORT_FILE_DEP=binutils.versions
fi
KRB5_RUN_FLAGS
+# asan is a gcc and clang facility to instrument the code with memory
+# error checking. To use it, we compile C and C++ source files with
+# -fsanitize=address, and set ASAN=yes to suppress the undefined
+# symbols check when building shared libraries.
+AC_ARG_ENABLE([asan],
+AC_HELP_STRING([--enable-asan],[Build with asan memory checking]),[],
+ [enable_asan=no])
+if test "$enable_asan" != no; then
+ if test "$enable_asan" = yes; then
+ enable_asan=address
+ fi
+ ASAN_FLAGS="$DEFS -fsanitize=$enable_asan"
+ ASAN=yes
+ UNDEF_CHECK=
+else
+ ASAN_FLAGS=
+ ASAN=no
+fi
+AC_SUBST(ASAN_FLAGS)
+AC_SUBST(ASAN)
+
AC_TYPE_SIGNAL
# from old include/configure.in