1 # Customize Makefile.maint. -*- makefile -*-
2 # Copyright (C) 2003-2009 Free Software Foundation, Inc.
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
14 # You should have received a copy of the GNU General Public License
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
17 # Use alpha.gnu.org for alpha and beta releases.
18 # Use ftp.gnu.org for major releases.
19 gnu_ftp_host-alpha = alpha.gnu.org
20 gnu_ftp_host-beta = alpha.gnu.org
21 gnu_ftp_host-major = ftp.gnu.org
22 gnu_rel_host = $(gnu_ftp_host-$(RELEASE_TYPE))
25 ftp://$(gnu_rel_host)/gnu/coreutils
27 # Tests not to run as part of "make distcheck".
28 local-checks-to-skip = \
33 makefile_path_separator_check \
36 sc_always_defined_macros \
37 sc_cast_of_alloca_return_value \
38 sc_dd_max_sym_length \
39 sc_error_exit_success \
42 sc_makefile_path_separator_check \
44 sc_prohibit_S_IS_definition \
45 sc_prohibit_atoi_atof \
46 sc_prohibit_jm_in_m4 \
47 sc_prohibit_quote_without_use \
48 sc_prohibit_quotearg_without_use \
49 sc_prohibit_stat_st_blocks \
50 sc_prohibit_strcmp_and_strncmp \
57 sc_two_space_separator_in_usage \
58 sc_error_message_uppercase \
60 sc_require_test_exit_idiom \
62 $(disable_temporarily) \
65 disable_temporarily = \
66 sc_makefile_TAB_only_indentation \
67 sc_unmarked_diagnostics \
68 sc_TAB_in_indentation \
70 sc_prohibit_asprintf \
72 sc_prohibit_trailing_blank_lines \
73 sc_avoid_ctype_macros \
74 sc_const_long_option \
78 # Avoid uses of write(2). Either switch to streams (fwrite), or use
79 # the safewrite wrapper.
81 @if $(VC_LIST_EXCEPT) | grep '\.c$$' > /dev/null; then \
82 grep '\<write *(' $$($(VC_LIST_EXCEPT) | grep '\.c$$') && \
83 { echo "$(ME): the above files use write;" \
84 " consider using the safewrite wrapper instead" \
85 1>&2; exit 1; } || :; \
89 # Use STREQ rather than comparing strcmp == 0, or != 0.
90 # Similarly, use STREQLEN or STRPREFIX rather than strncmp.
91 sc_prohibit_strcmp_and_strncmp:
92 @grep -nE '! *strn?cmp *\(|\<strn?cmp *\([^)]+\) *==' \
93 $$($(VC_LIST_EXCEPT)) \
94 | grep -vE ':# *define STREQ(LEN)?\(' && \
95 { echo '$(ME): use STREQ(LEN) in place of the above uses of strcmp(strncmp)' \
98 # Use virAsprintf rather than a'sprintf since *strp is undefined on error.
100 @re='\<[a]sprintf\>' \
101 msg='use virAsprintf, not a'sprintf \
104 # Prohibit the inclusion of <ctype.h>.
106 @grep -E '^# *include *<ctype\.h>' $$($(VC_LIST_EXCEPT)) && \
107 { echo "$(ME): don't use ctype.h; instead, use c-ctype.h" \
110 # Ensure that no C source file uses TABs for indentation.
111 sc_TAB_in_indentation:
112 @grep -lE '^ * ' /dev/null \
113 $$($(VC_LIST_EXCEPT) \
114 | grep -E '\.[ch](\.in)?$$') && \
115 { echo '$(ME): found TAB(s) used for indentation in C sources;'\
116 'use spaces' 1>&2; exit 1; } || :
118 ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
119 |isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
121 sc_avoid_ctype_macros:
122 @grep -E '\b($(ctype_re)) *\(' /dev/null \
123 $$($(VC_LIST_EXCEPT)) && \
124 { echo "$(ME): don't use ctype macros (use c-ctype.h)" \
127 sc_prohibit_virBufferAdd_with_string_literal:
128 @re='\<virBufferAdd *\([^,]+, *"[^"]' \
129 msg='use virBufferAddLit, not virBufferAdd, with a string literal' \
132 # Not only do they fail to deal well with ipv6, but the gethostby*
133 # functions are also not thread-safe.
134 sc_prohibit_gethostby:
135 @re='\<gethostby(addr|name2?) *\(' \
136 msg='use getaddrinfo, not gethostby*' \
139 # Disallow trailing blank lines.
140 sc_prohibit_trailing_blank_lines:
141 @$(VC_LIST_EXCEPT) | xargs perl -ln -0777 -e \
142 '/\n\n+$$/ and print $$ARGV' > $@-t
143 @found=0; test -s $@-t && { found=1; cat $@-t 1>&2; \
144 echo '$(ME): found trailing blank line(s)' 1>&2; }; \
148 # We don't use this feature of maint.mk.
149 prev_version_file = /dev/null
151 ifeq (0,$(MAKELEVEL))
152 _curr_status = .git-module-status
153 # The sed filter accommodates those who check out on a commit from which
154 # no tag is reachable. In that case, git submodule status prints a "-"
155 # in column 1 and does not print a "git describe"-style string after the
156 # submodule name. Contrast these:
157 # -b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib
158 # b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib (v0.0-2286-gb653eda)
159 _submodule_hash = sed 's/.//;s/ .*//'
160 _update_required := $(shell \
161 actual=$$(git submodule status | $(_submodule_hash)); \
162 stamp="$$($(_submodule_hash) $(_curr_status) 2>/dev/null)"; \
163 test "$$stamp" = "$$actual"; echo $$?)
164 ifeq (1,$(_update_required))
165 $(error gnulib update required; run ./autogen.sh first)