cfg.mk 10.6 KB
Newer Older
1
# Customize Makefile.maint.                           -*- makefile -*-
2
# Copyright (C) 2003-2010 Free Software Foundation, Inc.
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

# This program 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 a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Use alpha.gnu.org for alpha and beta releases.
# Use ftp.gnu.org for major releases.
gnu_ftp_host-alpha = alpha.gnu.org
gnu_ftp_host-beta = alpha.gnu.org
gnu_ftp_host-major = ftp.gnu.org
gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))

url_dir_list = \
  ftp://$(gnu_rel_host)/gnu/coreutils

27 28 29
# We use .gnulib, not gnulib.
gnulib_dir = $(srcdir)/.gnulib

30 31
# Tests not to run as part of "make distcheck".
local-checks-to-skip =			\
32 33
  changelog-check			\
  check-AUTHORS				\
34
  makefile-check			\
35 36
  makefile_path_separator_check		\
  patch-check				\
37 38 39
  sc_GPL_version			\
  sc_always_defined_macros		\
  sc_cast_of_alloca_return_value	\
40
  sc_cross_check_PATH_usage_in_tests	\
41 42 43
  sc_dd_max_sym_length			\
  sc_error_exit_success			\
  sc_file_system			\
44 45
  sc_immutable_NEWS			\
  sc_makefile_path_separator_check	\
46
  sc_obsolete_symbols			\
47
  sc_prohibit_S_IS_definition		\
48
  sc_prohibit_atoi_atof			\
49
  sc_prohibit_hash_without_use		\
50 51 52
  sc_prohibit_jm_in_m4			\
  sc_prohibit_quote_without_use		\
  sc_prohibit_quotearg_without_use	\
53
  sc_prohibit_stat_st_blocks		\
54 55 56 57
  sc_root_tests				\
  sc_space_tab				\
  sc_sun_os_names			\
  sc_system_h_headers			\
E
Eric Blake 已提交
58
  sc_texinfo_acronym			\
59
  sc_tight_scope			\
60
  sc_two_space_separator_in_usage	\
J
Jim Meyering 已提交
61 62 63 64
  sc_error_message_uppercase		\
  sc_program_name			\
  sc_require_test_exit_idiom		\
  sc_makefile_check			\
65
  sc_useless_cpp_parens
66 67 68

useless_free_options =		\
  --name=sexpr_free		\
69
  --name=VIR_FREE		\
70
  --name=xmlFree		\
71
  --name=xmlXPathFreeContext	\
72
  --name=virDomainDefFree	\
73
  --name=xmlXPathFreeObject
74 75 76 77

# Avoid uses of write(2).  Either switch to streams (fwrite), or use
# the safewrite wrapper.
sc_avoid_write:
E
Eric Blake 已提交
78 79 80 81
	@prohibit='\<write *\('						\
	in_vc_files='\.c$$'						\
	halt='consider using safewrite instead of write'		\
	 $(_sc_search_regexp)
82 83 84 85

# Use STREQ rather than comparing strcmp == 0, or != 0.
# Similarly, use STREQLEN or STRPREFIX rather than strncmp.
sc_prohibit_strcmp_and_strncmp:
E
Eric Blake 已提交
86 87 88
	@prohibit='strn?cmp *\('					\
	halt='use STREQ() in place of the above uses of str[n]cmp'	\
	  $(_sc_search_regexp)
89 90 91

# Use virAsprintf rather than a'sprintf since *strp is undefined on error.
sc_prohibit_asprintf:
E
Eric Blake 已提交
92 93 94
	@prohibit='\<[a]sprintf\>'					\
	halt='use virAsprintf, not a'sprintf				\
	  $(_sc_search_regexp)
95

C
Chris Lalancette 已提交
96
sc_prohibit_strncpy:
E
Eric Blake 已提交
97 98 99
	@prohibit='strncpy *\('						\
	halt='use virStrncpy, not strncpy'				\
	  $(_sc_search_regexp)
C
Chris Lalancette 已提交
100

101
sc_prohibit_readlink:
E
Eric Blake 已提交
102 103 104
	@prohibit='readlink *\('					\
	halt='use virFileResolveLink, not readlink'			\
	  $(_sc_search_regexp)
105

106
sc_prohibit_gethostname:
E
Eric Blake 已提交
107 108 109
	@prohibit='gethostname *\('					\
	halt='use virGetHostname, not gethostname'			\
	  $(_sc_search_regexp)
110

E
Eric Blake 已提交
111
sc_prohibit_gettext_noop:
E
Eric Blake 已提交
112 113 114
	@prohibit='gettext_noop *\('					\
	halt='use N_, not gettext_noop'					\
	  $(_sc_search_regexp)
E
Eric Blake 已提交
115

116
sc_prohibit_VIR_ERR_NO_MEMORY:
E
Eric Blake 已提交
117 118 119
	@prohibit='\<V''IR_ERR_NO_MEMORY\>'				\
	halt='use virReportOOMError, not V'IR_ERR_NO_MEMORY		\
	  $(_sc_search_regexp)
120

E
Eric Blake 已提交
121
# Use a subshell for each function, to give the optimal warning message.
122
include $(srcdir)/Makefile.nonreentrant
123 124 125 126
sc_prohibit_nonreentrant:
	@fail=0 ; \
	for i in $(NON_REENTRANT) ; \
	do \
E
Eric Blake 已提交
127 128 129 130
	    (prohibit="\\<$$i *\\("					\
	     halt="use $${i}_r, not $$i"				\
	     $(_sc_search_regexp)					\
	    ) || fail=1;						\
131 132 133 134 135
	done ; \
	exit $$fail

# Prohibit the inclusion of <ctype.h>.
sc_prohibit_ctype_h:
E
Eric Blake 已提交
136 137 138
	@prohibit='^# *include  *<ctype\.h>'				\
	halt="don't use ctype.h; instead, use c-ctype.h"		\
	 $(_sc_search_regexp)
139

D
David Allan 已提交
140 141 142
# Ensure that no C source file or rng schema uses TABs for
# indentation.  Also match *.h.in files, to get libvirt.h.in.  Exclude
# files in gnulib, since they're imported.
143
sc_TAB_in_indentation:
E
Eric Blake 已提交
144
	@prohibit='^ *	'						\
145 146
	in_vc_files='(\.(rng|[ch](\.in)?)|(daemon|tools)/.*\.in)$$'	\
	halt='use spaces, not TAB, for indentation in C, sh, and RNG schemas' \
E
Eric Blake 已提交
147
	 $(_sc_search_regexp)
148 149 150 151 152

ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper

sc_avoid_ctype_macros:
E
Eric Blake 已提交
153 154 155
	@prohibit='\b($(ctype_re)) *\('					\
	halt="don't use ctype macros (use c-ctype.h)"			\
	 $(_sc_search_regexp)
156 157

sc_prohibit_virBufferAdd_with_string_literal:
E
Eric Blake 已提交
158 159 160
	@prohibit='\<virBufferAdd *\([^,]+, *"[^"]'			\
	halt='use virBufferAddLit, not virBufferAdd, with a string literal' \
	  $(_sc_search_regexp)
161 162 163 164

# Not only do they fail to deal well with ipv6, but the gethostby*
# functions are also not thread-safe.
sc_prohibit_gethostby:
E
Eric Blake 已提交
165 166 167
	@prohibit='\<gethostby(addr|name2?) *\('			\
	halt='use getaddrinfo, not gethostby*'				\
	  $(_sc_search_regexp)
168 169 170 171 172 173 174

# Many of the function names below came from this filter:
# git grep -B2 '\<_('|grep -E '\.c- *[[:alpha:]_][[:alnum:]_]* ?\(.*[,;]$' \
# |sed 's/.*\.c-  *//'|perl -pe 's/ ?\(.*//'|sort -u \
# |grep -vE '^(qsort|if|close|assert|fputc|free|N_|vir.*GetName|.*Unlock|virNodeListDevices|virHashRemoveEntry|freeaddrinfo|.*[fF]ree|xdrmem_create|xmlXPathFreeObject|virUUIDFormat|openvzSetProgramSentinal|polkit_action_unref)$'

msg_gen_function =
175 176
msg_gen_function += ESX_ERROR
msg_gen_function += ESX_VI_ERROR
177
msg_gen_function += macvtapError
178
msg_gen_function += remoteError
179 180 181 182 183 184 185 186 187 188
msg_gen_function += lxcError
msg_gen_function += networkLog
msg_gen_function += networkReportError
msg_gen_function += oneError
msg_gen_function += openvzError
msg_gen_function += qemudDispatchClientFailure
msg_gen_function += qemudReportError
msg_gen_function += regerror
msg_gen_function += remoteDispatchFormatError
msg_gen_function += umlReportError
189
msg_gen_function += vboxError
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207
msg_gen_function += virConfError
msg_gen_function += virDomainReportError
msg_gen_function += virSecurityReportError
msg_gen_function += virHashError
msg_gen_function += virLibConnError
msg_gen_function += virLibDomainError
msg_gen_function += virNetworkReportError
msg_gen_function += virNodeDeviceReportError
msg_gen_function += virProxyError
msg_gen_function += virRaiseError
msg_gen_function += virReportErrorHelper
msg_gen_function += virReportSystemError
msg_gen_function += virSexprError
msg_gen_function += virStorageReportError
msg_gen_function += virXMLError
msg_gen_function += virXenInotifyError
msg_gen_function += virXenStoreError
msg_gen_function += virXendError
208
msg_gen_function += xenapiSessionErrorHandler
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
msg_gen_function += xenUnifiedError
msg_gen_function += xenXMError

# Uncomment the following and run "make syntax-check" to see diagnostics
# that are not yet marked for translation, but that need to be rewritten
# so that they are translatable.
# msg_gen_function += fprintf
# msg_gen_function += testError
# msg_gen_function += virXenError
# msg_gen_function += vshPrint
# msg_gen_function += vshError

func_or := $(shell printf '$(msg_gen_function)'|tr -s '[[:space:]]' '|')
func_re := ($(func_or))

# Look for diagnostics that aren't marked for translation.
# This won't find any for which error's format string is on a separate line.
# The sed filters eliminate false-positives like these:
#    _("...: "
#    "%s", _("no storage vol w..."
sc_libvirt_unmarked_diagnostics:
	@grep -nE							\
231
	    '\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' $$($(VC_LIST_EXCEPT))	\
232 233 234 235 236 237 238 239 240
	  | grep -v '_''(' &&						\
	  { echo '$(ME): found unmarked diagnostic(s)' 1>&2;		\
	    exit 1; } || :
	@{ grep     -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT));   \
	   grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
	   | sed 's/_("[^"][^"]*"//;s/[	 ]"%s"//'			\
	   | grep '[	 ]"' &&						\
	  { echo '$(ME): found unmarked diagnostic(s)' 1>&2;		\
	    exit 1; } || :
241

242 243 244 245 246 247 248 249 250
# Disallow trailing blank lines.
sc_prohibit_trailing_blank_lines:
	@$(VC_LIST_EXCEPT) | xargs perl -ln -0777 -e			\
	  '/\n\n+$$/ and print $$ARGV' > $@-t
	@found=0; test -s $@-t && { found=1; cat $@-t 1>&2;		\
	  echo '$(ME): found trailing blank line(s)' 1>&2; };		\
	rm -f $@-t;							\
	test $$found = 0

251 252 253 254 255 256 257 258 259 260 261 262 263
# Regex for grep -E that exempts generated files from style rules.
preprocessor_exempt = (remote_(driver|protocol)\.h)$$
# Enforce recommended preprocessor indentation style.
sc_preprocessor_indentation:
	@if (cppi --version >/dev/null 2>&1); then			\
	  $(VC_LIST_EXCEPT) | grep '\.[ch]$$'				\
	    | grep -vE '$(preprocessor_exempt)' | xargs cppi -a -c	\
	    || { echo '$(ME): incorrect preprocessor indentation' 1>&2;	\
		exit 1; };						\
	else								\
	  echo '$(ME): skipping test $@: cppi not installed' 1>&2;	\
	fi

264
sc_copyright_format:
E
Eric Blake 已提交
265 266 267 268 269 270 271
	@require='Copyright .*Red 'Hat', Inc\.'				\
	containing='Copyright .*Red 'Hat				\
	halt='Red Hat copyright is missing Inc.'			\
	 $(_sc_search_regexp)
	@prohibit='Copyright [^(].*Red 'Hat				\
	halt='consistently use (C) in Red Hat copyright'		\
	 $(_sc_search_regexp)
272

273 274
# We don't use this feature of maint.mk.
prev_version_file = /dev/null
275 276 277

ifeq (0,$(MAKELEVEL))
  _curr_status = .git-module-status
278 279 280 281 282 283
  # The sed filter accommodates those who check out on a commit from which
  # no tag is reachable.  In that case, git submodule status prints a "-"
  # in column 1 and does not print a "git describe"-style string after the
  # submodule name.  Contrast these:
  # -b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib
  #  b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib (v0.0-2286-gb653eda)
284 285 286
  # $ cat .git-module-status
  # b653eda3ac4864de205419d9f41eec267cb89eeb
  _submodule_hash = sed 's/^[ +-]//;s/ .*//'
287
  _update_required := $(shell						\
288
      cd '$(srcdir)';							\
289
      actual=$$(git submodule status | $(_submodule_hash);		\
290 291
		git hash-object bootstrap.conf;				\
		git diff .gnulib);					\
292 293
      stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)";	\
      test "$$stamp" = "$$actual"; echo $$?)
294 295
  _clean_requested = $(filter %clean,$(MAKECMDGOALS))
  ifeq (1,$(_update_required)$(_clean_requested))
296 297
    $(info INFO: gnulib update required; running ./autogen.sh first)
Makefile: _autogen
298 299
  endif
endif
300

301 302
# It is necessary to call autogen any time gnulib changes.  Autogen
# reruns configure, then we regenerate all Makefiles at once.
303 304 305
.PHONY: _autogen
_autogen:
	$(srcdir)/autogen.sh
306
	./config.status
307

308 309
# Exempt @...@ uses of these symbols.
_makefile_at_at_check_exceptions = ' && !/(SCHEMA|SYSCONF)DIR/'