2008-01-29 17:42:39 +00:00
|
|
|
# Customize Makefile.maint. -*- makefile -*-
|
2015-04-27 13:25:51 +02:00
|
|
|
# Copyright (C) 2008-2015 Red Hat, Inc.
|
2011-01-06 17:17:32 -07:00
|
|
|
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
|
2008-01-29 17:42:39 +00:00
|
|
|
|
|
|
|
|
# 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
|
2012-07-26 16:58:02 -06:00
|
|
|
# along with this program. If not, see
|
|
|
|
|
# <http://www.gnu.org/licenses/>.
|
2008-01-29 17:42:39 +00:00
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
|
2010-04-27 14:39:40 -06:00
|
|
|
# We use .gnulib, not gnulib.
|
|
|
|
|
gnulib_dir = $(srcdir)/.gnulib
|
|
|
|
|
|
2011-05-04 08:18:06 -06:00
|
|
|
# List of additional files that we want to pick up in our POTFILES.in
|
|
|
|
|
# This is all gnulib files, as well as generated files for RPC code.
|
|
|
|
|
generated_files = \
|
2011-06-28 13:38:27 -06:00
|
|
|
$(srcdir)/daemon/*_dispatch.h \
|
2013-09-07 15:22:18 -06:00
|
|
|
$(srcdir)/src/*/*_dispatch.h \
|
2011-05-04 08:18:06 -06:00
|
|
|
$(srcdir)/src/remote/*_client_bodies.h \
|
2013-09-07 15:22:18 -06:00
|
|
|
$(srcdir)/src/*/*_protocol.[ch] \
|
2011-05-04 08:18:06 -06:00
|
|
|
$(srcdir)/gnulib/lib/*.[ch]
|
|
|
|
|
|
2011-11-29 16:42:23 -07:00
|
|
|
# We haven't converted all scripts to using gnulib's init.sh yet.
|
|
|
|
|
_test_script_regex = \<\(init\|test-lib\)\.sh\>
|
|
|
|
|
|
2008-01-29 17:42:39 +00:00
|
|
|
# Tests not to run as part of "make distcheck".
|
|
|
|
|
local-checks-to-skip = \
|
2009-01-29 12:11:49 +00:00
|
|
|
changelog-check \
|
2008-01-29 17:42:39 +00:00
|
|
|
makefile-check \
|
2009-01-29 12:11:49 +00:00
|
|
|
makefile_path_separator_check \
|
|
|
|
|
patch-check \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_GPL_version \
|
|
|
|
|
sc_always_defined_macros \
|
|
|
|
|
sc_cast_of_alloca_return_value \
|
2010-04-21 09:55:03 -06:00
|
|
|
sc_cross_check_PATH_usage_in_tests \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_dd_max_sym_length \
|
|
|
|
|
sc_error_exit_success \
|
|
|
|
|
sc_file_system \
|
2009-01-29 12:11:49 +00:00
|
|
|
sc_immutable_NEWS \
|
|
|
|
|
sc_makefile_path_separator_check \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_obsolete_symbols \
|
2009-01-29 12:11:49 +00:00
|
|
|
sc_prohibit_S_IS_definition \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_prohibit_atoi_atof \
|
2010-02-23 17:54:32 +01:00
|
|
|
sc_prohibit_hash_without_use \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_prohibit_jm_in_m4 \
|
|
|
|
|
sc_prohibit_quote_without_use \
|
|
|
|
|
sc_prohibit_quotearg_without_use \
|
2009-01-29 12:11:49 +00:00
|
|
|
sc_prohibit_stat_st_blocks \
|
2016-06-15 18:09:04 +02:00
|
|
|
sc_prohibit_undesirable_word_seq \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_root_tests \
|
|
|
|
|
sc_space_tab \
|
|
|
|
|
sc_sun_os_names \
|
|
|
|
|
sc_system_h_headers \
|
2010-03-25 17:37:31 -06:00
|
|
|
sc_texinfo_acronym \
|
2009-01-29 12:11:49 +00:00
|
|
|
sc_tight_scope \
|
2008-01-29 17:42:39 +00:00
|
|
|
sc_two_space_separator_in_usage \
|
2009-07-06 19:17:06 +02:00
|
|
|
sc_error_message_uppercase \
|
|
|
|
|
sc_program_name \
|
|
|
|
|
sc_require_test_exit_idiom \
|
|
|
|
|
sc_makefile_check \
|
2009-01-29 12:11:49 +00:00
|
|
|
sc_useless_cpp_parens
|
2008-02-07 16:49:29 +00:00
|
|
|
|
2012-07-10 09:37:07 -06:00
|
|
|
# Most developers don't run 'make distcheck'. We want the official
|
|
|
|
|
# dist to be secure, but don't want to penalize other developers
|
|
|
|
|
# using a distro that has not yet picked up the automake fix.
|
|
|
|
|
# FIXME remove this ifeq (making the syntax check unconditional)
|
|
|
|
|
# once fixed automake (1.11.6 or 1.12.2+) is more common.
|
|
|
|
|
ifeq ($(filter dist%, $(MAKECMDGOALS)), )
|
|
|
|
|
local-checks-to-skip += sc_vulnerable_makefile_CVE-2012-3386
|
|
|
|
|
else
|
2012-08-16 16:18:44 -06:00
|
|
|
distdir: sc_vulnerable_makefile_CVE-2012-3386.z
|
2012-07-10 09:37:07 -06:00
|
|
|
endif
|
|
|
|
|
|
2010-11-30 13:29:19 -07:00
|
|
|
# Files that should never cause syntax check failures.
|
2011-07-08 09:13:53 -06:00
|
|
|
VC_LIST_ALWAYS_EXCLUDE_REGEX = \
|
2015-10-15 11:19:28 +02:00
|
|
|
(^(HACKING|docs/(news(-[0-9]*)?\.html\.in|.*\.patch))|\.(po|fig|gif|ico|png))$$
|
2010-11-30 13:29:19 -07:00
|
|
|
|
|
|
|
|
# Functions like free() that are no-ops on NULL arguments.
|
2010-05-17 22:38:59 +02:00
|
|
|
useless_free_options = \
|
2013-01-23 19:34:48 -05:00
|
|
|
--name=VBOX_UTF16_FREE \
|
|
|
|
|
--name=VBOX_UTF8_FREE \
|
|
|
|
|
--name=VBOX_COM_UNALLOC_MEM \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=VIR_FREE \
|
2011-02-08 15:22:39 +01:00
|
|
|
--name=qemuCapsFree \
|
2011-01-24 18:06:16 +00:00
|
|
|
--name=qemuMigrationCookieFree \
|
2011-02-17 13:17:59 +00:00
|
|
|
--name=qemuMigrationCookieGraphicsFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=sexpr_free \
|
2013-01-08 07:42:26 -05:00
|
|
|
--name=usbFreeDevice \
|
2011-07-22 16:07:25 +02:00
|
|
|
--name=virBandwidthDefFree \
|
2010-05-20 22:23:48 -06:00
|
|
|
--name=virBitmapFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virCPUDefFree \
|
|
|
|
|
--name=virCapabilitiesFree \
|
|
|
|
|
--name=virCapabilitiesFreeGuest \
|
|
|
|
|
--name=virCapabilitiesFreeGuestDomain \
|
|
|
|
|
--name=virCapabilitiesFreeGuestFeature \
|
|
|
|
|
--name=virCapabilitiesFreeGuestMachine \
|
|
|
|
|
--name=virCapabilitiesFreeHostNUMACell \
|
|
|
|
|
--name=virCapabilitiesFreeMachines \
|
|
|
|
|
--name=virCgroupFree \
|
2010-05-25 12:14:06 +01:00
|
|
|
--name=virCommandFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virConfFreeList \
|
|
|
|
|
--name=virConfFreeValue \
|
2011-06-26 04:09:00 -04:00
|
|
|
--name=virDomainActualNetDefFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virDomainChrDefFree \
|
2011-01-07 15:45:01 -07:00
|
|
|
--name=virDomainChrSourceDefFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virDomainControllerDefFree \
|
|
|
|
|
--name=virDomainDefFree \
|
|
|
|
|
--name=virDomainDeviceDefFree \
|
|
|
|
|
--name=virDomainDiskDefFree \
|
|
|
|
|
--name=virDomainEventCallbackListFree \
|
2013-11-21 11:43:10 +01:00
|
|
|
--name=virObjectEventQueueFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virDomainFSDefFree \
|
|
|
|
|
--name=virDomainGraphicsDefFree \
|
|
|
|
|
--name=virDomainHostdevDefFree \
|
|
|
|
|
--name=virDomainInputDefFree \
|
|
|
|
|
--name=virDomainNetDefFree \
|
|
|
|
|
--name=virDomainObjFree \
|
2011-01-10 09:41:33 -07:00
|
|
|
--name=virDomainSmartcardDefFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virDomainSnapshotDefFree \
|
|
|
|
|
--name=virDomainSnapshotObjFree \
|
|
|
|
|
--name=virDomainSoundDefFree \
|
|
|
|
|
--name=virDomainVideoDefFree \
|
|
|
|
|
--name=virDomainWatchdogDefFree \
|
2011-07-11 15:26:33 -06:00
|
|
|
--name=virFileDirectFdFree \
|
2011-02-18 14:30:24 -07:00
|
|
|
--name=virHashFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virInterfaceDefFree \
|
|
|
|
|
--name=virInterfaceIpDefFree \
|
|
|
|
|
--name=virInterfaceObjFree \
|
|
|
|
|
--name=virInterfaceProtocolDefFree \
|
|
|
|
|
--name=virJSONValueFree \
|
|
|
|
|
--name=virLastErrFreeData \
|
2010-12-06 17:03:22 +00:00
|
|
|
--name=virNetMessageFree \
|
2011-03-02 17:11:42 +00:00
|
|
|
--name=virNetServerMDNSFree \
|
|
|
|
|
--name=virNetServerMDNSEntryFree \
|
|
|
|
|
--name=virNetServerMDNSGroupFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virNWFilterDefFree \
|
|
|
|
|
--name=virNWFilterEntryFree \
|
|
|
|
|
--name=virNWFilterHashTableFree \
|
|
|
|
|
--name=virNWFilterIPAddrLearnReqFree \
|
|
|
|
|
--name=virNWFilterIncludeDefFree \
|
2011-01-15 16:06:52 +01:00
|
|
|
--name=virNWFilterObjFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virNWFilterRuleDefFree \
|
|
|
|
|
--name=virNWFilterRuleInstFree \
|
|
|
|
|
--name=virNetworkDefFree \
|
|
|
|
|
--name=virNodeDeviceDefFree \
|
|
|
|
|
--name=virNodeDeviceObjFree \
|
2012-07-11 14:35:44 +01:00
|
|
|
--name=virObjectUnref \
|
|
|
|
|
--name=virObjectFreeCallback \
|
2013-06-04 16:00:46 -04:00
|
|
|
--name=virPCIDeviceFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virSecretDefFree \
|
|
|
|
|
--name=virStorageEncryptionFree \
|
|
|
|
|
--name=virStorageEncryptionSecretFree \
|
2011-07-14 12:53:45 +02:00
|
|
|
--name=virStorageFileFreeMetadata \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=virStoragePoolDefFree \
|
|
|
|
|
--name=virStoragePoolObjFree \
|
|
|
|
|
--name=virStoragePoolSourceFree \
|
|
|
|
|
--name=virStorageVolDefFree \
|
2010-12-08 14:19:06 +08:00
|
|
|
--name=virThreadPoolFree \
|
2011-08-18 14:54:43 -06:00
|
|
|
--name=xmlBufferFree \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=xmlFree \
|
2011-08-18 14:54:43 -06:00
|
|
|
--name=xmlFreeDoc \
|
2012-01-24 17:16:16 -07:00
|
|
|
--name=xmlFreeNode \
|
2010-05-17 22:38:59 +02:00
|
|
|
--name=xmlXPathFreeContext \
|
2008-02-07 16:49:29 +00:00
|
|
|
--name=xmlXPathFreeObject
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2010-05-17 22:38:59 +02:00
|
|
|
# The following template was generated by this command:
|
|
|
|
|
# make ID && aid free|grep '^vi'|sed 's/ .*//;s/^/# /'
|
|
|
|
|
# N virBufferFreeAndReset
|
|
|
|
|
# y virCPUDefFree
|
|
|
|
|
# y virCapabilitiesFree
|
|
|
|
|
# y virCapabilitiesFreeGuest
|
|
|
|
|
# y virCapabilitiesFreeGuestDomain
|
|
|
|
|
# y virCapabilitiesFreeGuestFeature
|
|
|
|
|
# y virCapabilitiesFreeGuestMachine
|
|
|
|
|
# y virCapabilitiesFreeHostNUMACell
|
|
|
|
|
# y virCapabilitiesFreeMachines
|
|
|
|
|
# N virCapabilitiesFreeNUMAInfo FIXME
|
|
|
|
|
# y virCgroupFree
|
|
|
|
|
# N virConfFree (diagnoses the "error")
|
|
|
|
|
# y virConfFreeList
|
|
|
|
|
# y virConfFreeValue
|
|
|
|
|
# y virDomainChrDefFree
|
|
|
|
|
# y virDomainControllerDefFree
|
|
|
|
|
# y virDomainDefFree
|
|
|
|
|
# y virDomainDeviceDefFree
|
|
|
|
|
# y virDomainDiskDefFree
|
|
|
|
|
# y virDomainEventCallbackListFree
|
|
|
|
|
# y virDomainEventQueueFree
|
|
|
|
|
# y virDomainFSDefFree
|
|
|
|
|
# n virDomainFree
|
|
|
|
|
# n virDomainFreeName (can't fix -- returns int)
|
|
|
|
|
# y virDomainGraphicsDefFree
|
|
|
|
|
# y virDomainHostdevDefFree
|
|
|
|
|
# y virDomainInputDefFree
|
|
|
|
|
# y virDomainNetDefFree
|
|
|
|
|
# y virDomainObjFree
|
|
|
|
|
# y virDomainSnapshotDefFree
|
|
|
|
|
# n virDomainSnapshotFree (returns int)
|
|
|
|
|
# n virDomainSnapshotFreeName (returns int)
|
|
|
|
|
# y virDomainSnapshotObjFree
|
|
|
|
|
# y virDomainSoundDefFree
|
|
|
|
|
# y virDomainVideoDefFree
|
|
|
|
|
# y virDomainWatchdogDefFree
|
|
|
|
|
# n virDrvNodeGetCellsFreeMemory (returns int)
|
|
|
|
|
# n virDrvNodeGetFreeMemory (returns long long)
|
2011-09-20 12:11:32 -06:00
|
|
|
# n virFree - dereferences param
|
2010-05-17 22:38:59 +02:00
|
|
|
# n virFreeError
|
|
|
|
|
# n virHashFree (takes 2 args)
|
|
|
|
|
# y virInterfaceDefFree
|
|
|
|
|
# n virInterfaceFree (returns int)
|
|
|
|
|
# n virInterfaceFreeName
|
|
|
|
|
# y virInterfaceIpDefFree
|
|
|
|
|
# y virInterfaceObjFree
|
|
|
|
|
# n virInterfaceObjListFree
|
|
|
|
|
# y virInterfaceProtocolDefFree
|
|
|
|
|
# y virJSONValueFree
|
|
|
|
|
# y virLastErrFreeData
|
|
|
|
|
# y virNWFilterDefFree
|
|
|
|
|
# y virNWFilterEntryFree
|
|
|
|
|
# n virNWFilterFree (returns int)
|
|
|
|
|
# y virNWFilterHashTableFree
|
|
|
|
|
# y virNWFilterIPAddrLearnReqFree
|
|
|
|
|
# y virNWFilterIncludeDefFree
|
2011-01-15 16:06:52 +01:00
|
|
|
# n virNWFilterFreeName (returns int)
|
|
|
|
|
# y virNWFilterObjFree
|
|
|
|
|
# n virNWFilterObjListFree FIXME
|
2010-05-17 22:38:59 +02:00
|
|
|
# y virNWFilterRuleDefFree
|
|
|
|
|
# n virNWFilterRuleFreeInstanceData (typedef)
|
|
|
|
|
# y virNWFilterRuleInstFree
|
|
|
|
|
# y virNetworkDefFree
|
|
|
|
|
# n virNetworkFree (returns int)
|
|
|
|
|
# n virNetworkFreeName (returns int)
|
|
|
|
|
# n virNodeDevCapsDefFree FIXME
|
|
|
|
|
# y virNodeDeviceDefFree
|
|
|
|
|
# n virNodeDeviceFree (returns int)
|
|
|
|
|
# y virNodeDeviceObjFree
|
|
|
|
|
# n virNodeDeviceObjListFree FIXME
|
|
|
|
|
# n virNodeGetCellsFreeMemory (returns int)
|
|
|
|
|
# n virNodeGetFreeMemory (returns non-void)
|
|
|
|
|
# y virSecretDefFree
|
|
|
|
|
# n virSecretFree (returns non-void)
|
|
|
|
|
# n virSecretFreeName (2 args)
|
|
|
|
|
# n virSecurityLabelDefFree FIXME
|
|
|
|
|
# n virStorageBackendDiskMakeFreeExtent (returns non-void)
|
|
|
|
|
# y virStorageEncryptionFree
|
|
|
|
|
# y virStorageEncryptionSecretFree
|
|
|
|
|
# n virStorageFreeType (enum)
|
|
|
|
|
# y virStoragePoolDefFree
|
|
|
|
|
# n virStoragePoolFree (returns non-void)
|
|
|
|
|
# n virStoragePoolFreeName (returns non-void)
|
|
|
|
|
# y virStoragePoolObjFree
|
|
|
|
|
# n virStoragePoolObjListFree FIXME
|
|
|
|
|
# y virStoragePoolSourceFree
|
|
|
|
|
# y virStorageVolDefFree
|
|
|
|
|
# n virStorageVolFree (returns non-void)
|
|
|
|
|
# n virStorageVolFreeName (returns non-void)
|
|
|
|
|
# n virStreamFree
|
|
|
|
|
|
2009-07-06 18:28:10 +02:00
|
|
|
# Avoid uses of write(2). Either switch to streams (fwrite), or use
|
|
|
|
|
# the safewrite wrapper.
|
|
|
|
|
sc_avoid_write:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='\<write *\(' \
|
|
|
|
|
in_vc_files='\.c$$' \
|
|
|
|
|
halt='consider using safewrite instead of write' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2011-07-08 09:18:48 -06:00
|
|
|
# In debug statements, print flags as bitmask and mode_t as octal.
|
|
|
|
|
sc_flags_debug:
|
|
|
|
|
@prohibit='\<mode=%[0-9.]*[diux]' \
|
2011-07-07 11:57:43 -06:00
|
|
|
halt='use %o to debug mode_t values' \
|
2011-07-08 09:18:48 -06:00
|
|
|
$(_sc_search_regexp)
|
2011-07-07 11:57:43 -06:00
|
|
|
@prohibit='[Ff]lags=%[0-9.]*l*[diou]' \
|
|
|
|
|
halt='use %x to debug flag values' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
|
|
# Prefer 'unsigned int flags', along with checks for unknown flags.
|
|
|
|
|
# For historical reasons, we are stuck with 'unsigned long flags' in
|
|
|
|
|
# migration, so check for those known 4 instances and no more in public
|
|
|
|
|
# API. Also check that no flags are marked unused, and 'unsigned' should
|
|
|
|
|
# appear before any declaration of a flags variable (achieved by
|
|
|
|
|
# prohibiting the word prior to the type from ending in anything other
|
|
|
|
|
# than d). The existence of long long, and of documentation about
|
|
|
|
|
# flags, makes the regex in the third test slightly harder.
|
|
|
|
|
sc_flags_usage:
|
2014-10-23 11:28:16 +01:00
|
|
|
@test "$$(cat $(srcdir)/include/libvirt/libvirt-domain.h \
|
2011-07-07 11:57:43 -06:00
|
|
|
$(srcdir)/include/libvirt/virterror.h \
|
|
|
|
|
$(srcdir)/include/libvirt/libvirt-qemu.h \
|
2012-12-21 13:15:19 +00:00
|
|
|
$(srcdir)/include/libvirt/libvirt-lxc.h \
|
2015-04-15 16:16:24 +02:00
|
|
|
$(srcdir)/include/libvirt/libvirt-admin.h \
|
2011-07-07 11:57:43 -06:00
|
|
|
| grep -c '\(long\|unsigned\) flags')" != 4 && \
|
|
|
|
|
{ echo '$(ME): new API should use "unsigned int flags"' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
2016-04-11 17:00:26 +02:00
|
|
|
@prohibit=' flags ATTRIBUTE_UNUSED' \
|
2011-07-07 11:57:43 -06:00
|
|
|
halt='flags should be checked with virCheckFlags' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
@prohibit='^[^@]*([^d] (int|long long)|[^dg] long) flags[;,)]' \
|
|
|
|
|
halt='flags should be unsigned' \
|
2011-07-08 09:18:48 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2011-09-20 12:11:32 -06:00
|
|
|
# Avoid functions that should only be called via macro counterparts.
|
|
|
|
|
sc_prohibit_internal_functions:
|
2012-10-08 13:33:35 -04:00
|
|
|
@prohibit='vir(Free|AllocN?|ReallocN|(Insert|Delete)ElementsN|File(Close|Fclose|Fdopen)) *\(' \
|
2011-09-20 12:11:32 -06:00
|
|
|
halt='use VIR_ macros instead of internal functions' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2012-02-02 15:47:04 -07:00
|
|
|
# Avoid raw malloc and free, except in documentation comments.
|
|
|
|
|
sc_prohibit_raw_allocation:
|
|
|
|
|
@prohibit='^.[^*].*\<((m|c|re)alloc|free) *\([^)]' \
|
2012-12-12 18:06:53 +00:00
|
|
|
halt='use VIR_ macros from viralloc.h instead of malloc/free' \
|
2012-02-02 15:47:04 -07:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-11-19 17:25:23 -07:00
|
|
|
# Avoid functions that can lead to double-close bugs.
|
|
|
|
|
sc_prohibit_close:
|
2011-01-27 15:16:14 -07:00
|
|
|
@prohibit='([^>.]|^)\<[fp]?close *\(' \
|
2010-11-19 17:25:23 -07:00
|
|
|
halt='use VIR_{FORCE_}[F]CLOSE instead of [f]close' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
@prohibit='\<fdopen *\(' \
|
|
|
|
|
halt='use VIR_FDOPEN instead of fdopen' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2011-01-27 15:16:14 -07:00
|
|
|
# Prefer virCommand for all child processes.
|
|
|
|
|
sc_prohibit_fork_wrappers:
|
|
|
|
|
@prohibit='= *\<(fork|popen|system) *\(' \
|
|
|
|
|
halt='use virCommand for child processes' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2012-10-31 08:13:47 -06:00
|
|
|
# Prefer mkostemp with O_CLOEXEC.
|
|
|
|
|
sc_prohibit_mkstemp:
|
|
|
|
|
@prohibit='[^"]\<mkstemps? *\(' \
|
|
|
|
|
halt='use mkostemp with O_CLOEXEC instead of mkstemp' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2011-03-18 14:41:13 -06:00
|
|
|
# access with X_OK accepts directories, but we can't exec() those.
|
|
|
|
|
# access with F_OK or R_OK is okay, though.
|
|
|
|
|
sc_prohibit_access_xok:
|
2016-04-11 17:00:26 +02:00
|
|
|
@prohibit='access(at)? *\(.*X_OK' \
|
|
|
|
|
halt='use virFileIsExecutable instead of access(,X_OK)' \
|
2011-03-18 14:41:13 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-11-17 16:41:31 -07:00
|
|
|
# Similar to the gnulib maint.mk rule for sc_prohibit_strcmp
|
|
|
|
|
# Use STREQLEN or STRPREFIX rather than comparing strncmp == 0, or != 0.
|
2012-02-24 12:01:15 -07:00
|
|
|
snp_ = strncmp *\(.+\)
|
2010-11-17 16:41:31 -07:00
|
|
|
sc_prohibit_strncmp:
|
2012-03-01 17:21:08 -07:00
|
|
|
@prohibit='! *strncmp *\(|\<$(snp_) *[!=]=|[!=]= *$(snp_)' \
|
|
|
|
|
exclude=':# *define STR(N?EQLEN|PREFIX)\(' \
|
2016-04-11 17:00:26 +02:00
|
|
|
halt='use STREQLEN or STRPREFIX instead of strncmp' \
|
2012-03-01 17:21:08 -07:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2012-04-18 18:06:59 -06:00
|
|
|
# strtol and friends are too easy to misuse
|
|
|
|
|
sc_prohibit_strtol:
|
|
|
|
|
@prohibit='\bstrto(u?ll?|[ui]max) *\(' \
|
|
|
|
|
exclude='exempt from syntax-check' \
|
2012-09-04 17:40:04 -06:00
|
|
|
halt='use virStrToLong_*, not strtol variants' \
|
2012-04-18 18:06:59 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
@prohibit='\bstrto[df] *\(' \
|
|
|
|
|
exclude='exempt from syntax-check' \
|
2012-09-04 17:40:04 -06:00
|
|
|
halt='use virStrToDouble, not strtod variants' \
|
2012-04-18 18:06:59 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-08-18 17:31:39 -06:00
|
|
|
# Use virAsprintf rather than as'printf since *strp is undefined on error.
|
2013-05-02 13:35:26 -06:00
|
|
|
# But for plain %s, virAsprintf is overkill compared to strdup.
|
2009-07-06 18:28:10 +02:00
|
|
|
sc_prohibit_asprintf:
|
2010-11-22 16:39:47 -07:00
|
|
|
@prohibit='\<v?a[s]printf\>' \
|
2016-04-11 17:00:26 +02:00
|
|
|
halt='use virAsprintf, not asprintf' \
|
2010-08-18 17:31:39 -06:00
|
|
|
$(_sc_search_regexp)
|
2013-05-02 13:35:26 -06:00
|
|
|
@prohibit='virAsprintf.*, *"%s",' \
|
2013-04-04 20:16:43 +02:00
|
|
|
halt='use VIR_STRDUP instead of virAsprintf with "%s"' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
|
|
sc_prohibit_strdup:
|
|
|
|
|
@prohibit='\<strn?dup\> *\(' \
|
|
|
|
|
halt='use VIR_STRDUP, not strdup' \
|
2013-05-02 13:35:26 -06:00
|
|
|
$(_sc_search_regexp)
|
2010-08-18 17:31:39 -06:00
|
|
|
|
2011-06-22 16:18:01 -06:00
|
|
|
# Prefer virSetUIDGID.
|
|
|
|
|
sc_prohibit_setuid:
|
|
|
|
|
@prohibit='\<set(re)?[ug]id\> *\(' \
|
|
|
|
|
halt='use virSetUIDGID, not raw set*id' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-03-14 16:28:29 -06:00
|
|
|
# Don't compare *id_t against raw -1.
|
|
|
|
|
sc_prohibit_risky_id_promotion:
|
|
|
|
|
@prohibit='\b(user|group|[ug]id) *[=!]= *-' \
|
|
|
|
|
halt='cast -1 to ([ug]id_t) before comparing against id' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-08-18 17:31:39 -06:00
|
|
|
# Use snprintf rather than s'printf, even if buffer is provably large enough,
|
|
|
|
|
# since gnulib has more guarantees for snprintf portability
|
|
|
|
|
sc_prohibit_sprintf:
|
|
|
|
|
@prohibit='\<[s]printf\>' \
|
2016-04-11 17:00:26 +02:00
|
|
|
halt='use snprintf, not sprintf' \
|
2010-03-31 17:02:10 -06:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2009-12-21 14:14:46 -05:00
|
|
|
sc_prohibit_readlink:
|
2012-10-29 18:05:41 -04:00
|
|
|
@prohibit='\<readlink *\(' \
|
2010-03-31 17:02:10 -06:00
|
|
|
halt='use virFileResolveLink, not readlink' \
|
|
|
|
|
$(_sc_search_regexp)
|
2009-12-21 14:14:46 -05:00
|
|
|
|
2009-10-23 12:13:20 +02:00
|
|
|
sc_prohibit_gethostname:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='gethostname *\(' \
|
|
|
|
|
halt='use virGetHostname, not gethostname' \
|
|
|
|
|
$(_sc_search_regexp)
|
2009-10-23 12:13:20 +02:00
|
|
|
|
2014-04-21 16:33:15 -06:00
|
|
|
sc_prohibit_readdir:
|
2016-06-21 16:53:42 +02:00
|
|
|
@prohibit='\b(read|close|open)dir *\(' \
|
2014-04-21 16:33:15 -06:00
|
|
|
exclude='exempt from syntax-check' \
|
2016-06-21 16:53:42 +02:00
|
|
|
halt='use virDirOpen, virDirRead and VIR_DIR_CLOSE' \
|
2014-04-21 16:33:15 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-03-18 14:05:44 +01:00
|
|
|
sc_prohibit_gettext_noop:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='gettext_noop *\(' \
|
|
|
|
|
halt='use N_, not gettext_noop' \
|
|
|
|
|
$(_sc_search_regexp)
|
2010-03-18 14:05:44 +01:00
|
|
|
|
2009-07-06 18:28:10 +02:00
|
|
|
sc_prohibit_VIR_ERR_NO_MEMORY:
|
2016-04-11 17:00:26 +02:00
|
|
|
@prohibit='\<VIR_ERR_NO_MEMORY\>' \
|
|
|
|
|
halt='use virReportOOMError, not VIR_ERR_NO_MEMORY' \
|
2010-03-31 17:02:10 -06:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2012-05-25 14:14:07 +01:00
|
|
|
sc_prohibit_PATH_MAX:
|
2016-04-11 17:00:26 +02:00
|
|
|
@prohibit='\<PATH_MAX\>' \
|
|
|
|
|
halt='dynamically allocate paths, do not use PATH_MAX' \
|
2012-05-25 14:14:07 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2009-10-01 16:55:09 +02:00
|
|
|
include $(srcdir)/Makefile.nonreentrant
|
2009-07-06 18:28:10 +02:00
|
|
|
sc_prohibit_nonreentrant:
|
2016-06-14 14:27:51 +02:00
|
|
|
@prohibit="\\<(${NON_REENTRANT_RE}) *\\(" \
|
|
|
|
|
halt="use re-entrant functions (usually ending with _r)" \
|
|
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2013-05-13 14:43:20 +01:00
|
|
|
sc_prohibit_select:
|
2016-04-11 16:45:53 +02:00
|
|
|
@prohibit='\<select *\(' \
|
2016-04-11 17:00:26 +02:00
|
|
|
halt='use poll(), not select()' \
|
2013-05-13 14:43:20 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2009-07-06 18:28:10 +02:00
|
|
|
# Prohibit the inclusion of <ctype.h>.
|
|
|
|
|
sc_prohibit_ctype_h:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='^# *include *<ctype\.h>' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='use c-ctype.h instead of ctype.h' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2012-02-10 16:08:11 -07:00
|
|
|
# Insist on correct types for [pug]id.
|
|
|
|
|
sc_correct_id_types:
|
|
|
|
|
@prohibit='\<(int|long) *[pug]id\>' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='use pid_t for pid, uid_t for uid, gid_t for gid' \
|
2012-02-10 16:08:11 -07:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-09-24 10:41:54 -06:00
|
|
|
# "const fooPtr a" is the same as "foo * const a", even though it is
|
|
|
|
|
# usually desired to have "foo const *a". It's easier to just prevent
|
|
|
|
|
# the confusing mix of typedef vs. const placement.
|
2013-10-29 13:57:19 -06:00
|
|
|
# Also requires that all 'fooPtr' typedefs are actually pointers.
|
2013-09-24 10:41:54 -06:00
|
|
|
sc_forbid_const_pointer_typedef:
|
|
|
|
|
@prohibit='(^|[^"])const \w*Ptr' \
|
|
|
|
|
halt='"const fooPtr var" does not declare what you meant' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-10-29 13:57:19 -06:00
|
|
|
@prohibit='typedef [^(]+ [^*]\w*Ptr\b' \
|
|
|
|
|
halt='use correct style and type for Ptr typedefs' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-09-24 10:41:54 -06:00
|
|
|
|
2012-03-29 10:52:04 +01:00
|
|
|
# Forbid sizeof foo or sizeof (foo), require sizeof(foo)
|
|
|
|
|
sc_size_of_brackets:
|
|
|
|
|
@prohibit='sizeof\s' \
|
|
|
|
|
halt='use sizeof(foo), not sizeof (foo) or sizeof foo' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2011-02-04 11:16:35 -07:00
|
|
|
# Ensure that no C source file, docs, or rng schema uses TABs for
|
2010-04-05 10:17:31 -04:00
|
|
|
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
|
|
|
|
# files in gnulib, since they're imported.
|
2012-07-27 13:51:28 +01:00
|
|
|
space_indent_files=(\.(rng|s?[ch](\.in)?|html.in|py|pl|syms)|(daemon|tools)/.*\.in)
|
2009-07-06 18:28:10 +02:00
|
|
|
sc_TAB_in_indentation:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='^ * ' \
|
2011-03-14 08:36:26 -06:00
|
|
|
in_vc_files='$(space_indent_files)$$' \
|
2012-01-26 14:30:36 +00:00
|
|
|
halt='indent with space, not TAB, in C, sh, html, py, syms and RNG schemas' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
|
|
|
|
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
|
|
|
|
|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
|
|
|
|
|
|
|
|
|
|
sc_avoid_ctype_macros:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='\b($(ctype_re)) *\(' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='use c-ctype.h instead of ctype macros' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2011-03-30 20:26:27 -06:00
|
|
|
sc_avoid_strcase:
|
|
|
|
|
@prohibit='\bstrn?case(cmp|str) *\(' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='use c-strcase.h instead of raw strcase functions' \
|
2011-03-30 20:26:27 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2009-07-06 18:28:10 +02:00
|
|
|
sc_prohibit_virBufferAdd_with_string_literal:
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='\<virBufferAdd *\([^,]+, *"[^"]' \
|
|
|
|
|
halt='use virBufferAddLit, not virBufferAdd, with a string literal' \
|
|
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
|
2013-05-07 13:42:40 +02:00
|
|
|
sc_prohibit_virBufferAsprintf_with_string_literal:
|
|
|
|
|
@prohibit='\<virBufferAsprintf *\([^,]+, *"([^%"\]|\\.|%%)*"\)' \
|
|
|
|
|
halt='use virBufferAddLit, not virBufferAsprintf, with a string literal' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-03-12 18:05:31 -06:00
|
|
|
sc_forbid_manual_xml_indent:
|
|
|
|
|
@prohibit='virBuffer.*" +<' \
|
|
|
|
|
halt='use virBufferAdjustIndent instead of spaces when indenting xml' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-04-25 14:24:42 -06:00
|
|
|
# dirname and basename from <libgen.h> are not required to be thread-safe
|
|
|
|
|
sc_prohibit_libgen:
|
|
|
|
|
@prohibit='( (base|dir)name *\(|include .libgen\.h)' \
|
|
|
|
|
halt='use functions from gnulib "dirname.h", not <libgen.h>' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2010-11-24 13:08:55 -07:00
|
|
|
# raw xmlGetProp requires some nasty casts
|
|
|
|
|
sc_prohibit_xmlGetProp:
|
|
|
|
|
@prohibit='\<xmlGetProp *\(' \
|
|
|
|
|
halt='use virXMLPropString, not xmlGetProp' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2012-02-24 19:48:55 +01:00
|
|
|
# xml(ParseURI|SaveUri) doesn't handle IPv6 URIs well
|
|
|
|
|
sc_prohibit_xmlURI:
|
|
|
|
|
@prohibit='\<xml(ParseURI|SaveUri) *\(' \
|
|
|
|
|
halt='use virURI(Parse|Format), not xml(ParseURI|SaveUri)' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2012-03-23 08:34:09 +01:00
|
|
|
# we don't want old old-style return with parentheses around argument
|
|
|
|
|
sc_prohibit_return_as_function:
|
|
|
|
|
@prohibit='\<return *\(([^()]*(\([^()]*\)[^()]*)*)\) *;' \
|
|
|
|
|
halt='avoid extra () with return statements' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2011-07-08 15:58:28 -06:00
|
|
|
# ATTRIBUTE_UNUSED should only be applied in implementations, not
|
|
|
|
|
# header declarations
|
|
|
|
|
sc_avoid_attribute_unused_in_header:
|
|
|
|
|
@prohibit='^[^#]*ATTRIBUTE_UNUSED([^:]|$$)' \
|
|
|
|
|
in_vc_files='\.h$$' \
|
|
|
|
|
halt='use ATTRIBUTE_UNUSED in .c rather than .h files' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2015-04-14 07:37:41 -04:00
|
|
|
sc_prohibit_int_index:
|
|
|
|
|
@prohibit='\<(int|unsigned)\s*\*?index\>(\s|,|;)' \
|
|
|
|
|
halt='use different name than 'index' for declaration' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-07-08 15:17:29 +01:00
|
|
|
sc_prohibit_int_ijk:
|
2014-07-16 07:56:50 +02:00
|
|
|
@prohibit='\<(int|unsigned) ([^(=]* )*(i|j|k)\>(\s|,|;)' \
|
2016-01-28 16:46:32 +01:00
|
|
|
exclude='exempt from syntax-check' \
|
2013-07-08 15:17:29 +01:00
|
|
|
halt='use size_t, not int/unsigned int for loop vars i, j, k' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
|
|
sc_prohibit_loop_iijjkk:
|
2013-10-22 17:09:57 +01:00
|
|
|
@prohibit='\<(int|unsigned) ([^=]+ )*(ii|jj|kk)\>(\s|,|;)' \
|
2016-04-11 16:38:18 +02:00
|
|
|
halt='use i, j, k for loop iterators, not ii, jj, kk' \
|
2013-07-08 15:17:29 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-08-07 16:44:58 -06:00
|
|
|
# RHEL 5 gcc can't grok "for (int i..."
|
|
|
|
|
sc_prohibit_loop_var_decl:
|
|
|
|
|
@prohibit='\<for *\(\w+[ *]+\w+' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
|
halt='declare loop iterators outside the for statement' \
|
|
|
|
|
$(_sc_search_regexp)
|
2014-11-17 16:39:48 -07:00
|
|
|
|
|
|
|
|
# Use 'bool', not 'int', when assigning true or false
|
|
|
|
|
sc_prohibit_int_assign_bool:
|
|
|
|
|
@prohibit='\<int\>.*= *(true|false)' \
|
|
|
|
|
halt='use bool type for boolean values' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-07-08 15:17:29 +01:00
|
|
|
|
2016-10-06 16:54:41 +02:00
|
|
|
sc_prohibit_unsigned_pid:
|
|
|
|
|
@prohibit='\<unsigned\> [^,=;(]+pid' \
|
|
|
|
|
halt='use signed type for pid values' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2009-07-06 18:28:10 +02:00
|
|
|
# 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 =
|
2011-04-17 08:30:49 +02:00
|
|
|
msg_gen_function += VIR_ERROR
|
2009-07-06 18:28:10 +02:00
|
|
|
msg_gen_function += lxcError
|
|
|
|
|
msg_gen_function += regerror
|
2010-05-12 11:23:06 -06:00
|
|
|
msg_gen_function += vah_error
|
|
|
|
|
msg_gen_function += vah_warning
|
2011-04-17 08:30:49 +02:00
|
|
|
msg_gen_function += virGenericReportError
|
2009-07-06 18:28:10 +02:00
|
|
|
msg_gen_function += virRaiseError
|
2012-07-18 11:23:56 +01:00
|
|
|
msg_gen_function += virReportError
|
2009-07-06 18:28:10 +02:00
|
|
|
msg_gen_function += virReportErrorHelper
|
|
|
|
|
msg_gen_function += virReportSystemError
|
2010-03-31 12:24:25 +02:00
|
|
|
msg_gen_function += xenapiSessionErrorHandler
|
2009-07-06 18:28:10 +02:00
|
|
|
|
|
|
|
|
# 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 += vshPrint
|
|
|
|
|
# msg_gen_function += vshError
|
|
|
|
|
|
2016-06-16 12:05:35 +02:00
|
|
|
space =
|
|
|
|
|
space +=
|
|
|
|
|
func_re= ($(subst $(space),|,$(msg_gen_function)))
|
2009-07-06 18:28:10 +02:00
|
|
|
|
|
|
|
|
# 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:
|
2012-03-01 17:21:08 -07:00
|
|
|
@prohibit='\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' \
|
|
|
|
|
exclude='_\(' \
|
2012-09-04 17:40:04 -06:00
|
|
|
halt='found unmarked diagnostic(s)' \
|
2012-03-01 17:21:08 -07:00
|
|
|
$(_sc_search_regexp)
|
2009-07-06 18:28:10 +02:00
|
|
|
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
|
|
|
|
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
2014-05-11 12:25:44 +04:00
|
|
|
| $(SED) 's/_("\([^\"]\|\\.\)\+"//;s/[ ]"%s"//' \
|
2009-07-06 18:28:10 +02:00
|
|
|
| grep '[ ]"' && \
|
|
|
|
|
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
2009-07-07 18:08:45 +02:00
|
|
|
|
2010-05-20 11:13:41 +02:00
|
|
|
# Like the above, but prohibit a newline at the end of a diagnostic.
|
|
|
|
|
# This is subject to false positives partly because it naively looks for
|
|
|
|
|
# `\n"', which may not be the end of the string, and also because it takes
|
|
|
|
|
# two lines of context (the -A2) after the line with the function name.
|
|
|
|
|
# FIXME: this rule might benefit from a separate function list, in case
|
|
|
|
|
# there are functions to which this one applies but that do not get marked
|
|
|
|
|
# diagnostics.
|
|
|
|
|
sc_prohibit_newline_at_end_of_diagnostic:
|
|
|
|
|
@grep -A2 -nE \
|
|
|
|
|
'\<$(func_re) *\(' $$($(VC_LIST_EXCEPT)) \
|
|
|
|
|
| grep '\\n"' \
|
|
|
|
|
&& { echo '$(ME): newline at end of message(s)' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
|
|
|
|
|
2012-07-23 14:33:08 -06:00
|
|
|
# Look for diagnostics that lack a % in the format string, except that we
|
|
|
|
|
# allow VIR_ERROR to do this, and ignore functions that take a single
|
|
|
|
|
# string rather than a format argument.
|
|
|
|
|
sc_prohibit_diagnostic_without_format:
|
|
|
|
|
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
|
|
|
|
grep -A2 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
2014-05-11 12:25:44 +04:00
|
|
|
| $(SED) -rn -e ':l; /[,"]$$/ {N;b l;}' \
|
2012-07-23 14:33:08 -06:00
|
|
|
-e '/(xenapiSessionErrorHandler|vah_(error|warning))/d' \
|
|
|
|
|
-e '/\<$(func_re) *\([^"]*"([^%"]|"\n[^"]*")*"[,)]/p' \
|
|
|
|
|
| grep -vE 'VIR_ERROR' && \
|
|
|
|
|
{ echo '$(ME): found diagnostic without %' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
|
|
|
|
|
2012-07-10 15:43:08 -06:00
|
|
|
# The strings "" and "%s" should never be marked for translation.
|
2012-08-20 08:26:58 -06:00
|
|
|
# Files under tests/ and examples/ should not be translated.
|
2012-07-10 15:43:08 -06:00
|
|
|
sc_prohibit_useless_translation:
|
|
|
|
|
@prohibit='_\("(%s)?"\)' \
|
2012-08-20 08:26:58 -06:00
|
|
|
halt='found useless translation' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
@prohibit='\<N?_ *\(' \
|
2017-03-27 16:48:19 +02:00
|
|
|
in_vc_files='(tests|examples)/' \
|
2012-08-20 08:26:58 -06:00
|
|
|
halt='no translations in tests or examples' \
|
2012-07-10 15:43:08 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2012-09-12 10:54:42 -06:00
|
|
|
# When splitting a diagnostic across lines, ensure that there is a space
|
|
|
|
|
# or \n on one side of the split.
|
|
|
|
|
sc_require_whitespace_in_translation:
|
|
|
|
|
@grep -n -A1 '"$$' $$($(VC_LIST_EXCEPT)) \
|
2014-05-11 12:25:44 +04:00
|
|
|
| $(SED) -ne ':l; /"$$/ {N;b l;}; s/"\n[^"]*"/""/g; s/\\n/ /g' \
|
2012-09-12 10:54:42 -06:00
|
|
|
-e '/_(.*[^\ ]""[^\ ]/p' | grep . && \
|
|
|
|
|
{ echo '$(ME): missing whitespace at line split' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
|
|
|
|
|
2010-03-09 14:22:14 -07:00
|
|
|
# Enforce recommended preprocessor indentation style.
|
|
|
|
|
sc_preprocessor_indentation:
|
2010-05-10 14:17:10 -06:00
|
|
|
@if cppi --version >/dev/null 2>&1; then \
|
2014-10-23 13:54:31 +01:00
|
|
|
$(VC_LIST_EXCEPT) | grep -E '\.[ch](\.in)?$$' | xargs cppi -a -c \
|
2010-03-09 14:22:14 -07:00
|
|
|
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
|
|
|
|
exit 1; }; \
|
|
|
|
|
else \
|
|
|
|
|
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
|
|
|
|
|
fi
|
|
|
|
|
|
2013-01-09 13:50:03 -07:00
|
|
|
# Enforce similar spec file indentation style, by running cppi on a
|
|
|
|
|
# (comment-only) C file that mirrors the same layout as the spec file.
|
|
|
|
|
sc_spec_indentation:
|
|
|
|
|
@if cppi --version >/dev/null 2>&1; then \
|
|
|
|
|
for f in $$($(VC_LIST_EXCEPT) | grep '\.spec\.in$$'); do \
|
2014-05-11 12:25:44 +04:00
|
|
|
$(SED) -e 's|#|// #|; s|%ifn*\(arch\)* |#if a // |' \
|
2013-01-09 13:50:03 -07:00
|
|
|
-e 's/%\(else\|endif\|define\)/#\1/' \
|
|
|
|
|
-e 's/^\( *\)\1\1\1#/#\1/' \
|
|
|
|
|
-e 's|^\( *[^#/ ]\)|// \1|; s|^\( */[^/]\)|// \1|' $$f \
|
2014-05-11 12:25:44 +04:00
|
|
|
| cppi -a -c 2>&1 | $(SED) "s|standard input|$$f|"; \
|
2013-01-09 13:50:03 -07:00
|
|
|
done | { if grep . >&2; then false; else :; fi; } \
|
|
|
|
|
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
|
|
|
|
exit 1; }; \
|
|
|
|
|
else \
|
|
|
|
|
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
|
|
|
|
|
fi
|
|
|
|
|
|
2013-09-03 20:39:16 -06:00
|
|
|
# Nested conditionals are easier to understand if we enforce that endifs
|
|
|
|
|
# can be paired back to the if
|
|
|
|
|
sc_makefile_conditionals:
|
|
|
|
|
@prohibit='(else|endif)($$| *#)' \
|
|
|
|
|
in_vc_files='Makefile\.am' \
|
|
|
|
|
halt='match "if FOO" with "endif FOO" in Makefiles' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-07-17 11:47:01 -06:00
|
|
|
# Long lines can be harder to diff; too long, and git send-email chokes.
|
|
|
|
|
# For now, only enforce line length on files where we have intentionally
|
|
|
|
|
# fixed things and don't want to regress.
|
|
|
|
|
sc_prohibit_long_lines:
|
|
|
|
|
@prohibit='.{90}' \
|
|
|
|
|
in_vc_files='\.arg[sv]' \
|
|
|
|
|
halt='Wrap long lines in expected output files' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-07-18 09:37:52 -06:00
|
|
|
@prohibit='.{80}' \
|
|
|
|
|
in_vc_files='Makefile\.am' \
|
|
|
|
|
halt='Wrap long lines in Makefiles' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-07-17 11:47:01 -06:00
|
|
|
|
2010-03-18 11:25:01 -06:00
|
|
|
sc_copyright_format:
|
2010-03-31 17:02:10 -06:00
|
|
|
@require='Copyright .*Red 'Hat', Inc\.' \
|
|
|
|
|
containing='Copyright .*Red 'Hat \
|
|
|
|
|
halt='Red Hat copyright is missing Inc.' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2010-03-31 17:02:10 -06:00
|
|
|
@prohibit='Copyright [^(].*Red 'Hat \
|
|
|
|
|
halt='consistently use (C) in Red Hat copyright' \
|
2010-05-19 12:51:11 +02:00
|
|
|
$(_sc_search_regexp)
|
2016-04-11 17:00:26 +02:00
|
|
|
@prohibit='\<RedHat\>' \
|
2011-07-19 12:17:22 -06:00
|
|
|
halt='spell Red Hat as two words' \
|
|
|
|
|
$(_sc_search_regexp)
|
2010-05-19 12:51:11 +02:00
|
|
|
|
2012-07-26 16:58:02 -06:00
|
|
|
# Prefer the new URL listing over the old street address listing when
|
2013-05-14 17:41:15 -06:00
|
|
|
# calling out where to get a copy of the [L]GPL. Also, while we have
|
|
|
|
|
# to ship COPYING (GPL) alongside COPYING.LESSER (LGPL), we want any
|
|
|
|
|
# source file that calls out a top-level file to call out the LGPL
|
|
|
|
|
# version. Note that our typical copyright boilerplate refers to the
|
|
|
|
|
# license by name, not by reference to a top-level file.
|
|
|
|
|
sc_copyright_usage:
|
2012-07-26 16:58:02 -06:00
|
|
|
@prohibit=Boston,' MA' \
|
|
|
|
|
halt='Point to <http://www.gnu.org/licenses/>, not an address' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-05-14 17:41:15 -06:00
|
|
|
@require='COPYING\.LESSER' \
|
|
|
|
|
containing='COPYING' \
|
|
|
|
|
halt='Refer to COPYING.LESSER for LGPL' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
@prohibit='COPYING\.LIB' \
|
|
|
|
|
halt='Refer to COPYING.LESSER for LGPL' \
|
|
|
|
|
$(_sc_search_regexp)
|
2012-07-26 16:58:02 -06:00
|
|
|
|
2010-05-19 12:51:11 +02:00
|
|
|
# Some functions/macros produce messages intended solely for developers
|
|
|
|
|
# and maintainers. Do not mark them for translation.
|
|
|
|
|
sc_prohibit_gettext_markup:
|
2011-05-11 09:08:44 -06:00
|
|
|
@prohibit='\<VIR_(WARN|INFO|DEBUG) *\(_\(' \
|
2010-05-19 12:51:11 +02:00
|
|
|
halt='do not mark these strings for translation' \
|
|
|
|
|
$(_sc_search_regexp)
|
2010-03-18 11:25:01 -06:00
|
|
|
|
2012-03-01 17:21:08 -07:00
|
|
|
# Our code is divided into modular subdirectories for a reason, and
|
|
|
|
|
# lower-level code must not include higher-level headers.
|
|
|
|
|
cross_dirs=$(patsubst $(srcdir)/src/%.,%,$(wildcard $(srcdir)/src/*/.))
|
|
|
|
|
cross_dirs_re=($(subst / ,/|,$(cross_dirs)))
|
2015-11-03 11:13:25 +00:00
|
|
|
mid_dirs=access|conf|cpu|locking|logging|network|node_device|rpc|security|storage
|
2012-03-01 17:21:08 -07:00
|
|
|
sc_prohibit_cross_inclusion:
|
|
|
|
|
@for dir in $(cross_dirs); do \
|
|
|
|
|
case $$dir in \
|
|
|
|
|
util/) safe="util";; \
|
2014-03-25 14:04:12 -06:00
|
|
|
access/ | conf/) safe="($$dir|conf|util)";; \
|
|
|
|
|
locking/) safe="($$dir|util|conf|rpc)";; \
|
|
|
|
|
cpu/| network/| node_device/| rpc/| security/| storage/) \
|
2014-04-24 12:14:01 +02:00
|
|
|
safe="($$dir|util|conf|storage)";; \
|
2014-08-14 12:43:32 -06:00
|
|
|
xenapi/ | xenconfig/ ) safe="($$dir|util|conf|xen)";; \
|
2014-03-25 14:04:12 -06:00
|
|
|
*) safe="($$dir|$(mid_dirs)|util)";; \
|
2012-03-01 17:21:08 -07:00
|
|
|
esac; \
|
|
|
|
|
in_vc_files="^src/$$dir" \
|
|
|
|
|
prohibit='^# *include .$(cross_dirs_re)' \
|
|
|
|
|
exclude="# *include .$$safe" \
|
|
|
|
|
halt='unsafe cross-directory include' \
|
|
|
|
|
$(_sc_search_regexp) \
|
|
|
|
|
done
|
|
|
|
|
|
2012-01-20 14:00:58 -07:00
|
|
|
# When converting an enum to a string, make sure that we track any new
|
|
|
|
|
# elements added to the enum by using a _LAST marker.
|
|
|
|
|
sc_require_enum_last_marker:
|
|
|
|
|
@grep -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' $$($(VC_LIST_EXCEPT)) \
|
2014-05-11 12:25:44 +04:00
|
|
|
| $(SED) -ne '/VIR_ENUM_IMPL[^,]*,$$/N' \
|
2012-01-20 14:00:58 -07:00
|
|
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
|
|
|
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
|
|
|
|
|
| grep . && \
|
|
|
|
|
{ echo '$(ME): enum impl needs to use _LAST marker' 1>&2; \
|
|
|
|
|
exit 1; } || :
|
|
|
|
|
|
2013-02-07 08:01:52 +01:00
|
|
|
# In Python files we don't want to end lines with a semicolon like in C
|
|
|
|
|
sc_prohibit_semicolon_at_eol_in_python:
|
|
|
|
|
@prohibit='^[^#].*\;$$' \
|
|
|
|
|
in_vc_files='\.py$$' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='python does not require to end lines with a semicolon' \
|
2013-02-07 08:01:52 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-02-22 15:42:39 -07:00
|
|
|
# mymain() in test files should use return, not exit, for nicer output
|
|
|
|
|
sc_prohibit_exit_in_tests:
|
|
|
|
|
@prohibit='\<exit *\(' \
|
2017-03-27 16:48:19 +02:00
|
|
|
in_vc_files='tests/.*\.c$$' \
|
2013-02-22 15:42:39 -07:00
|
|
|
halt='use return, not exit(), in tests' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-04-17 18:19:18 +08:00
|
|
|
# Don't include "libvirt/*.h" in "" form.
|
2013-04-17 18:19:19 +08:00
|
|
|
sc_prohibit_include_public_headers_quote:
|
2013-04-17 18:19:18 +08:00
|
|
|
@prohibit='# *include *"libvirt/.*\.h"' \
|
2013-04-17 18:19:19 +08:00
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
|
halt='Do not include libvirt/*.h in internal source' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
|
|
# Don't include "libvirt/*.h" in <> form. Except for external tools,
|
|
|
|
|
# e.g. Python binding, examples and tools subdirectories.
|
|
|
|
|
sc_prohibit_include_public_headers_brackets:
|
|
|
|
|
@prohibit='# *include *<libvirt/.*\.h>' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
2013-04-17 18:19:18 +08:00
|
|
|
halt='Do not include libvirt/*.h in internal source' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-05-31 11:52:51 -06:00
|
|
|
# <config.h> is only needed in .c files; .h files do not need it since
|
|
|
|
|
# .c files must include config.h before any other .h.
|
|
|
|
|
sc_prohibit_config_h_in_headers:
|
|
|
|
|
@prohibit='^# *include\>.*config\.h' \
|
|
|
|
|
in_vc_files='\.h$$' \
|
|
|
|
|
halt='headers should not include <config.h>' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-08-19 15:17:20 +01:00
|
|
|
sc_prohibit_unbounded_arrays_in_rpc:
|
|
|
|
|
@prohibit='<>' \
|
|
|
|
|
in_vc_files='\.x$$' \
|
|
|
|
|
halt='Arrays in XDR must have a upper limit set for <NNN>' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-10-09 11:19:27 +01:00
|
|
|
sc_prohibit_getenv:
|
|
|
|
|
@prohibit='\b(secure_)?getenv *\(' \
|
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
|
halt='Use virGetEnv{Allow,Block}SUID instead of getenv' \
|
|
|
|
|
$(_sc_search_regexp)
|
2013-05-31 11:52:51 -06:00
|
|
|
|
2013-11-14 17:14:26 +01:00
|
|
|
sc_prohibit_atoi:
|
|
|
|
|
@prohibit='\bato(i|f|l|ll|q) *\(' \
|
|
|
|
|
halt='Use virStrToLong* instead of atoi, atol, atof, atoq, atoll' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-03-07 14:38:51 +01:00
|
|
|
sc_prohibit_wrong_filename_in_comment:
|
|
|
|
|
@fail=0; \
|
|
|
|
|
awk 'BEGIN { \
|
|
|
|
|
fail=0; \
|
|
|
|
|
} FNR < 3 { \
|
|
|
|
|
n=match($$0, /[[:space:]][^[:space:]]*[.][ch][[:space:]:]/); \
|
|
|
|
|
if (n > 0) { \
|
|
|
|
|
A=substr($$0, RSTART+1, RLENGTH-2); \
|
|
|
|
|
n=split(FILENAME, arr, "/"); \
|
|
|
|
|
if (A != arr[n]) { \
|
|
|
|
|
print "in " FILENAME ": " A " mentioned in comments "; \
|
|
|
|
|
fail=1; \
|
|
|
|
|
} \
|
|
|
|
|
} \
|
|
|
|
|
} END { \
|
|
|
|
|
if (fail == 1) { \
|
|
|
|
|
exit 1; \
|
|
|
|
|
} \
|
|
|
|
|
}' $$($(VC_LIST_EXCEPT) | grep '\.[ch]$$') || fail=1; \
|
|
|
|
|
if test $$fail -eq 1; then \
|
2014-03-18 13:15:31 +01:00
|
|
|
{ echo '$(ME): The file name in comments must match the' \
|
2014-03-07 14:38:51 +01:00
|
|
|
'actual file name' 1>&2; exit 1; } \
|
|
|
|
|
fi;
|
|
|
|
|
|
2014-03-07 11:15:39 +01:00
|
|
|
sc_prohibit_virConnectOpen_in_virsh:
|
2014-03-18 13:19:21 +01:00
|
|
|
@prohibit='\bvirConnectOpen[a-zA-Z]* *\(' \
|
2017-03-27 16:48:19 +02:00
|
|
|
in_vc_files='tools/virsh-.*\.[ch]$$' \
|
2014-03-18 13:19:21 +01:00
|
|
|
halt='Use vshConnect() in virsh instead of virConnectOpen*' \
|
2014-03-07 11:15:39 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-03-21 13:07:03 +01:00
|
|
|
sc_require_space_before_label:
|
|
|
|
|
@prohibit='^( ?)?[_a-zA-Z0-9]+:$$' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='Top-level labels should be indented by one space' \
|
2014-03-21 13:07:03 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2015-11-02 12:12:22 +01:00
|
|
|
# Allow for up to three spaces before the label: this is to avoid running
|
|
|
|
|
# into situations where neither this rule nor require_space_before_label
|
|
|
|
|
# would apply, eg. a line matching ^[a-zA-Z0-9]+ :$
|
|
|
|
|
sc_prohibit_space_in_label:
|
|
|
|
|
@prohibit='^ {0,3}[_a-zA-Z0-9]+ +:$$' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='There should be no space between label name and colon' \
|
2015-11-02 12:12:22 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-09-03 11:17:01 -06:00
|
|
|
# Doesn't catch all cases of mismatched braces across if-else, but it helps
|
|
|
|
|
sc_require_if_else_matching_braces:
|
|
|
|
|
@prohibit='( else( if .*\))? {|} else( if .*\))?$$)' \
|
|
|
|
|
in_vc_files='\.[chx]$$' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='if one side of if-else uses {}, both sides must use it' \
|
2014-09-03 11:17:01 -06:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2013-09-20 17:56:38 +02:00
|
|
|
sc_curly_braces_style:
|
2014-09-03 16:18:19 -06:00
|
|
|
@files=$$($(VC_LIST_EXCEPT) | grep '\.[ch]$$'); \
|
|
|
|
|
if $(GREP) -nHP \
|
|
|
|
|
'^\s*(?!([a-zA-Z_]*for_?each[a-zA-Z_]*) ?\()([_a-zA-Z0-9]+( [_a-zA-Z0-9]+)* ?\()?(\*?[_a-zA-Z0-9]+(,? \*?[_a-zA-Z0-9\[\]]+)+|void)\) ?\{' \
|
|
|
|
|
$$files; then \
|
|
|
|
|
echo '$(ME): Non-K&R style used for curly braces around' \
|
|
|
|
|
'function body, see HACKING' 1>&2; exit 1; \
|
|
|
|
|
fi; \
|
|
|
|
|
if $(GREP) -A1 -En ' ((if|for|while|switch) \(|(else|do)\b)[^{]*$$'\
|
|
|
|
|
$$files | $(GREP) '^[^ ]*- *{'; then \
|
|
|
|
|
echo '$(ME): Use hanging braces for compound statements,' \
|
|
|
|
|
'see HACKING' 1>&2; exit 1; \
|
|
|
|
|
fi
|
2013-11-14 17:14:26 +01:00
|
|
|
|
2014-03-29 12:16:38 +01:00
|
|
|
sc_prohibit_windows_special_chars_in_filename:
|
|
|
|
|
@files=$$($(VC_LIST_EXCEPT) | grep '[:*?"<>|]'); \
|
|
|
|
|
test -n "$$files" && { echo '$(ME): Windows special chars' \
|
|
|
|
|
'in filename not allowed:' 1>&2; echo $$files 1>&2; exit 1; } || :
|
|
|
|
|
|
2014-03-13 12:00:16 +00:00
|
|
|
sc_prohibit_mixed_case_abbreviations:
|
|
|
|
|
@prohibit='Pci|Usb|Scsi' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
|
halt='Use PCI, USB, SCSI, not Pci, Usb, Scsi' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-06-04 10:57:21 +02:00
|
|
|
# Require #include <locale.h> in all files that call setlocale()
|
|
|
|
|
sc_require_locale_h:
|
2014-06-04 11:07:59 -06:00
|
|
|
@require='include.*locale\.h' \
|
|
|
|
|
containing='setlocale *(' \
|
|
|
|
|
halt='setlocale() requires <locale.h>' \
|
|
|
|
|
$(_sc_search_regexp)
|
2014-06-04 10:57:21 +02:00
|
|
|
|
2014-03-18 11:29:12 +01:00
|
|
|
sc_prohibit_empty_first_line:
|
|
|
|
|
@awk 'BEGIN { fail=0; } \
|
|
|
|
|
FNR == 1 { if ($$0 == "") { print FILENAME ":1:"; fail=1; } } \
|
|
|
|
|
END { if (fail == 1) { \
|
|
|
|
|
print "$(ME): Prohibited empty first line" > "/dev/stderr"; \
|
|
|
|
|
} exit fail; }' $$($(VC_LIST_EXCEPT));
|
|
|
|
|
|
2014-08-20 13:00:30 +02:00
|
|
|
sc_prohibit_paren_brace:
|
|
|
|
|
@prohibit='\)\{$$' \
|
|
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
|
halt='Put space between closing parenthesis and opening brace' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-10-28 12:22:03 -06:00
|
|
|
# C guarantees that static variables are zero initialized, and some compilers
|
|
|
|
|
# waste space by sticking explicit initializers in .data instead of .bss
|
|
|
|
|
sc_prohibit_static_zero_init:
|
|
|
|
|
@prohibit='\bstatic\b.*= *(0[^xX0-9]|NULL|false)' \
|
|
|
|
|
in_vc_files='\.[chx](\.in)?$$' \
|
|
|
|
|
halt='static variables do not need explicit zero initialization'\
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-10-01 16:07:46 +02:00
|
|
|
# FreeBSD exports the "devname" symbol which produces a warning.
|
|
|
|
|
sc_prohibit_devname:
|
|
|
|
|
@prohibit='\bdevname\b' \
|
|
|
|
|
exclude='sc_prohibit_devname' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='avoid using devname as FreeBSD exports the symbol' \
|
2014-10-01 16:07:46 +02:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-11-28 09:37:42 +01:00
|
|
|
sc_prohibit_system_error_with_vir_err:
|
|
|
|
|
@prohibit='\bvirReportSystemError *\(VIR_ERR_' \
|
|
|
|
|
halt='do not use virReportSystemError with VIR_ERR_* error codes' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2014-11-30 09:57:02 -05:00
|
|
|
# Rule to prohibit usage of virXXXFree within library, daemon, remote, etc.
|
|
|
|
|
# functions. There's a corresponding exclude to allow usage within tests,
|
|
|
|
|
# docs, examples, tools, src/libvirt-*.c, and include/libvirt/libvirt-*.h
|
|
|
|
|
sc_prohibit_virXXXFree:
|
2014-12-01 07:30:16 -05:00
|
|
|
@prohibit='\bvir(Domain|Network|NodeDevice|StorageVol|StoragePool|Stream|Secret|NWFilter|Interface|DomainSnapshot)Free\b' \
|
2014-11-30 09:57:02 -05:00
|
|
|
exclude='sc_prohibit_virXXXFree' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='avoid using virXXXFree, use virObjectUnref instead' \
|
2014-11-30 09:57:02 -05:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2015-02-02 05:26:49 -05:00
|
|
|
sc_prohibit_sysconf_pagesize:
|
|
|
|
|
@prohibit='sysconf\(_SC_PAGESIZE' \
|
|
|
|
|
halt='use virGetSystemPageSize[KB] instead of sysconf(_SC_PAGESIZE)' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2017-02-13 14:36:53 +01:00
|
|
|
sc_prohibit_virSecurity:
|
2017-04-04 17:25:26 +02:00
|
|
|
@grep -Pn 'virSecurityManager(?!Ptr)' $$($(VC_LIST_EXCEPT) | grep 'src/qemu/' | \
|
|
|
|
|
grep -v 'src/qemu/qemu_security') && \
|
2017-02-13 14:36:53 +01:00
|
|
|
{ echo '$(ME): prefer qemuSecurity wrappers' 1>&2; exit 1; } || :
|
|
|
|
|
|
2015-03-20 16:25:15 +01:00
|
|
|
sc_prohibit_pthread_create:
|
|
|
|
|
@prohibit='\bpthread_create\b' \
|
|
|
|
|
exclude='sc_prohibit_pthread_create' \
|
2016-04-11 16:45:53 +02:00
|
|
|
halt='avoid using pthread_create, use virThreadCreate instead' \
|
2015-03-20 16:25:15 +01:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2015-10-20 21:45:12 +05:30
|
|
|
sc_prohibit_not_streq:
|
2016-06-16 14:16:43 +02:00
|
|
|
@prohibit='! *STRN?EQ *\(.*\)' \
|
|
|
|
|
halt='Use STRNEQ instead of !STREQ and STREQ instead of !STRNEQ' \
|
2015-10-20 21:45:12 +05:30
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2016-02-03 09:48:40 +01:00
|
|
|
sc_prohibit_verbose_strcat:
|
|
|
|
|
@prohibit='strncat\([^,]*,\s+([^,]*),\s+strlen\(\1\)\)' \
|
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
|
halt='Use strcat(a, b) instead of strncat(a, b, strlen(b))' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2016-04-12 18:29:52 -04:00
|
|
|
# Ensure that each .c file containing a "main" function also
|
|
|
|
|
# calls virGettextInitialize
|
|
|
|
|
sc_gettext_init:
|
|
|
|
|
@require='virGettextInitialize *\(' \
|
|
|
|
|
in_vc_files='\.c$$' \
|
|
|
|
|
containing='\<main *(' \
|
|
|
|
|
halt='the above files do not call virGettextInitialize' \
|
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2017-04-11 12:16:52 +02:00
|
|
|
sc_prohibit_obj_free_apis_in_virsh:
|
2017-04-11 17:21:05 +02:00
|
|
|
@prohibit='\bvir(Domain|DomainSnapshot)Free\b' \
|
2017-04-11 12:16:52 +02:00
|
|
|
in_vc_files='virsh.*\.[ch]$$' \
|
|
|
|
|
exclude='sc_prohibit_obj_free_apis_in_virsh' \
|
2017-04-11 17:21:05 +02:00
|
|
|
halt='avoid using virDomain(Snapshot)Free in virsh, use virsh-prefixed wrappers instead' \
|
2017-04-11 12:16:52 +02:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
2009-07-07 18:08:45 +02:00
|
|
|
# We don't use this feature of maint.mk.
|
|
|
|
|
prev_version_file = /dev/null
|
2009-07-10 10:01:04 +02:00
|
|
|
|
2014-06-04 15:48:20 -06:00
|
|
|
ifneq ($(_gl-Makefile),)
|
2009-07-10 10:01:04 +02:00
|
|
|
ifeq (0,$(MAKELEVEL))
|
2017-04-12 13:09:08 +02:00
|
|
|
_dry_run_result := $(shell \
|
|
|
|
|
cd '$(srcdir)'; \
|
|
|
|
|
test -d .git || test -f .git || { echo 0; exit; }; \
|
|
|
|
|
$(srcdir)/autogen.sh --dry-run >/dev/null 2>&1; \
|
|
|
|
|
echo $$?; \
|
|
|
|
|
)
|
2010-04-06 13:08:01 -06:00
|
|
|
_clean_requested = $(filter %clean,$(MAKECMDGOALS))
|
2017-04-12 13:09:08 +02:00
|
|
|
|
|
|
|
|
# A return value of 0 means no action is required
|
|
|
|
|
|
|
|
|
|
# A return value of 1 means a genuine error has occurred while
|
|
|
|
|
# performing the dry run, and it should be reported so it can
|
|
|
|
|
# be investigated
|
|
|
|
|
ifeq (1,$(_dry_run_result))
|
|
|
|
|
$(info INFO: autogen.sh error, running again to show details)
|
|
|
|
|
maint.mk Makefile: _autogen_error
|
|
|
|
|
endif
|
|
|
|
|
|
|
|
|
|
# A return value of 2 means that autogen.sh needs to be executed
|
|
|
|
|
# in earnest before building, probably because of gnulib updates.
|
|
|
|
|
# We don't run autogen.sh if the clean target has been invoked,
|
|
|
|
|
# though, as it would be quite pointless
|
|
|
|
|
ifeq (2,$(_dry_run_result)$(_clean_requested))
|
|
|
|
|
$(info INFO: running autogen.sh is required, running it now...)
|
2012-10-12 19:50:19 -04:00
|
|
|
$(shell touch $(srcdir)/AUTHORS $(srcdir)/ChangeLog)
|
2012-10-01 09:10:20 -06:00
|
|
|
maint.mk Makefile: _autogen
|
2009-07-10 10:01:04 +02:00
|
|
|
endif
|
|
|
|
|
endif
|
2014-06-04 15:48:20 -06:00
|
|
|
endif
|
2010-01-15 11:09:01 +01:00
|
|
|
|
2012-10-01 09:10:20 -06:00
|
|
|
# It is necessary to call autogen any time gnulib changes. Autogen
|
|
|
|
|
# reruns configure, then we regenerate all Makefiles at once.
|
|
|
|
|
.PHONY: _autogen
|
|
|
|
|
_autogen:
|
|
|
|
|
$(srcdir)/autogen.sh
|
|
|
|
|
./config.status
|
|
|
|
|
|
2017-04-12 13:09:08 +02:00
|
|
|
.PHONY: _autogen_error
|
|
|
|
|
_autogen_error:
|
|
|
|
|
$(srcdir)/autogen.sh --dry-run
|
|
|
|
|
|
2010-11-12 15:36:53 +01:00
|
|
|
# regenerate HACKING as part of the syntax-check
|
2014-06-04 15:48:20 -06:00
|
|
|
ifneq ($(_gl-Makefile),)
|
2016-06-15 18:01:24 +02:00
|
|
|
syntax-check: $(top_srcdir)/HACKING spacing-check test-wrap-argv \
|
2017-04-07 15:07:49 +01:00
|
|
|
prohibit-duplicate-header mock-noinline
|
2014-06-04 15:48:20 -06:00
|
|
|
endif
|
2012-10-17 10:25:35 +01:00
|
|
|
|
2016-06-15 18:01:24 +02:00
|
|
|
# Don't include duplicate header in the source (either *.c or *.h)
|
|
|
|
|
prohibit-duplicate-header:
|
|
|
|
|
$(AM_V_GEN)files=$$($(VC_LIST_EXCEPT) | grep '\.[chx]$$'); \
|
|
|
|
|
$(PERL) -W $(top_srcdir)/build-aux/prohibit-duplicate-header.pl $$files
|
|
|
|
|
|
2016-06-15 09:15:38 +02:00
|
|
|
spacing-check:
|
2012-10-17 10:25:35 +01:00
|
|
|
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.c$$'`; \
|
2016-06-15 09:15:38 +02:00
|
|
|
$(PERL) $(top_srcdir)/build-aux/check-spacing.pl $$files || \
|
2014-11-14 15:55:54 +01:00
|
|
|
{ echo '$(ME): incorrect formatting, see HACKING for rules' 1>&2; \
|
2013-05-24 10:43:45 -06:00
|
|
|
exit 1; }
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2017-04-07 15:07:49 +01:00
|
|
|
mock-noinline:
|
|
|
|
|
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.[ch]$$'`; \
|
|
|
|
|
$(PERL) $(top_srcdir)/build-aux/mock-noinline.pl $$files
|
|
|
|
|
|
2015-11-06 13:20:06 +00:00
|
|
|
test-wrap-argv:
|
|
|
|
|
$(AM_V_GEN)files=`$(VC_LIST) | grep -E '\.(ldargs|args)'`; \
|
2016-06-15 14:18:17 +02:00
|
|
|
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check $$files
|
2015-11-06 13:20:06 +00:00
|
|
|
|
2011-06-28 09:50:11 -06:00
|
|
|
# sc_po_check can fail if generated files are not built first
|
2011-07-12 10:52:56 -06:00
|
|
|
sc_po_check: \
|
|
|
|
|
$(srcdir)/daemon/remote_dispatch.h \
|
|
|
|
|
$(srcdir)/daemon/qemu_dispatch.h \
|
2015-04-16 14:23:16 +02:00
|
|
|
$(srcdir)/src/remote/remote_client_bodies.h \
|
2015-04-15 16:23:55 +02:00
|
|
|
$(srcdir)/daemon/admin_dispatch.h \
|
2015-04-16 14:23:16 +02:00
|
|
|
$(srcdir)/src/admin/admin_client.h
|
2011-07-12 10:52:56 -06:00
|
|
|
$(srcdir)/daemon/remote_dispatch.h: $(srcdir)/src/remote/remote_protocol.x
|
2011-06-28 09:50:11 -06:00
|
|
|
$(MAKE) -C daemon remote_dispatch.h
|
2011-07-12 10:52:56 -06:00
|
|
|
$(srcdir)/daemon/qemu_dispatch.h: $(srcdir)/src/remote/qemu_protocol.x
|
|
|
|
|
$(MAKE) -C daemon qemu_dispatch.h
|
|
|
|
|
$(srcdir)/src/remote/remote_client_bodies.h: $(srcdir)/src/remote/remote_protocol.x
|
2011-06-28 09:50:11 -06:00
|
|
|
$(MAKE) -C src remote/remote_client_bodies.h
|
2015-04-15 16:23:55 +02:00
|
|
|
$(srcdir)/daemon/admin_dispatch.h: $(srcdir)/src/admin/admin_protocol.x
|
|
|
|
|
$(MAKE) -C daemon admin_dispatch.h
|
2015-04-16 14:23:16 +02:00
|
|
|
$(srcdir)/src/admin/admin_client.h: $(srcdir)/src/admin/admin_protocol.x
|
|
|
|
|
$(MAKE) -C src admin/admin_client.h
|
2011-06-28 09:50:11 -06:00
|
|
|
|
2011-03-16 15:25:56 -06:00
|
|
|
# List all syntax-check exemptions:
|
2015-06-15 18:53:58 +02:00
|
|
|
exclude_file_name_regexp--sc_avoid_strcase = ^tools/vsh\.h$$
|
2011-03-30 20:26:27 -06:00
|
|
|
|
2017-03-07 10:34:47 +01:00
|
|
|
_src1=libvirt-stream|qemu/qemu_monitor|util/vir(command|file|fdstream)|xen/xend_internal|rpc/virnetsocket|lxc/lxc_controller|locking/lock_daemon|logging/log_daemon
|
2013-08-05 16:49:24 +01:00
|
|
|
_test1=shunloadtest|virnettlscontexttest|virnettlssessiontest|vircgroupmock
|
2011-03-16 15:25:56 -06:00
|
|
|
exclude_file_name_regexp--sc_avoid_write = \
|
2013-08-26 11:53:43 +02:00
|
|
|
^(src/($(_src1))|daemon/libvirtd|tools/virsh-console|tests/($(_test1)))\.c$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2016-04-12 18:29:52 -04:00
|
|
|
exclude_file_name_regexp--sc_bindtextdomain = .*
|
|
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_gettext_init = ^(tests|examples)/
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2016-04-11 17:00:26 +02:00
|
|
|
exclude_file_name_regexp--sc_copyright_format = \
|
|
|
|
|
^cfg\.mk$$
|
|
|
|
|
|
2013-05-14 17:41:15 -06:00
|
|
|
exclude_file_name_regexp--sc_copyright_usage = \
|
2013-05-14 17:25:02 -06:00
|
|
|
^COPYING(|\.LESSER)$$
|
2012-07-26 16:58:02 -06:00
|
|
|
|
2014-02-26 10:25:30 +01:00
|
|
|
exclude_file_name_regexp--sc_flags_usage = \
|
2016-05-13 14:08:29 +02:00
|
|
|
^(cfg\.mk|docs/|src/util/virnetdevtap\.c$$|tests/(vir(cgroup|pci|test|usb)|nss|qemuxml2argv)mock\.c$$)
|
2011-07-08 09:18:48 -06:00
|
|
|
|
2011-04-23 23:00:26 +02:00
|
|
|
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
|
2012-08-20 14:06:21 +01:00
|
|
|
^(src/rpc/gendispatch\.pl$$|tests/)
|
2011-04-23 23:00:26 +02:00
|
|
|
|
2010-12-10 12:27:33 +00:00
|
|
|
exclude_file_name_regexp--sc_po_check = ^(docs/|src/rpc/gendispatch\.pl$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_VIR_ERR_NO_MEMORY = \
|
2016-04-11 17:00:26 +02:00
|
|
|
^(cfg\.mk|include/libvirt/virterror\.h|daemon/dispatch\.c|src/util/virerror\.c|docs/internals/oomtesting\.html\.in)$$
|
|
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_PATH_MAX = \
|
|
|
|
|
^cfg\.mk$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2016-04-11 17:00:26 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_access_xok = \
|
|
|
|
|
^(cfg\.mk|src/util/virutil\.c)$$
|
2011-03-18 14:41:13 -06:00
|
|
|
|
2011-03-16 15:25:56 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_asprintf = \
|
2016-05-15 16:04:51 +02:00
|
|
|
^(cfg\.mk|bootstrap.conf$$|examples/|src/util/virstring\.[ch]$$|tests/vircgroupmock\.c$$)
|
2011-04-11 16:25:25 -06:00
|
|
|
|
2013-04-04 20:16:43 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strdup = \
|
2015-01-22 11:54:50 +01:00
|
|
|
^(docs/|examples/|src/util/virstring\.c|tests/vir(netserverclient|cgroup)mock.c$$)
|
2013-04-04 20:16:43 +02:00
|
|
|
|
2011-03-16 15:25:56 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_close = \
|
2016-02-11 13:51:26 +01:00
|
|
|
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/vir.+mock\.c)$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
|
2016-10-26 10:37:06 +02:00
|
|
|
(^tests/(qemuhelp|virhostcpu|virpcitest)data/|docs/js/.*\.js|docs/fonts/.*\.woff|\.diff|tests/virconfdata/no-newline\.conf$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2015-02-09 16:35:05 +00:00
|
|
|
_src2=src/(util/vircommand|libvirt|lxc/lxc_controller|locking/lock_daemon|logging/log_daemon)
|
2011-03-16 15:25:56 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
|
2011-07-08 09:13:53 -06:00
|
|
|
(^($(_src2)|tests/testutils|daemon/libvirtd)\.c$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2012-12-13 17:44:57 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_gethostname = ^src/util/virutil\.c$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2011-09-20 12:11:32 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_internal_functions = \
|
2012-12-13 17:44:57 +00:00
|
|
|
^src/(util/(viralloc|virutil|virfile)\.[hc]|esx/esx_vi\.c)$$
|
2011-09-20 12:11:32 -06:00
|
|
|
|
2011-04-23 23:00:26 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
|
2010-12-10 12:27:33 +00:00
|
|
|
^src/rpc/gendispatch\.pl$$
|
2011-04-23 23:00:26 +02:00
|
|
|
|
2011-03-16 15:25:56 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
2016-10-26 10:37:06 +02:00
|
|
|
^((po|tests)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2016-04-11 17:00:26 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_select = \
|
|
|
|
|
^cfg\.mk$$
|
|
|
|
|
|
2012-02-02 15:47:04 -07:00
|
|
|
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
2016-11-29 14:59:25 +01:00
|
|
|
^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock)\.c|tools/wireshark/src/packet-libvirt\.c)$$
|
2012-02-02 15:47:04 -07:00
|
|
|
|
2012-05-16 09:52:44 -06:00
|
|
|
exclude_file_name_regexp--sc_prohibit_readlink = \
|
2012-12-13 17:44:57 +00:00
|
|
|
^src/(util/virutil|lxc/lxc_container)\.c$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2012-12-13 17:44:57 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/virutil\.c$$
|
2011-06-22 16:18:01 -06:00
|
|
|
|
2011-09-30 14:40:23 +01:00
|
|
|
exclude_file_name_regexp--sc_prohibit_sprintf = \
|
2016-04-11 17:00:26 +02:00
|
|
|
^(cfg\.mk|docs/hacking\.html\.in|.*\.stp|.*\.pl)$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2013-04-03 12:36:23 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virstring\.c$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2016-05-15 16:04:51 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strtol = ^examples/.*$$
|
2012-04-18 18:06:59 -06:00
|
|
|
|
2012-12-13 18:13:21 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/virxml\.c$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2012-02-24 19:48:55 +01:00
|
|
|
exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
|
|
|
|
|
|
2012-03-23 08:34:09 +01:00
|
|
|
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
|
|
|
|
|
|
2013-05-31 11:52:51 -06:00
|
|
|
exclude_file_name_regexp--sc_require_config_h = \
|
|
|
|
|
^(examples/|tools/virsh-edit\.c$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2013-05-31 11:52:51 -06:00
|
|
|
exclude_file_name_regexp--sc_require_config_h_first = \
|
|
|
|
|
^(examples/|tools/virsh-edit\.c$$)
|
2011-03-16 15:25:56 -06:00
|
|
|
|
2012-04-26 12:11:49 +02:00
|
|
|
exclude_file_name_regexp--sc_trailing_blank = \
|
2016-04-13 18:53:02 +01:00
|
|
|
/qemuhelpdata/|/sysinfodata/.*\.data|/virhostcpudata/.*\.cpuinfo$$
|
2011-03-16 15:25:56 -06:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_unmarked_diagnostics = \
|
2016-10-26 10:37:06 +02:00
|
|
|
^(docs/apibuild.py|tests/virt-aa-helper-test|docs/js/.*\.js)$$
|
2012-03-29 10:52:04 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_size_of_brackets = cfg.mk
|
2011-07-06 17:20:04 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_correct_id_types = \
|
|
|
|
|
(^src/locking/lock_protocol.x$$)
|
2012-09-19 18:46:30 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4
|
2013-04-17 18:19:18 +08:00
|
|
|
|
2013-04-17 18:19:19 +08:00
|
|
|
exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \
|
2014-01-16 02:06:58 +09:00
|
|
|
^(src/internal\.h$$|tools/wireshark/src/packet-libvirt.h$$)
|
2013-04-17 18:19:19 +08:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \
|
2015-11-26 15:02:49 +01:00
|
|
|
^(tools/|examples/|include/libvirt/(virterror|libvirt(-(admin|qemu|lxc))?)\.h$$)
|
2013-07-08 15:17:29 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_int_ijk = \
|
2016-05-24 01:00:07 +02:00
|
|
|
^(src/remote_protocol-structs|src/remote/remote_protocol\.x|cfg\.mk|include/libvirt/libvirt.+|src/admin_protocol-structs|src/admin/admin_protocol\.x)$$
|
2013-10-09 11:19:27 +01:00
|
|
|
|
2016-10-06 16:54:41 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_unsigned_pid = \
|
|
|
|
|
^(include/libvirt/.*\.h|src/(qemu/qemu_driver\.c|driver-hypervisor\.h|libvirt(-[a-z]*)?\.c|.*\.x|util/vir(polkit|systemd)\.c)|tests/virpolkittest\.c|tools/virsh-domain\.c)$$
|
|
|
|
|
|
2013-10-09 11:19:27 +01:00
|
|
|
exclude_file_name_regexp--sc_prohibit_getenv = \
|
|
|
|
|
^tests/.*\.[ch]$$
|
2014-02-28 12:16:17 +00:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_avoid_attribute_unused_in_header = \
|
2015-04-27 13:25:51 +02:00
|
|
|
^(src/util/virlog\.h|src/network/bridge_driver\.h)$$
|
2014-03-13 12:00:16 +00:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_mixed_case_abbreviations = \
|
|
|
|
|
^src/(vbox/vbox_CAPI.*.h|esx/esx_vi.(c|h)|esx/esx_storage_backend_iscsi.c)$$
|
2014-03-18 11:29:12 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_empty_first_line = \
|
2016-10-31 13:39:34 +00:00
|
|
|
^(README|daemon/THREADS\.txt|src/esx/README|tests/(vmwarever|virhostcpu)data/.*)$$
|
2014-09-10 14:52:48 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_useless_translation = \
|
|
|
|
|
^tests/virpolkittest.c
|
2014-10-01 16:07:46 +02:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_devname = \
|
|
|
|
|
^(tools/virsh.pod|cfg.mk|docs/.*)$$
|
2014-11-30 09:57:02 -05:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_virXXXFree = \
|
2014-12-01 07:30:16 -05:00
|
|
|
^(docs/|tests/|examples/|tools/|cfg.mk|src/test/test_driver.c|src/libvirt_public.syms|include/libvirt/libvirt-(domain|network|nodedev|storage|stream|secret|nwfilter|interface|domain-snapshot).h|src/libvirt-(domain|qemu|network|nodedev|storage|stream|secret|nwfilter|interface|domain-snapshot).c$$)
|
2015-02-02 05:26:49 -05:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_sysconf_pagesize = \
|
|
|
|
|
^(cfg\.mk|src/util/virutil\.c)$$
|
2015-03-20 16:25:15 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_pthread_create = \
|
|
|
|
|
^(cfg\.mk|src/util/virthread\.c|tests/.*)$$
|
2015-10-20 21:45:12 +05:30
|
|
|
|
2016-05-17 16:26:53 +02:00
|
|
|
exclude_file_name_regexp--sc_prohibit_always-defined_macros = \
|
|
|
|
|
^tests/virtestmock.c$$
|
2016-06-21 16:53:42 +02:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_readdir = \
|
|
|
|
|
^tests/.*mock\.c$$
|
2017-02-20 14:54:12 +01:00
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_cross_inclusion = \
|
|
|
|
|
^(src/util/virclosecallbacks\.h|src/util/virhostdev\.h)$$
|