From owner-svn-src-all@freebsd.org Fri Feb 26 22:14:02 2016 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7190AAB6C46; Fri, 26 Feb 2016 22:14:02 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2A0FAC53; Fri, 26 Feb 2016 22:14:02 +0000 (UTC) (envelope-from bdrewery@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u1QME14Z033483; Fri, 26 Feb 2016 22:14:01 GMT (envelope-from bdrewery@FreeBSD.org) Received: (from bdrewery@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u1QME0oM033474; Fri, 26 Feb 2016 22:14:00 GMT (envelope-from bdrewery@FreeBSD.org) Message-Id: <201602262214.u1QME0oM033474@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bdrewery set sender to bdrewery@FreeBSD.org using -f From: Bryan Drewery Date: Fri, 26 Feb 2016 22:14:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r296124 - in head: share/man/man7 share/mk sys/conf X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Feb 2016 22:14:02 -0000 Author: bdrewery Date: Fri Feb 26 22:14:00 2016 New Revision: 296124 URL: https://svnweb.freebsd.org/changeset/base/296124 Log: Import bsd.clang-analyze.mk based on NetBSD's version. This allows 'make analyze' or 'make OBJ.clang-analyzer' to run the Clang static analyzer and present results on stdout. Obtained from: NetBSD (CVS Rev. 1.3) Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D5449 Added: head/share/mk/bsd.clang-analyze.mk (contents, props changed) Modified: head/share/man/man7/build.7 head/share/mk/Makefile head/share/mk/bsd.dep.mk head/share/mk/bsd.lib.mk head/share/mk/bsd.prog.mk head/share/mk/bsd.subdir.mk head/share/mk/bsd.sys.mk head/sys/conf/kmod.mk Modified: head/share/man/man7/build.7 ============================================================================== --- head/share/man/man7/build.7 Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/man/man7/build.7 Fri Feb 26 22:14:00 2016 (r296124) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 21, 2015 +.Dd February 26, 2016 .Dt BUILD 7 .Os .Sh NAME @@ -107,6 +107,8 @@ section below, and by the variables docu The following list provides the names and actions for the targets supported by the build system: .Bl -tag -width ".Cm cleandepend" +.It Cm analyze +Run Clang static analyzer against all objects and present output on stdout. .It Cm check Run tests for a given subdirectory. The default directory used is Modified: head/share/mk/Makefile ============================================================================== --- head/share/mk/Makefile Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/Makefile Fri Feb 26 22:14:00 2016 (r296124) @@ -17,6 +17,7 @@ FILES= \ auto.obj.mk \ bsd.README \ bsd.arch.inc.mk \ + bsd.clang-analyze.mk \ bsd.compiler.mk \ bsd.confs.mk \ bsd.cpu.mk \ Added: head/share/mk/bsd.clang-analyze.mk ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/mk/bsd.clang-analyze.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -0,0 +1,105 @@ +# $FreeBSD$ +# +# Support Clang static analyzer on SRCS. +# +# +# +++ variables +++ +# +# CLANG_ANALYZE_CHECKERS Which checkers to run for all sources. +# +# CLANG_ANALYZE_CXX_CHECKERS Which checkers to run for C++ sources. +# +# CLANG_ANALYZE_OUTPUT Output format for generated files. +# text - don't generate extra files. +# html - generate html in obj.plist/ directories. +# plist - generate xml obj.plist files. +# See also: +# contrib/llvm/tools/clang/include/clang/StaticAnalyzer/Core/Analyses.def +# +# CLANG_ANALYZE_OUTPUT_DIR Sets which directory output set by +# CLANG_ANALYZE_OUTPUT is placed into. +# +# +++ targets +++ +# +# analyze: +# Run the Clang static analyzer against all sources and present +# output on stdout. + +.if !target(____) +____: + +.include + +.if ${COMPILER_TYPE} != "clang" && (make(analyze) || make(*.clang-analyzer)) +.error Clang static analyzer requires clang but found that compiler '${CC}' is ${COMPILER_TYPE} +.endif + +CLANG_ANALYZE_OUTPUT?= text +CLANG_ANALYZE_OUTPUT_DIR?= clang-analyze +CLANG_ANALYZE_FLAGS+= --analyze \ + -Xanalyzer -analyzer-output=${CLANG_ANALYZE_OUTPUT} \ + -o ${CLANG_ANALYZE_OUTPUT_DIR} + +CLANG_ANALYZE_CHECKERS+= core deadcode security unix +CLANG_ANALYZE_CXX_CHECKERS+= cplusplus + +.for checker in ${CLANG_ANALYZE_CHECKERS} +CLANG_ANALYZE_FLAGS+= -Xanalyzer -analyzer-checker=${checker} +.endfor +CLANG_ANALYZE_CXX_FLAGS+= ${CLANG_ANALYZE_FLAGS} +.for checker in ${CLANG_ANALYZE_CXX_CHECKERS} +CLANG_ANALYZE_CXX_FLAGS+= -Xanalyzer -analyzer-checker=${checker} +.endfor + +.SUFFIXES: .c .cc .cpp .cxx .C .clang-analyzer + +CLANG_ANALYZE_CFLAGS= ${CFLAGS:N-Wa,--fatal-warnings} +CLANG_ANALYZE_CXXFLAGS= ${CXXFLAGS:N-Wa,--fatal-warnings} + +.c.clang-analyzer: + ${CC:N${CCACHE_BIN}} ${CLANG_ANALYZE_FLAGS} \ + ${CLANG_ANALYZE_CFLAGS} ${CPPFLAGS} \ + ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \ + ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} +.cc.clang-analyzer .cpp.clang-analyzer .cxx.clang-analyzer .C.clang-analyzer: + ${CXX:N${CCACHE_BIN}} ${CLANG_ANALYZE_CXX_FLAGS} \ + ${CLANG_ANALYZE_CXXFLAGS} ${CPPFLAGS} \ + ${COPTS.${.IMPSRC:T}} ${CPUFLAGS.${.IMPSRC:T}} \ + ${CPPFLAGS.${.IMPSRC:T}} ${.IMPSRC} + +CLANG_ANALYZE_SRCS= \ + ${SRCS:M*.[cC]} ${SRCS:M*.cc} \ + ${SRCS:M*.cpp} ${SRCS:M*.cxx} \ + ${DPSRCS:M*.[cC]} ${DPSRCS:M*.cc} \ + ${DPSRCS:M*.cpp} ${DPSRCS:M*.cxx} +.if !empty(CLANG_ANALYZE_SRCS) +CLANG_ANALYZE_OBJS= ${CLANG_ANALYZE_SRCS:O:u:R:S,$,.clang-analyzer,} +.NOPATH: ${CLANG_ANALYZE_OBJS} +.endif + +# .depend files aren't relevant here since they reference obj.o rather than +# obj.clang-analyzer, so add in some guesses in case 'make depend' wasn't ran, +# for when directly building 'obj.clang-analyzer'. +.for __obj in ${CLANG_ANALYZE_OBJS} +${__obj}: ${OBJS_DEPEND_GUESS} +${__obj}: ${OBJS_DEPEND_GUESS.${__obj}} +.endfor + +.if ${MK_FAST_DEPEND} == "yes" +beforeanalyze: depend +.endif +beforeanalyze: .PHONY +.if !defined(_RECURSING_PROGS) && !empty(CLANG_ANALYZE_SRCS) && \ + ${CLANG_ANALYZE_OUTPUT} != "text" + mkdir -p ${CLANG_ANALYZE_OUTPUT_DIR} +.endif + +.if !target(analyze) +analyze: beforeanalyze .WAIT ${CLANG_ANALYZE_OBJS} +.endif + +.if exists(${CLANG_ANALYZE_OUTPUT_DIR}) +CLEANDIRS+= ${CLANG_ANALYZE_OUTPUT_DIR} +.endif + +.endif # !target(____) Modified: head/share/mk/bsd.dep.mk ============================================================================== --- head/share/mk/bsd.dep.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/bsd.dep.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -83,7 +83,7 @@ tags: ${SRCS} # Skip reading .depend when not needed to speed up tree-walks # and simple lookups. .if !empty(.MAKEFLAGS:M-V${_V_READ_DEPEND}) || make(obj) || make(clean*) || \ - make(install*) + make(install*) || make(analyze) _SKIP_READ_DEPEND= 1 .if ${MK_DIRDEPS_BUILD} == "no" .MAKE.DEPENDFILE= /dev/null Modified: head/share/mk/bsd.lib.mk ============================================================================== --- head/share/mk/bsd.lib.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/bsd.lib.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -441,5 +441,6 @@ ${_S:R}.So: ${OBJS_DEPEND_GUESS.${_S:R}. .endif .include +.include .include .include Modified: head/share/mk/bsd.prog.mk ============================================================================== --- head/share/mk/bsd.prog.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/bsd.prog.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -283,5 +283,6 @@ ${OBJS}: ${OBJS_DEPEND_GUESS} .endif .include +.include .include .include Modified: head/share/mk/bsd.subdir.mk ============================================================================== --- head/share/mk/bsd.subdir.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/bsd.subdir.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -39,7 +39,7 @@ ____: SUBDIR_TARGETS+= \ - all all-man buildconfig buildfiles buildincludes \ + all all-man analyze buildconfig buildfiles buildincludes \ checkdpadd clean cleandepend cleandir cleanilinks \ cleanobj depend distribute files includes installconfig \ installfiles installincludes realinstall lint maninstall \ Modified: head/share/mk/bsd.sys.mk ============================================================================== --- head/share/mk/bsd.sys.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/share/mk/bsd.sys.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -176,7 +176,7 @@ CXXFLAGS+= ${CXXFLAGS.${COMPILER_TYPE}} # Tell bmake not to mistake standard targets for things to be searched for # or expect to ever be up-to-date. -PHONY_NOTMAIN = afterdepend afterinstall all beforedepend beforeinstall \ +PHONY_NOTMAIN = analyze afterdepend afterinstall all beforedepend beforeinstall \ beforelinking build build-tools buildconfig buildfiles \ buildincludes check checkdpadd clean cleandepend cleandir \ cleanobj configure depend distclean distribute exe \ Modified: head/sys/conf/kmod.mk ============================================================================== --- head/sys/conf/kmod.mk Fri Feb 26 22:13:56 2016 (r296123) +++ head/sys/conf/kmod.mk Fri Feb 26 22:14:00 2016 (r296124) @@ -461,5 +461,6 @@ ${OBJS}: ${OBJS_DEPEND_GUESS} .endif .include +.include .include .include "kern.mk"