2008-01-29 17:42:39 +00:00
|
|
|
# Customize Makefile.maint. -*- makefile -*-
|
2019-01-03 15:31:37 +00:00
|
|
|
# Copyright (C) 2008-2019 Red Hat, Inc.
|
2011-01-07 00:17:32 +00: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 22:58:02 +00: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 20:39:40 +00:00
|
|
|
# We use .gnulib, not gnulib.
|
|
|
|
gnulib_dir = $(srcdir)/.gnulib
|
|
|
|
|
2011-05-04 14:18:06 +00: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 = \
|
2018-02-20 13:16:28 +00:00
|
|
|
$(srcdir)/src/*/{remote_daemon,admin_server,log_daemon,lock_daemon}_dispatch_*stubs.h \
|
2018-01-19 11:30:31 +00:00
|
|
|
$(srcdir)/src/lxc/{lxc_monitor,lxc_controller}_dispatch.h \
|
2011-05-04 14:18:06 +00:00
|
|
|
$(srcdir)/src/remote/*_client_bodies.h \
|
2013-09-07 21:22:18 +00:00
|
|
|
$(srcdir)/src/*/*_protocol.[ch] \
|
2011-05-04 14:18:06 +00:00
|
|
|
$(srcdir)/gnulib/lib/*.[ch]
|
|
|
|
|
2011-11-29 23:42:23 +00: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".
|
2017-11-03 12:09:47 +00:00
|
|
|
local-checks-to-skip = \
|
|
|
|
changelog-check \
|
|
|
|
makefile-check \
|
|
|
|
makefile_path_separator_check \
|
|
|
|
patch-check \
|
|
|
|
sc_GPL_version \
|
|
|
|
sc_always_defined_macros \
|
|
|
|
sc_cast_of_alloca_return_value \
|
|
|
|
sc_cross_check_PATH_usage_in_tests \
|
|
|
|
sc_dd_max_sym_length \
|
|
|
|
sc_error_exit_success \
|
|
|
|
sc_file_system \
|
|
|
|
sc_immutable_NEWS \
|
|
|
|
sc_makefile_path_separator_check \
|
|
|
|
sc_obsolete_symbols \
|
|
|
|
sc_prohibit_S_IS_definition \
|
|
|
|
sc_prohibit_atoi_atof \
|
|
|
|
sc_prohibit_hash_without_use \
|
|
|
|
sc_prohibit_jm_in_m4 \
|
|
|
|
sc_prohibit_quote_without_use \
|
|
|
|
sc_prohibit_quotearg_without_use \
|
|
|
|
sc_prohibit_stat_st_blocks \
|
|
|
|
sc_prohibit_undesirable_word_seq \
|
|
|
|
sc_root_tests \
|
|
|
|
sc_space_tab \
|
|
|
|
sc_sun_os_names \
|
|
|
|
sc_system_h_headers \
|
|
|
|
sc_texinfo_acronym \
|
|
|
|
sc_tight_scope \
|
|
|
|
sc_two_space_separator_in_usage \
|
|
|
|
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 15:37:07 +00: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 22:18:44 +00:00
|
|
|
distdir: sc_vulnerable_makefile_CVE-2012-3386.z
|
2012-07-10 15:37:07 +00:00
|
|
|
endif
|
|
|
|
|
2010-11-30 20:29:19 +00:00
|
|
|
# Files that should never cause syntax check failures.
|
2011-07-08 15:13:53 +00:00
|
|
|
VC_LIST_ALWAYS_EXCLUDE_REGEX = \
|
2017-06-26 06:45:44 +00:00
|
|
|
(^(docs/(news(-[0-9]*)?\.html\.in|.*\.patch))|\.(po|fig|gif|ico|png))$$
|
2010-11-30 20:29:19 +00:00
|
|
|
|
|
|
|
# Functions like free() that are no-ops on NULL arguments.
|
2017-11-03 12:09:47 +00:00
|
|
|
useless_free_options = \
|
|
|
|
--name=VBOX_UTF16_FREE \
|
|
|
|
--name=VBOX_UTF8_FREE \
|
|
|
|
--name=VBOX_COM_UNALLOC_MEM \
|
|
|
|
--name=VIR_FREE \
|
|
|
|
--name=qemuCapsFree \
|
|
|
|
--name=qemuMigrationCookieFree \
|
|
|
|
--name=qemuMigrationCookieGraphicsFree \
|
|
|
|
--name=sexpr_free \
|
|
|
|
--name=usbFreeDevice \
|
|
|
|
--name=virBandwidthDefFree \
|
|
|
|
--name=virBitmapFree \
|
|
|
|
--name=virCPUDefFree \
|
|
|
|
--name=virCapabilitiesFree \
|
|
|
|
--name=virCapabilitiesFreeGuest \
|
|
|
|
--name=virCapabilitiesFreeGuestDomain \
|
|
|
|
--name=virCapabilitiesFreeGuestFeature \
|
|
|
|
--name=virCapabilitiesFreeGuestMachine \
|
|
|
|
--name=virCapabilitiesFreeHostNUMACell \
|
|
|
|
--name=virCapabilitiesFreeMachines \
|
|
|
|
--name=virCgroupFree \
|
|
|
|
--name=virCommandFree \
|
|
|
|
--name=virConfFreeList \
|
|
|
|
--name=virConfFreeValue \
|
|
|
|
--name=virDomainActualNetDefFree \
|
|
|
|
--name=virDomainChrDefFree \
|
|
|
|
--name=virDomainControllerDefFree \
|
|
|
|
--name=virDomainDefFree \
|
|
|
|
--name=virDomainDeviceDefFree \
|
|
|
|
--name=virDomainDiskDefFree \
|
|
|
|
--name=virDomainEventCallbackListFree \
|
|
|
|
--name=virObjectEventQueueFree \
|
|
|
|
--name=virDomainFSDefFree \
|
|
|
|
--name=virDomainGraphicsDefFree \
|
|
|
|
--name=virDomainHostdevDefFree \
|
|
|
|
--name=virDomainInputDefFree \
|
|
|
|
--name=virDomainNetDefFree \
|
|
|
|
--name=virDomainObjFree \
|
|
|
|
--name=virDomainSmartcardDefFree \
|
|
|
|
--name=virDomainSnapshotObjFree \
|
|
|
|
--name=virDomainSoundDefFree \
|
|
|
|
--name=virDomainVideoDefFree \
|
|
|
|
--name=virDomainWatchdogDefFree \
|
|
|
|
--name=virFileDirectFdFree \
|
|
|
|
--name=virHashFree \
|
|
|
|
--name=virInterfaceDefFree \
|
|
|
|
--name=virInterfaceIpDefFree \
|
|
|
|
--name=virInterfaceObjFree \
|
|
|
|
--name=virInterfaceProtocolDefFree \
|
|
|
|
--name=virJSONValueFree \
|
|
|
|
--name=virLastErrFreeData \
|
|
|
|
--name=virNetMessageFree \
|
|
|
|
--name=virNWFilterDefFree \
|
|
|
|
--name=virNWFilterEntryFree \
|
|
|
|
--name=virNWFilterHashTableFree \
|
|
|
|
--name=virNWFilterIPAddrLearnReqFree \
|
|
|
|
--name=virNWFilterIncludeDefFree \
|
|
|
|
--name=virNWFilterObjFree \
|
|
|
|
--name=virNWFilterRuleDefFree \
|
|
|
|
--name=virNWFilterRuleInstFree \
|
|
|
|
--name=virNetworkDefFree \
|
|
|
|
--name=virNodeDeviceDefFree \
|
|
|
|
--name=virNodeDeviceObjFree \
|
|
|
|
--name=virObjectUnref \
|
|
|
|
--name=virObjectFreeCallback \
|
|
|
|
--name=virPCIDeviceFree \
|
|
|
|
--name=virSecretDefFree \
|
|
|
|
--name=virStorageEncryptionFree \
|
|
|
|
--name=virStorageEncryptionSecretFree \
|
|
|
|
--name=virStorageFileFreeMetadata \
|
|
|
|
--name=virStoragePoolDefFree \
|
|
|
|
--name=virStoragePoolObjFree \
|
|
|
|
--name=virStoragePoolSourceFree \
|
|
|
|
--name=virStorageVolDefFree \
|
|
|
|
--name=virThreadPoolFree \
|
|
|
|
--name=xmlBufferFree \
|
|
|
|
--name=xmlFree \
|
|
|
|
--name=xmlFreeDoc \
|
|
|
|
--name=xmlFreeNode \
|
|
|
|
--name=xmlXPathFreeContext \
|
2008-02-07 16:49:29 +00:00
|
|
|
--name=xmlXPathFreeObject
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2010-05-17 20:38:59 +00: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
|
|
|
|
# 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 18:11:32 +00:00
|
|
|
# n virFree - dereferences param
|
2010-05-17 20:38:59 +00: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 15:06:52 +00:00
|
|
|
# n virNWFilterFreeName (returns int)
|
|
|
|
# y virNWFilterObjFree
|
|
|
|
# n virNWFilterObjListFree FIXME
|
2010-05-17 20:38:59 +00: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
|
|
|
|
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
# Avoid uses of write(2). Either switch to streams (fwrite), or use
|
|
|
|
# the safewrite wrapper.
|
|
|
|
sc_avoid_write:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<write *\(' \
|
|
|
|
in_vc_files='\.c$$' \
|
|
|
|
halt='consider using safewrite instead of write' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2011-07-08 15:18:48 +00:00
|
|
|
# In debug statements, print flags as bitmask and mode_t as octal.
|
|
|
|
sc_flags_debug:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<mode=%[0-9.]*[diuxo]' \
|
|
|
|
halt='use \"0%o\" to debug mode_t values' \
|
2011-07-08 15:18:48 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='[Ff]lags=%[0-9.]*l*[dioux]' \
|
|
|
|
halt='use \"0x%x\" to debug flag values' \
|
2011-07-07 17:57:43 +00:00
|
|
|
$(_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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@test "$$(cat $(srcdir)/include/libvirt/libvirt-domain.h \
|
|
|
|
$(srcdir)/include/libvirt/virterror.h \
|
|
|
|
$(srcdir)/include/libvirt/libvirt-qemu.h \
|
|
|
|
$(srcdir)/include/libvirt/libvirt-lxc.h \
|
|
|
|
$(srcdir)/include/libvirt/libvirt-admin.h \
|
2019-01-03 15:31:37 +00:00
|
|
|
| $(GREP) -c '\(long\|unsigned\) flags')" != 4 && \
|
2017-11-03 12:09:47 +00:00
|
|
|
{ echo '$(ME): new API should use "unsigned int flags"' 1>&2; \
|
2011-07-07 17:57:43 +00:00
|
|
|
exit 1; } || :
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit=' flags ATTRIBUTE_UNUSED' \
|
2019-01-23 10:50:33 +00:00
|
|
|
exclude='virSecurityDomainImageLabelFlags' \
|
2017-11-03 12:09:47 +00:00
|
|
|
halt='flags should be checked with virCheckFlags' \
|
2011-07-07 17:57:43 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^[^@]*([^d] (int|long long)|[^dg] long) flags[;,)]' \
|
|
|
|
halt='flags should be unsigned' \
|
2011-07-08 15:18:48 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2011-09-20 18:11:32 +00:00
|
|
|
# Avoid functions that should only be called via macro counterparts.
|
|
|
|
sc_prohibit_internal_functions:
|
util: add VIR_(APPEND|INSERT|DELETE)_ELEMENT
I noticed when writing the backend functions for virNetworkUpdate that
I was repeating the same sequence of memmove, VIR_REALLOC, nXXX-- (and
messed up the args to memmove at least once), and had seen the same
sequence in a lot of other places, so I decided to write a few
utility functions/macros - see the .h file for full documentation.
The intent is to reduce the number of lines of code, but more
importantly to eliminate the need to check the element size and
element count arithmetic every time we need to do this (I *always*
make at least one mistake.)
VIR_INSERT_ELEMENT: insert one element at an arbitrary index within an
array of objects. The size of each object is determined
automatically by the macro using sizeof(*array). The new element's
contents are copied into the inserted space, then the original copy
of contents are 0'ed out (if everything else was
successful). Compile-time assignment and size compatibility between
the array and the new element is guaranteed (see explanation below
[*])
VIR_INSERT_ELEMENT_COPY: identical to VIR_INSERT_ELEMENT, except that
the original contents of newelem are not cleared to 0 (i.e. a copy
is made).
VIR_APPEND_ELEMENT: This is just a special case of VIR_INSERT_ELEMENT
that "inserts" one past the current last element.
VIR_APPEND_ELEMENT_COPY: identical to VIR_APPEND_ELEMENT, except that
the original contents of newelem are not cleared to 0 (i.e. a copy
is made).
VIR_DELETE_ELEMENT: delete one element at an arbitrary index within an
array of objects. It's assumed that the element being deleted is
already saved elsewhere (or cleared, if that's what is appropriate).
All five of these macros have an _INPLACE variant, which skips the
memory re-allocation of the array, assuming that the caller has
already done it (when inserting) or will do it later (when deleting).
Note that VIR_DELETE_ELEMENT* can return a failure, but only if an
invalid index is given (index + amount to delete is > current array
size), so in most cases you can safely ignore the return (that's why
the helper function virDeleteElementsN isn't declared with
ATTRIBUTE_RETURN_CHECK). A warning is logged if this ever happens,
since it is surely a coding error.
[*] One initial problem with the INSERT and APPEND macros was that,
due to both the array pointer and newelem pointer being cast to void*
when passing to virInsertElementsN(), any chance of type-checking was
lost. If we were going to move in newelem with a memmove anyway, we
would be no worse off for this. However, most current open-coded
insert/append operations use direct struct assignment to move the new
element into place (or just populate the new element directly) - thus
use of the new macros would open a possibility for new usage errors
that didn't exist before (e.g. accidentally sending &newelemptr rather
than newelemptr - I actually did this quite a lot in my test
conversions of existing code).
But thanks to Eric Blake's clever thinking, I was able to modify the
INSERT and APPEND macros so that they *do* check for both assignment
and size compatibility of *ptr (an element in the array) and newelem
(the element being copied into the new position of the array). This is
done via clever use of the C89-guaranteed fact that the sizeof()
operator must have *no* side effects (so an assignment inside sizeof()
is checked for validity, but not actually evaluated), and the fact
that virInsertElementsN has a "# of new elements" argument that we
want to always be 1.
2012-10-08 17:33:35 +00:00
|
|
|
@prohibit='vir(Free|AllocN?|ReallocN|(Insert|Delete)ElementsN|File(Close|Fclose|Fdopen)) *\(' \
|
2017-11-03 12:09:47 +00:00
|
|
|
halt='use VIR_ macros instead of internal functions' \
|
2011-09-20 18:11:32 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2018-04-13 14:41:17 +00:00
|
|
|
sc_prohibit_raw_virclassnew:
|
|
|
|
@prohibit='virClassNew *\(' \
|
|
|
|
halt='use VIR_CLASS_NEW instead of virClassNew' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2012-02-02 22:47:04 +00:00
|
|
|
# Avoid raw malloc and free, except in documentation comments.
|
|
|
|
sc_prohibit_raw_allocation:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^.[^*].*\<((m|c|re)alloc|free) *\([^)]' \
|
|
|
|
halt='use VIR_ macros from viralloc.h instead of malloc/free' \
|
2012-02-02 22:47:04 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-11-20 00:25:23 +00:00
|
|
|
# Avoid functions that can lead to double-close bugs.
|
|
|
|
sc_prohibit_close:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='([^>.]|^)\<[fp]?close *\(' \
|
|
|
|
halt='use VIR_{FORCE_}[F]CLOSE instead of [f]close' \
|
2010-11-20 00:25:23 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<fdopen *\(' \
|
|
|
|
halt='use VIR_FDOPEN instead of fdopen' \
|
2010-11-20 00:25:23 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
maint: reject raw close, popen in 'make syntax-check'
commit f1fe9671e was supposed to make sure we use files.h
macros to avoid double close, but it didn't work.
Meanwhile, virCommand is vastly superior to system(), fork(),
and popen() (also to virExec, but we haven't completed that
conversion), so enforce that, too.
* cfg.mk (sc_prohibit_close): Fix typo that excluded close, and
add pclose.
(sc_prohibit_fork_wrappers): New rule, for fork, system, and popen.
* .x-sc_prohibit_close: More exemptions.
* .x-sc_prohibit_fork_wrappers: New file.
* Makefile.am (syntax_check_exceptions): Ship new file.
* src/datatypes.c (virReleaseConnect): Tweak comment to avoid
false positive.
* src/util/files.h (VIR_CLOSE): Likewise.
2011-01-27 22:16:14 +00:00
|
|
|
# Prefer virCommand for all child processes.
|
|
|
|
sc_prohibit_fork_wrappers:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='= *\<(fork|popen|system) *\(' \
|
|
|
|
halt='use virCommand for child processes' \
|
maint: reject raw close, popen in 'make syntax-check'
commit f1fe9671e was supposed to make sure we use files.h
macros to avoid double close, but it didn't work.
Meanwhile, virCommand is vastly superior to system(), fork(),
and popen() (also to virExec, but we haven't completed that
conversion), so enforce that, too.
* cfg.mk (sc_prohibit_close): Fix typo that excluded close, and
add pclose.
(sc_prohibit_fork_wrappers): New rule, for fork, system, and popen.
* .x-sc_prohibit_close: More exemptions.
* .x-sc_prohibit_fork_wrappers: New file.
* Makefile.am (syntax_check_exceptions): Ship new file.
* src/datatypes.c (virReleaseConnect): Tweak comment to avoid
false positive.
* src/util/files.h (VIR_CLOSE): Likewise.
2011-01-27 22:16:14 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2012-10-31 14:13:47 +00:00
|
|
|
# Prefer mkostemp with O_CLOEXEC.
|
|
|
|
sc_prohibit_mkstemp:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='[^"]\<mkstemps? *\(' \
|
|
|
|
halt='use mkostemp with O_CLOEXEC instead of mkstemp' \
|
2012-10-31 14:13:47 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2011-03-18 20:41:13 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='access(at)? *\(.*X_OK' \
|
|
|
|
halt='use virFileIsExecutable instead of access(,X_OK)' \
|
2011-03-18 20:41:13 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-11-17 23:41:31 +00: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 19:01:15 +00:00
|
|
|
snp_ = strncmp *\(.+\)
|
2010-11-17 23:41:31 +00:00
|
|
|
sc_prohibit_strncmp:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='! *strncmp *\(|\<$(snp_) *[!=]=|[!=]= *$(snp_)' \
|
|
|
|
exclude=':# *define STR(N?EQLEN|PREFIX)\(' \
|
|
|
|
halt='use STREQLEN or STRPREFIX instead of strncmp' \
|
2012-03-02 00:21:08 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2012-04-19 00:06:59 +00:00
|
|
|
# strtol and friends are too easy to misuse
|
|
|
|
sc_prohibit_strtol:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bstrto(u?ll?|[ui]max) *\(' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='use virStrToLong_*, not strtol variants' \
|
2012-04-19 00:06:59 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bstrto[df] *\(' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='use virStrToDouble, not strtod variants' \
|
2012-04-19 00:06:59 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-08-18 23:31:39 +00:00
|
|
|
# Use virAsprintf rather than as'printf since *strp is undefined on error.
|
2013-05-02 19:35:26 +00:00
|
|
|
# But for plain %s, virAsprintf is overkill compared to strdup.
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
sc_prohibit_asprintf:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<v?a[s]printf\>' \
|
|
|
|
halt='use virAsprintf, not asprintf' \
|
2010-08-18 23:31:39 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='virAsprintf.*, *"%s",' \
|
|
|
|
halt='use VIR_STRDUP instead of virAsprintf with "%s"' \
|
2013-04-04 18:16:43 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
sc_prohibit_strdup:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<strn?dup\> *\(' \
|
|
|
|
halt='use VIR_STRDUP, not strdup' \
|
2013-05-02 19:35:26 +00:00
|
|
|
$(_sc_search_regexp)
|
2010-08-18 23:31:39 +00:00
|
|
|
|
2011-06-22 22:18:01 +00:00
|
|
|
# Prefer virSetUIDGID.
|
|
|
|
sc_prohibit_setuid:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<set(re)?[ug]id\> *\(' \
|
|
|
|
halt='use virSetUIDGID, not raw set*id' \
|
2011-06-22 22:18:01 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-03-14 22:28:29 +00:00
|
|
|
# Don't compare *id_t against raw -1.
|
|
|
|
sc_prohibit_risky_id_promotion:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\b(user|group|[ug]id) *[=!]= *-' \
|
|
|
|
halt='cast -1 to ([ug]id_t) before comparing against id' \
|
2013-03-14 22:28:29 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-08-18 23:31:39 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<[s]printf\>' \
|
|
|
|
halt='use snprintf, not sprintf' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2009-12-21 19:14:46 +00:00
|
|
|
sc_prohibit_readlink:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<readlink *\(' \
|
|
|
|
halt='use virFileResolveLink, not readlink' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
$(_sc_search_regexp)
|
2009-12-21 19:14:46 +00:00
|
|
|
|
2009-10-23 10:13:20 +00:00
|
|
|
sc_prohibit_gethostname:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='gethostname *\(' \
|
|
|
|
halt='use virGetHostname, not gethostname' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
$(_sc_search_regexp)
|
2009-10-23 10:13:20 +00:00
|
|
|
|
2014-04-21 22:33:15 +00:00
|
|
|
sc_prohibit_readdir:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\b(read|close|open)dir *\(' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='use virDirOpen, virDirRead and VIR_DIR_CLOSE' \
|
2014-04-21 22:33:15 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-03-18 13:05:44 +00:00
|
|
|
sc_prohibit_gettext_noop:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='gettext_noop *\(' \
|
|
|
|
halt='use N_, not gettext_noop' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
$(_sc_search_regexp)
|
2010-03-18 13:05:44 +00:00
|
|
|
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
sc_prohibit_VIR_ERR_NO_MEMORY:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<VIR_ERR_NO_MEMORY\>' \
|
|
|
|
halt='use virReportOOMError, not VIR_ERR_NO_MEMORY' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2012-05-25 13:14:07 +00:00
|
|
|
sc_prohibit_PATH_MAX:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<PATH_MAX\>' \
|
|
|
|
halt='dynamically allocate paths, do not use PATH_MAX' \
|
2012-05-25 13:14:07 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2009-10-01 14:55:09 +00:00
|
|
|
include $(srcdir)/Makefile.nonreentrant
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
sc_prohibit_nonreentrant:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit="\\<(${NON_REENTRANT_RE}) *\\(" \
|
|
|
|
halt="use re-entrant functions (usually ending with _r)" \
|
2016-06-14 12:27:51 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2013-05-13 13:43:20 +00:00
|
|
|
sc_prohibit_select:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<select *\(' \
|
|
|
|
halt='use poll(), not select()' \
|
2013-05-13 13:43:20 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
# Prohibit the inclusion of <ctype.h>.
|
|
|
|
sc_prohibit_ctype_h:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^# *include *<ctype\.h>' \
|
|
|
|
halt='use c-ctype.h instead of ctype.h' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2018-04-30 14:55:57 +00:00
|
|
|
# We have our own wrapper for mocking purposes
|
|
|
|
sc_prohibit_canonicalize_file_name:
|
|
|
|
@prohibit='\<canonicalize_file_name\(' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='use virFileCanonicalizePath() instead of canonicalize_file_name()' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
build: use correct type for pid and similar types
No thanks to 64-bit windows, with 64-bit pid_t, we have to avoid
constructs like 'int pid'. Our API in libvirt-qemu cannot be
changed without breaking ABI; but then again, libvirt-qemu can
only be used on systems that support UNIX sockets, which rules
out Windows (even if qemu could be compiled there) - so for all
points on the call chain that interact with this API decision,
we require a different variable name to make it clear that we
audited the use for safety.
Adding a syntax-check rule only solves half the battle; anywhere
that uses printf on a pid_t still needs to be converted, but that
will be a separate patch.
* cfg.mk (sc_correct_id_types): New syntax check.
* src/libvirt-qemu.c (virDomainQemuAttach): Document why we didn't
use pid_t for pid, and validate for overflow.
* include/libvirt/libvirt-qemu.h (virDomainQemuAttach): Tweak name
for syntax check.
* src/vmware/vmware_conf.c (vmwareExtractPid): Likewise.
* src/driver.h (virDrvDomainQemuAttach): Likewise.
* tools/virsh.c (cmdQemuAttach): Likewise.
* src/remote/qemu_protocol.x (qemu_domain_attach_args): Likewise.
* src/qemu_protocol-structs (qemu_domain_attach_args): Likewise.
* src/util/cgroup.c (virCgroupPidCode, virCgroupKillInternal):
Likewise.
* src/qemu/qemu_command.c(qemuParseProcFileStrings): Likewise.
(qemuParseCommandLinePid): Use pid_t for pid.
* daemon/libvirtd.c (daemonForkIntoBackground): Likewise.
* src/conf/domain_conf.h (_virDomainObj): Likewise.
* src/probes.d (rpc_socket_new): Likewise.
* src/qemu/qemu_command.h (qemuParseCommandLinePid): Likewise.
* src/qemu/qemu_driver.c (qemudGetProcessInfo, qemuDomainAttach):
Likewise.
* src/qemu/qemu_process.c (qemuProcessAttach): Likewise.
* src/qemu/qemu_process.h (qemuProcessAttach): Likewise.
* src/uml/uml_driver.c (umlGetProcessInfo): Likewise.
* src/util/virnetdev.h (virNetDevSetNamespace): Likewise.
* src/util/virnetdev.c (virNetDevSetNamespace): Likewise.
* tests/testutils.c (virtTestCaptureProgramOutput): Likewise.
* src/conf/storage_conf.h (_virStoragePerms): Use mode_t, uid_t,
and gid_t rather than int.
* src/security/security_dac.c (virSecurityDACSetOwnership): Likewise.
* src/conf/storage_conf.c (virStorageDefParsePerms): Avoid
compiler warning.
2012-02-10 23:08:11 +00:00
|
|
|
# Insist on correct types for [pug]id.
|
|
|
|
sc_correct_id_types:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<(int|long) *[pug]id\>' \
|
2018-11-08 11:00:19 +00:00
|
|
|
exclude='exempt from syntax-check' \
|
2017-11-03 12:09:47 +00:00
|
|
|
halt='use pid_t for pid, uid_t for uid, gid_t for gid' \
|
build: use correct type for pid and similar types
No thanks to 64-bit windows, with 64-bit pid_t, we have to avoid
constructs like 'int pid'. Our API in libvirt-qemu cannot be
changed without breaking ABI; but then again, libvirt-qemu can
only be used on systems that support UNIX sockets, which rules
out Windows (even if qemu could be compiled there) - so for all
points on the call chain that interact with this API decision,
we require a different variable name to make it clear that we
audited the use for safety.
Adding a syntax-check rule only solves half the battle; anywhere
that uses printf on a pid_t still needs to be converted, but that
will be a separate patch.
* cfg.mk (sc_correct_id_types): New syntax check.
* src/libvirt-qemu.c (virDomainQemuAttach): Document why we didn't
use pid_t for pid, and validate for overflow.
* include/libvirt/libvirt-qemu.h (virDomainQemuAttach): Tweak name
for syntax check.
* src/vmware/vmware_conf.c (vmwareExtractPid): Likewise.
* src/driver.h (virDrvDomainQemuAttach): Likewise.
* tools/virsh.c (cmdQemuAttach): Likewise.
* src/remote/qemu_protocol.x (qemu_domain_attach_args): Likewise.
* src/qemu_protocol-structs (qemu_domain_attach_args): Likewise.
* src/util/cgroup.c (virCgroupPidCode, virCgroupKillInternal):
Likewise.
* src/qemu/qemu_command.c(qemuParseProcFileStrings): Likewise.
(qemuParseCommandLinePid): Use pid_t for pid.
* daemon/libvirtd.c (daemonForkIntoBackground): Likewise.
* src/conf/domain_conf.h (_virDomainObj): Likewise.
* src/probes.d (rpc_socket_new): Likewise.
* src/qemu/qemu_command.h (qemuParseCommandLinePid): Likewise.
* src/qemu/qemu_driver.c (qemudGetProcessInfo, qemuDomainAttach):
Likewise.
* src/qemu/qemu_process.c (qemuProcessAttach): Likewise.
* src/qemu/qemu_process.h (qemuProcessAttach): Likewise.
* src/uml/uml_driver.c (umlGetProcessInfo): Likewise.
* src/util/virnetdev.h (virNetDevSetNamespace): Likewise.
* src/util/virnetdev.c (virNetDevSetNamespace): Likewise.
* tests/testutils.c (virtTestCaptureProgramOutput): Likewise.
* src/conf/storage_conf.h (_virStoragePerms): Use mode_t, uid_t,
and gid_t rather than int.
* src/security/security_dac.c (virSecurityDACSetOwnership): Likewise.
* src/conf/storage_conf.c (virStorageDefParsePerms): Avoid
compiler warning.
2012-02-10 23:08:11 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-09-24 16:41:54 +00: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 19:57:19 +00:00
|
|
|
# Also requires that all 'fooPtr' typedefs are actually pointers.
|
2013-09-24 16:41:54 +00:00
|
|
|
sc_forbid_const_pointer_typedef:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='(^|[^"])const \w*Ptr' \
|
|
|
|
halt='"const fooPtr var" does not declare what you meant' \
|
2013-09-24 16:41:54 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='typedef [^(]+ [^*]\w*Ptr\b' \
|
|
|
|
halt='use correct style and type for Ptr typedefs' \
|
2013-10-29 19:57:19 +00:00
|
|
|
$(_sc_search_regexp)
|
2013-09-24 16:41:54 +00:00
|
|
|
|
2012-03-29 09:52:04 +00:00
|
|
|
# Forbid sizeof foo or sizeof (foo), require sizeof(foo)
|
|
|
|
sc_size_of_brackets:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='sizeof\s' \
|
|
|
|
halt='use sizeof(foo), not sizeof (foo) or sizeof foo' \
|
2012-03-29 09:52:04 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2011-02-04 18:16:35 +00:00
|
|
|
# Ensure that no C source file, docs, or rng schema uses TABs for
|
2010-04-05 14:17:31 +00:00
|
|
|
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
|
|
|
|
# files in gnulib, since they're imported.
|
2018-01-31 14:53:03 +00:00
|
|
|
space_indent_files=(\.(aug(\.in)?|rng|s?[ch](\.in)?|html.in|py|pl|syms)|(daemon|tools)/.*\.in)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
sc_TAB_in_indentation:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^ * ' \
|
|
|
|
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 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
|
|
|
ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\
|
|
|
|
|isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper
|
|
|
|
|
|
|
|
sc_avoid_ctype_macros:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\b($(ctype_re)) *\(' \
|
2018-03-20 06:48:52 +00:00
|
|
|
in_vc_files='\.[ch]$$' \
|
2017-11-03 12:09:47 +00:00
|
|
|
halt='use c-ctype.h instead of ctype macros' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2011-03-31 02:26:27 +00:00
|
|
|
sc_avoid_strcase:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bstrn?case(cmp|str) *\(' \
|
|
|
|
halt='use c-strcase.h instead of raw strcase functions' \
|
2011-03-31 02:26:27 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
sc_prohibit_virBufferAdd_with_string_literal:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<virBufferAdd *\([^,]+, *"[^"]' \
|
build: import latest gnulib
A lot of syntax check rules have to be rewritten, but the
result is easier to maintain. I tested each syntax rule
by intentionally introducing a temporary violation of the rule.
Additionally, some false positives for unmarked_diagnostics
crept in, and an improved copyright_format test caught some bugs.
* .gnulib: Update to latest.
* cfg.mk (sc_prohibit_test_minus_ao): Delete, it was moved into
gnulib's maint.mk.
(sc_avoid_write, sc_prohibit_strcmp_and_strncmp)
(sc_prohibit_asprintf, sc_prohibit_strncpy, sc_prohibit_readlink)
(sc_prohibit_gethostname, sc_prohibit_gettext_noop)
(sc_prohibit_VIR_ERR_NO_MEMORY, sc_prohibit_nonreentrant)
(sc_prohibit_ctype_h, sc_TAB_in_indentation)
(sc_avoid_ctype_macros)
(sc_prohibit_virBufferAdd_with_string_literal)
(sc_prohibit_gethostby, sc_copyright_format): Rewrite in terms of
new maint.mk macros.
(sc_libvirt_unmarked_diagnostics): Fix whitespace.
* .x-sc_unmarked_diagnostics: New file.
* tests/object-locking.ml: Fix copyright.
* tools/virt-pki-validate.in: Likewise.
* tools/virt-xml-validate.in: Likewise.
2010-03-31 23:02:10 +00:00
|
|
|
halt='use virBufferAddLit, not virBufferAdd, with a string literal' \
|
|
|
|
$(_sc_search_regexp)
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
|
2013-05-07 11:42:40 +00:00
|
|
|
sc_prohibit_virBufferAsprintf_with_string_literal:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<virBufferAsprintf *\([^,]+, *"([^%"\]|\\.|%%)*"\)' \
|
2013-05-07 11:42:40 +00:00
|
|
|
halt='use virBufferAddLit, not virBufferAsprintf, with a string literal' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-03-13 00:05:31 +00:00
|
|
|
sc_forbid_manual_xml_indent:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='virBuffer.*" +<' \
|
2014-03-13 00:05:31 +00:00
|
|
|
halt='use virBufferAdjustIndent instead of spaces when indenting xml' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-04-25 20:24:42 +00:00
|
|
|
# dirname and basename from <libgen.h> are not required to be thread-safe
|
|
|
|
sc_prohibit_libgen:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='( (base|dir)name *\(|include .libgen\.h)' \
|
|
|
|
halt='use functions from gnulib "dirname.h", not <libgen.h>' \
|
2013-04-25 20:24:42 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2010-11-24 20:08:55 +00:00
|
|
|
# raw xmlGetProp requires some nasty casts
|
|
|
|
sc_prohibit_xmlGetProp:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<xmlGetProp *\(' \
|
|
|
|
halt='use virXMLPropString, not xmlGetProp' \
|
2010-11-24 20:08:55 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2012-02-24 18:48:55 +00:00
|
|
|
# xml(ParseURI|SaveUri) doesn't handle IPv6 URIs well
|
|
|
|
sc_prohibit_xmlURI:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<xml(ParseURI|SaveUri) *\(' \
|
|
|
|
halt='use virURI(Parse|Format), not xml(ParseURI|SaveUri)' \
|
2012-02-24 18:48:55 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2012-03-23 07:34:09 +00:00
|
|
|
# we don't want old old-style return with parentheses around argument
|
|
|
|
sc_prohibit_return_as_function:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<return *\(([^()]*(\([^()]*\)[^()]*)*)\) *;' \
|
|
|
|
halt='avoid extra () with return statements' \
|
2012-03-23 07:34:09 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2011-07-08 21:58:28 +00:00
|
|
|
# ATTRIBUTE_UNUSED should only be applied in implementations, not
|
|
|
|
# header declarations
|
|
|
|
sc_avoid_attribute_unused_in_header:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^[^#]*ATTRIBUTE_UNUSED([^:]|$$)' \
|
|
|
|
in_vc_files='\.h$$' \
|
|
|
|
halt='use ATTRIBUTE_UNUSED in .c rather than .h files' \
|
2011-07-08 21:58:28 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2015-04-14 11:37:41 +00:00
|
|
|
sc_prohibit_int_index:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<(int|unsigned)\s*\*?index\>(\s|,|;)' \
|
|
|
|
halt='use different name than 'index' for declaration' \
|
2015-04-14 11:37:41 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-07-08 14:17:29 +00:00
|
|
|
sc_prohibit_int_ijk:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<(int|unsigned) ([^(=]* )*(i|j|k)\>(\s|,|;)' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='use size_t, not int/unsigned int for loop vars i, j, k' \
|
2013-07-08 14:17:29 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
|
|
|
sc_prohibit_loop_iijjkk:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<(int|unsigned) ([^=]+ )*(ii|jj|kk)\>(\s|,|;)' \
|
|
|
|
halt='use i, j, k for loop iterators, not ii, jj, kk' \
|
2013-07-08 14:17:29 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-08-07 22:44:58 +00:00
|
|
|
# RHEL 5 gcc can't grok "for (int i..."
|
|
|
|
sc_prohibit_loop_var_decl:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<for *\(\w+[ *]+\w+' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='declare loop iterators outside the for statement' \
|
2013-08-07 22:44:58 +00:00
|
|
|
$(_sc_search_regexp)
|
2014-11-17 23:39:48 +00:00
|
|
|
|
|
|
|
# Use 'bool', not 'int', when assigning true or false
|
|
|
|
sc_prohibit_int_assign_bool:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<int\>.*= *(true|false)' \
|
|
|
|
halt='use bool type for boolean values' \
|
2014-11-17 23:39:48 +00:00
|
|
|
$(_sc_search_regexp)
|
2013-07-08 14:17:29 +00:00
|
|
|
|
2016-10-06 14:54:41 +00:00
|
|
|
sc_prohibit_unsigned_pid:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<unsigned\> [^,=;(]+pid' \
|
|
|
|
halt='use signed type for pid values' \
|
2016-10-06 14:54:41 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00: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 06:30:49 +00:00
|
|
|
msg_gen_function += VIR_ERROR
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
msg_gen_function += lxcError
|
|
|
|
msg_gen_function += regerror
|
2010-05-12 17:23:06 +00:00
|
|
|
msg_gen_function += vah_error
|
|
|
|
msg_gen_function += vah_warning
|
2011-04-17 06:30:49 +00:00
|
|
|
msg_gen_function += virGenericReportError
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
msg_gen_function += virRaiseError
|
2012-07-18 10:23:56 +00:00
|
|
|
msg_gen_function += virReportError
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
msg_gen_function += virReportErrorHelper
|
|
|
|
msg_gen_function += virReportSystemError
|
2010-03-31 10:24:25 +00:00
|
|
|
msg_gen_function += xenapiSessionErrorHandler
|
2019-06-11 09:23:48 +00:00
|
|
|
msg_gen_function += virLastErrorPrefixMessage
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00: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 10:05:35 +00:00
|
|
|
space =
|
|
|
|
space +=
|
|
|
|
func_re= ($(subst $(space),|,$(msg_gen_function)))
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' \
|
|
|
|
exclude='_\(' \
|
|
|
|
halt='found unmarked diagnostic(s)' \
|
2012-03-02 00:21:08 +00:00
|
|
|
$(_sc_search_regexp)
|
2019-01-03 19:30:39 +00:00
|
|
|
@{ $(VC_LIST_EXCEPT) | xargs \
|
|
|
|
$(GREP) -nE '\<$(func_re) *\(.*;$$' /dev/null; \
|
|
|
|
$(VC_LIST_EXCEPT) | xargs \
|
|
|
|
$(GREP) -A1 -nE '\<$(func_re) *\(.*,$$' /dev/null; } \
|
2019-01-08 14:24:36 +00:00
|
|
|
| $(SED) -E 's/_\("([^\"]|\\.)+"//;s/"%s"//' \
|
|
|
|
| $(GREP) '"' && \
|
2017-11-03 12:09:47 +00:00
|
|
|
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
Prepare to use maint.mk from gnulib
Since Makefile.maint will soon come from gnulib's maint.mk,
sync Makefile.maint to have the same contents (modulo minor
things). In syncing it, we have to remove some libvirt-specific
rules. Since we want to keep them (of course), put those in cfg.mk.
* Makefile.maint: Merge from gnulib's maint.mk.
* cfg.mk (sc_avoid_write): New rule. From Makefile.cfg.
(sc_prohibit_strcmp_and_strncmp): Likewise, and rename.
(sc_prohibit_asprintf, sc_prohibit_VIR_ERR_NO_MEMORY): Likewise.
(sc_prohibit_nonreentrant): Likewise.
(sc_prohibit_ctype_h): Likewise.
(sc_TAB_in_indentation, sc_avoid_ctype_macros): Likewise.
(sc_prohibit_virBufferAdd_with_string_literal): Likewise.
(sc_prohibit_gethostby): Likewise.
(sc_libvirt_unmarked_diagnostics): Likewise. Also, rename the
rule, inserting "_libvirt", since this rule is a specialization of
the one in gnulib.
* GNUmakefile: Include cfg.mk, not Makefile.cfg
* .x-sc_prohibit_strcmp_and_strncmp: New file.
* Makefile.am (EXTRA_DIST): Add .x-sc_prohibit_strcmp_and_strncmp
2009-07-06 16:28:10 +00:00
|
|
|
exit 1; } || :
|
2009-07-07 16:08:45 +00:00
|
|
|
|
2010-05-20 09:13:41 +00: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:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | xargs $(GREP) -A2 -nE \
|
|
|
|
'\<$(func_re) *\(' /dev/null \
|
2019-01-03 15:31:37 +00:00
|
|
|
| $(GREP) '\\n"' \
|
2017-11-03 12:09:47 +00:00
|
|
|
&& { echo '$(ME): newline at end of message(s)' 1>&2; \
|
2010-05-20 09:13:41 +00:00
|
|
|
exit 1; } || :
|
|
|
|
|
maint: don't permit format strings without %
Any time we have a string with no % passed through gettext, a
translator can inject a % to cause a stack overread. When there
is nothing to format, it's easier to ask for a string that cannot
be used as a formatter, by using a trivial "%s" format instead.
In the past, we have used --disable-nls to catch some of the
offenders, but that doesn't get run very often, and many more
uses have crept in. Syntax check to the rescue!
The syntax check can catch uses such as
virReportError(code,
_("split "
"string"));
by using a sed script to fold context lines into one pattern
space before checking for a string without %.
This patch is just mechanical insertion of %s; there are probably
several messages touched by this patch where we would be better
off giving the user more information than a fixed string.
* cfg.mk (sc_prohibit_diagnostic_without_format): New rule.
* src/datatypes.c (virUnrefConnect, virGetDomain)
(virUnrefDomain, virGetNetwork, virUnrefNetwork, virGetInterface)
(virUnrefInterface, virGetStoragePool, virUnrefStoragePool)
(virGetStorageVol, virUnrefStorageVol, virGetNodeDevice)
(virGetSecret, virUnrefSecret, virGetNWFilter, virUnrefNWFilter)
(virGetDomainSnapshot, virUnrefDomainSnapshot): Add %s wrapper.
* src/lxc/lxc_driver.c (lxcDomainSetBlkioParameters)
(lxcDomainGetBlkioParameters): Likewise.
* src/conf/domain_conf.c (virSecurityDeviceLabelDefParseXML)
(virDomainDiskDefParseXML, virDomainGraphicsDefParseXML):
Likewise.
* src/conf/network_conf.c (virNetworkDNSHostsDefParseXML)
(virNetworkDefParseXML): Likewise.
* src/conf/nwfilter_conf.c (virNWFilterIsValidChainName):
Likewise.
* src/conf/nwfilter_params.c (virNWFilterVarValueCreateSimple)
(virNWFilterVarAccessParse): Likewise.
* src/libvirt.c (virDomainSave, virDomainSaveFlags)
(virDomainRestore, virDomainRestoreFlags)
(virDomainSaveImageGetXMLDesc, virDomainSaveImageDefineXML)
(virDomainCoreDump, virDomainGetXMLDesc)
(virDomainMigrateVersion1, virDomainMigrateVersion2)
(virDomainMigrateVersion3, virDomainMigrate, virDomainMigrate2)
(virStreamSendAll, virStreamRecvAll)
(virDomainSnapshotGetXMLDesc): Likewise.
* src/nwfilter/nwfilter_dhcpsnoop.c (virNWFilterSnoopReqLeaseDel)
(virNWFilterDHCPSnoopReq): Likewise.
* src/openvz/openvz_driver.c (openvzUpdateDevice): Likewise.
* src/openvz/openvz_util.c (openvzKBPerPages): Likewise.
* src/qemu/qemu_cgroup.c (qemuSetupCgroup): Likewise.
* src/qemu/qemu_command.c (qemuBuildHubDevStr, qemuBuildChrChardevStr)
(qemuBuildCommandLine): Likewise.
* src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Likewise.
* src/rpc/virnetsaslcontext.c (virNetSASLSessionGetIdentity):
Likewise.
* src/rpc/virnetsocket.c (virNetSocketNewConnectUNIX)
(virNetSocketSendFD, virNetSocketRecvFD): Likewise.
* src/storage/storage_backend_disk.c
(virStorageBackendDiskBuildPool): Likewise.
* src/storage/storage_backend_fs.c
(virStorageBackendFileSystemProbe)
(virStorageBackendFileSystemBuild): Likewise.
* src/storage/storage_backend_rbd.c
(virStorageBackendRBDOpenRADOSConn): Likewise.
* src/storage/storage_driver.c (storageVolumeResize): Likewise.
* src/test/test_driver.c (testInterfaceChangeBegin)
(testInterfaceChangeCommit, testInterfaceChangeRollback):
Likewise.
* src/vbox/vbox_tmpl.c (vboxListAllDomains): Likewise.
* src/xenxs/xen_sxpr.c (xenFormatSxprDisk, xenFormatSxpr):
Likewise.
* src/xenxs/xen_xm.c (xenXMConfigGetUUID, xenFormatXMDisk)
(xenFormatXM): Likewise.
2012-07-23 20:33:08 +00: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:
|
2019-01-03 19:30:39 +00:00
|
|
|
@{ $(VC_LIST_EXCEPT) | xargs \
|
|
|
|
$(GREP) -nE '\<$(func_re) *\(.*;$$' /dev/null; \
|
|
|
|
$(VC_LIST_EXCEPT) | xargs \
|
|
|
|
$(GREP) -A2 -nE '\<$(func_re) *\(.*,$$' /dev/null; } \
|
2017-11-03 12:09:47 +00:00
|
|
|
| $(SED) -rn -e ':l; /[,"]$$/ {N;b l;}' \
|
|
|
|
-e '/(xenapiSessionErrorHandler|vah_(error|warning))/d' \
|
|
|
|
-e '/\<$(func_re) *\([^"]*"([^%"]|"\n[^"]*")*"[,)]/p' \
|
2019-01-03 15:31:37 +00:00
|
|
|
| $(GREP) -vE 'VIR_ERROR' && \
|
2017-11-03 12:09:47 +00:00
|
|
|
{ echo '$(ME): found diagnostic without %' 1>&2; \
|
maint: don't permit format strings without %
Any time we have a string with no % passed through gettext, a
translator can inject a % to cause a stack overread. When there
is nothing to format, it's easier to ask for a string that cannot
be used as a formatter, by using a trivial "%s" format instead.
In the past, we have used --disable-nls to catch some of the
offenders, but that doesn't get run very often, and many more
uses have crept in. Syntax check to the rescue!
The syntax check can catch uses such as
virReportError(code,
_("split "
"string"));
by using a sed script to fold context lines into one pattern
space before checking for a string without %.
This patch is just mechanical insertion of %s; there are probably
several messages touched by this patch where we would be better
off giving the user more information than a fixed string.
* cfg.mk (sc_prohibit_diagnostic_without_format): New rule.
* src/datatypes.c (virUnrefConnect, virGetDomain)
(virUnrefDomain, virGetNetwork, virUnrefNetwork, virGetInterface)
(virUnrefInterface, virGetStoragePool, virUnrefStoragePool)
(virGetStorageVol, virUnrefStorageVol, virGetNodeDevice)
(virGetSecret, virUnrefSecret, virGetNWFilter, virUnrefNWFilter)
(virGetDomainSnapshot, virUnrefDomainSnapshot): Add %s wrapper.
* src/lxc/lxc_driver.c (lxcDomainSetBlkioParameters)
(lxcDomainGetBlkioParameters): Likewise.
* src/conf/domain_conf.c (virSecurityDeviceLabelDefParseXML)
(virDomainDiskDefParseXML, virDomainGraphicsDefParseXML):
Likewise.
* src/conf/network_conf.c (virNetworkDNSHostsDefParseXML)
(virNetworkDefParseXML): Likewise.
* src/conf/nwfilter_conf.c (virNWFilterIsValidChainName):
Likewise.
* src/conf/nwfilter_params.c (virNWFilterVarValueCreateSimple)
(virNWFilterVarAccessParse): Likewise.
* src/libvirt.c (virDomainSave, virDomainSaveFlags)
(virDomainRestore, virDomainRestoreFlags)
(virDomainSaveImageGetXMLDesc, virDomainSaveImageDefineXML)
(virDomainCoreDump, virDomainGetXMLDesc)
(virDomainMigrateVersion1, virDomainMigrateVersion2)
(virDomainMigrateVersion3, virDomainMigrate, virDomainMigrate2)
(virStreamSendAll, virStreamRecvAll)
(virDomainSnapshotGetXMLDesc): Likewise.
* src/nwfilter/nwfilter_dhcpsnoop.c (virNWFilterSnoopReqLeaseDel)
(virNWFilterDHCPSnoopReq): Likewise.
* src/openvz/openvz_driver.c (openvzUpdateDevice): Likewise.
* src/openvz/openvz_util.c (openvzKBPerPages): Likewise.
* src/qemu/qemu_cgroup.c (qemuSetupCgroup): Likewise.
* src/qemu/qemu_command.c (qemuBuildHubDevStr, qemuBuildChrChardevStr)
(qemuBuildCommandLine): Likewise.
* src/qemu/qemu_driver.c (qemuDomainGetPercpuStats): Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Likewise.
* src/rpc/virnetsaslcontext.c (virNetSASLSessionGetIdentity):
Likewise.
* src/rpc/virnetsocket.c (virNetSocketNewConnectUNIX)
(virNetSocketSendFD, virNetSocketRecvFD): Likewise.
* src/storage/storage_backend_disk.c
(virStorageBackendDiskBuildPool): Likewise.
* src/storage/storage_backend_fs.c
(virStorageBackendFileSystemProbe)
(virStorageBackendFileSystemBuild): Likewise.
* src/storage/storage_backend_rbd.c
(virStorageBackendRBDOpenRADOSConn): Likewise.
* src/storage/storage_driver.c (storageVolumeResize): Likewise.
* src/test/test_driver.c (testInterfaceChangeBegin)
(testInterfaceChangeCommit, testInterfaceChangeRollback):
Likewise.
* src/vbox/vbox_tmpl.c (vboxListAllDomains): Likewise.
* src/xenxs/xen_sxpr.c (xenFormatSxprDisk, xenFormatSxpr):
Likewise.
* src/xenxs/xen_xm.c (xenXMConfigGetUUID, xenFormatXMDisk)
(xenFormatXM): Likewise.
2012-07-23 20:33:08 +00:00
|
|
|
exit 1; } || :
|
|
|
|
|
2012-07-10 21:43:08 +00:00
|
|
|
# The strings "" and "%s" should never be marked for translation.
|
2012-08-20 14:26:58 +00:00
|
|
|
# Files under tests/ and examples/ should not be translated.
|
2012-07-10 21:43:08 +00:00
|
|
|
sc_prohibit_useless_translation:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='_\("(%s)?"\)' \
|
|
|
|
halt='found useless translation' \
|
2012-08-20 14:26:58 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<N?_ *\(' \
|
|
|
|
in_vc_files='(tests|examples)/' \
|
|
|
|
halt='no translations in tests or examples' \
|
2012-07-10 21:43:08 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2012-09-12 16:54:42 +00: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:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | xargs $(GREP) -n -A1 '"$$' /dev/null \
|
2017-11-03 12:09:47 +00:00
|
|
|
| $(SED) -ne ':l; /"$$/ {N;b l;}; s/"\n[^"]*"/""/g; s/\\n/ /g' \
|
2019-01-03 15:31:37 +00:00
|
|
|
-e '/_(.*[^\ ]""[^\ ]/p' | $(GREP) . && \
|
2017-11-03 12:09:47 +00:00
|
|
|
{ echo '$(ME): missing whitespace at line split' 1>&2; \
|
2012-09-12 16:54:42 +00:00
|
|
|
exit 1; } || :
|
|
|
|
|
2010-03-09 21:22:14 +00:00
|
|
|
# Enforce recommended preprocessor indentation style.
|
|
|
|
sc_preprocessor_indentation:
|
2017-11-03 12:09:47 +00:00
|
|
|
@if cppi --version >/dev/null 2>&1; then \
|
2019-01-03 15:31:37 +00:00
|
|
|
$(VC_LIST_EXCEPT) | $(GREP) -E '\.[ch](\.in)?$$' | xargs cppi -a -c \
|
2017-11-03 12:09:47 +00:00
|
|
|
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
|
|
|
exit 1; }; \
|
|
|
|
else \
|
|
|
|
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
|
2010-03-09 21:22:14 +00:00
|
|
|
fi
|
|
|
|
|
2013-01-09 20:50:03 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@if cppi --version >/dev/null 2>&1; then \
|
2019-01-03 15:31:37 +00:00
|
|
|
for f in $$($(VC_LIST_EXCEPT) | $(GREP) '\.spec\.in$$'); do \
|
2017-11-03 12:09:47 +00:00
|
|
|
$(SED) -e 's|#|// #|; s|%ifn*\(arch\)* |#if a // |' \
|
|
|
|
-e 's/%\(else\|endif\|define\)/#\1/' \
|
|
|
|
-e 's/^\( *\)\1\1\1#/#\1/' \
|
|
|
|
-e 's|^\( *[^#/ ]\)|// \1|; s|^\( */[^/]\)|// \1|' $$f \
|
|
|
|
| cppi -a -c 2>&1 | $(SED) "s|standard input|$$f|"; \
|
2019-01-03 15:31:37 +00:00
|
|
|
done | { if $(GREP) . >&2; then false; else :; fi; } \
|
2017-11-03 12:09:47 +00:00
|
|
|
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
|
|
|
exit 1; }; \
|
|
|
|
else \
|
|
|
|
echo '$(ME): skipping test $@: cppi not installed' 1>&2; \
|
2013-01-09 20:50:03 +00:00
|
|
|
fi
|
|
|
|
|
2013-09-04 02:39:16 +00:00
|
|
|
# Nested conditionals are easier to understand if we enforce that endifs
|
|
|
|
# can be paired back to the if
|
|
|
|
sc_makefile_conditionals:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='(else|endif)($$| *#)' \
|
|
|
|
in_vc_files='Makefile\.am' \
|
|
|
|
halt='match "if FOO" with "endif FOO" in Makefiles' \
|
2013-09-04 02:39:16 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-07-17 17:47:01 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='.{90}' \
|
|
|
|
in_vc_files='\.arg[sv]' \
|
|
|
|
halt='Wrap long lines in expected output files' \
|
2013-07-17 17:47:01 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='.{80}' \
|
|
|
|
in_vc_files='Makefile\.am' \
|
|
|
|
halt='Wrap long lines in Makefiles' \
|
2013-07-18 15:37:52 +00:00
|
|
|
$(_sc_search_regexp)
|
2013-07-17 17:47:01 +00:00
|
|
|
|
2010-03-18 17:25:01 +00:00
|
|
|
sc_copyright_format:
|
2017-11-03 12:09:47 +00:00
|
|
|
@require='Copyright .*Red 'Hat', Inc\.' \
|
|
|
|
containing='Copyright .*Red 'Hat \
|
|
|
|
halt='Red Hat copyright is missing Inc.' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='Copyright [^(].*Red 'Hat \
|
|
|
|
halt='consistently use (C) in Red Hat copyright' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<RedHat\>' \
|
|
|
|
halt='spell Red Hat as two words' \
|
2011-07-19 18:17:22 +00:00
|
|
|
$(_sc_search_regexp)
|
2010-05-19 10:51:11 +00:00
|
|
|
|
2012-07-26 22:58:02 +00:00
|
|
|
# Prefer the new URL listing over the old street address listing when
|
2013-05-14 23:41:15 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit=Boston,' MA' \
|
|
|
|
halt='Point to <http://www.gnu.org/licenses/>, not an address' \
|
2012-07-26 22:58:02 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@require='COPYING\.LESSER' \
|
|
|
|
containing='COPYING' \
|
|
|
|
halt='Refer to COPYING.LESSER for LGPL' \
|
2013-05-14 23:41:15 +00:00
|
|
|
$(_sc_search_regexp)
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='COPYING\.LIB' \
|
|
|
|
halt='Refer to COPYING.LESSER for LGPL' \
|
2013-05-14 23:41:15 +00:00
|
|
|
$(_sc_search_regexp)
|
2012-07-26 22:58:02 +00:00
|
|
|
|
2010-05-19 10:51:11 +00:00
|
|
|
# Some functions/macros produce messages intended solely for developers
|
|
|
|
# and maintainers. Do not mark them for translation.
|
|
|
|
sc_prohibit_gettext_markup:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<VIR_(WARN|INFO|DEBUG) *\(_\(' \
|
|
|
|
halt='do not mark these strings for translation' \
|
2010-05-19 10:51:11 +00:00
|
|
|
$(_sc_search_regexp)
|
2010-03-18 17:25:01 +00:00
|
|
|
|
2012-03-02 00:21:08 +00: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)))
|
2018-01-25 10:53:54 +00:00
|
|
|
mid_dirs=access|admin|conf|cpu|locking|logging|rpc|security
|
2012-03-02 00:21:08 +00:00
|
|
|
sc_prohibit_cross_inclusion:
|
2017-11-03 12:09:47 +00:00
|
|
|
@for dir in $(cross_dirs); do \
|
|
|
|
case $$dir in \
|
|
|
|
util/) safe="util";; \
|
|
|
|
access/ | conf/) safe="($$dir|conf|util)";; \
|
2018-10-02 13:08:28 +00:00
|
|
|
cpu/| network/| node_device/| rpc/| security/| storage/) \
|
2017-11-03 12:09:47 +00:00
|
|
|
safe="($$dir|util|conf|storage)";; \
|
|
|
|
xenapi/ | xenconfig/ ) safe="($$dir|util|conf|xen|cpu)";; \
|
|
|
|
*) safe="($$dir|$(mid_dirs)|util)";; \
|
|
|
|
esac; \
|
|
|
|
in_vc_files="^src/$$dir" \
|
|
|
|
prohibit='^# *include .$(cross_dirs_re)' \
|
|
|
|
exclude="# *include .$$safe" \
|
|
|
|
halt='unsafe cross-directory include' \
|
|
|
|
$(_sc_search_regexp) \
|
2012-03-02 00:21:08 +00:00
|
|
|
done
|
|
|
|
|
2012-01-20 21:00:58 +00: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:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | xargs \
|
|
|
|
$(GREP) -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' /dev/null \
|
2019-04-07 23:04:08 +00:00
|
|
|
| $(SED) -ne '/VIR_ENUM_IMPL.*,$$/N' \
|
|
|
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
2017-11-03 12:09:47 +00:00
|
|
|
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
|
2019-01-03 15:31:37 +00:00
|
|
|
| $(GREP) . && \
|
2019-04-07 23:04:08 +00:00
|
|
|
{ echo '$(ME): enum impl needs _LAST marker on second line' 1>&2; \
|
2012-01-20 21:00:58 +00:00
|
|
|
exit 1; } || :
|
|
|
|
|
2013-02-07 07:01:52 +00:00
|
|
|
# In Python files we don't want to end lines with a semicolon like in C
|
|
|
|
sc_prohibit_semicolon_at_eol_in_python:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^[^#].*\;$$' \
|
|
|
|
in_vc_files='\.py$$' \
|
|
|
|
halt='python does not require to end lines with a semicolon' \
|
2013-02-07 07:01:52 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-02-22 22:42:39 +00:00
|
|
|
# mymain() in test files should use return, not exit, for nicer output
|
|
|
|
sc_prohibit_exit_in_tests:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\<exit *\(' \
|
|
|
|
in_vc_files='tests/.*\.c$$' \
|
|
|
|
halt='use return, not exit(), in tests' \
|
2013-02-22 22:42:39 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-04-17 10:19:18 +00:00
|
|
|
# Don't include "libvirt/*.h" in "" form.
|
2013-04-17 10:19:19 +00:00
|
|
|
sc_prohibit_include_public_headers_quote:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='# *include *"libvirt/.*\.h"' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='Do not include libvirt/*.h in internal source' \
|
2013-04-17 10:19:19 +00:00
|
|
|
$(_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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='# *include *<libvirt/.*\.h>' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='Do not include libvirt/*.h in internal source' \
|
2013-04-17 10:19:18 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-05-31 17:52:51 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^# *include\>.*config\.h' \
|
|
|
|
in_vc_files='\.h$$' \
|
|
|
|
halt='headers should not include <config.h>' \
|
2013-05-31 17:52:51 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-08-19 14:17:20 +00:00
|
|
|
sc_prohibit_unbounded_arrays_in_rpc:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='<>' \
|
|
|
|
in_vc_files='\.x$$' \
|
|
|
|
halt='Arrays in XDR must have a upper limit set for <NNN>' \
|
2013-08-19 14:17:20 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-10-09 10:19:27 +00:00
|
|
|
sc_prohibit_getenv:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\b(secure_)?getenv *\(' \
|
|
|
|
exclude='exempt from syntax-check' \
|
|
|
|
halt='Use virGetEnv{Allow,Block}SUID instead of getenv' \
|
2013-10-09 10:19:27 +00:00
|
|
|
$(_sc_search_regexp)
|
2013-05-31 17:52:51 +00:00
|
|
|
|
2013-11-14 16:14:26 +00:00
|
|
|
sc_prohibit_atoi:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bato(i|f|l|ll|q) *\(' \
|
2013-11-14 16:14:26 +00:00
|
|
|
halt='Use virStrToLong* instead of atoi, atol, atof, atoq, atoll' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-03-07 13:38:51 +00:00
|
|
|
sc_prohibit_wrong_filename_in_comment:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs awk 'BEGIN { \
|
2017-11-03 12:09:47 +00:00
|
|
|
fail=0; \
|
|
|
|
} FNR < 3 { \
|
2014-03-07 13:38:51 +00:00
|
|
|
n=match($$0, /[[:space:]][^[:space:]]*[.][ch][[:space:]:]/); \
|
2017-11-03 12:09:47 +00:00
|
|
|
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; \
|
|
|
|
} \
|
2019-01-03 19:30:39 +00:00
|
|
|
}' || { echo '$(ME): The file name in comments must match the' \
|
|
|
|
'actual file name' 1>&2; exit 1; }
|
2014-03-07 13:38:51 +00:00
|
|
|
|
2014-03-07 10:15:39 +00:00
|
|
|
sc_prohibit_virConnectOpen_in_virsh:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bvirConnectOpen[a-zA-Z]* *\(' \
|
|
|
|
in_vc_files='tools/virsh-.*\.[ch]$$' \
|
|
|
|
halt='Use vshConnect() in virsh instead of virConnectOpen*' \
|
2014-03-07 10:15:39 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-03-21 12:07:03 +00:00
|
|
|
sc_require_space_before_label:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^( ?)?[_a-zA-Z0-9]+:$$' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='Top-level labels should be indented by one space' \
|
2014-03-21 12:07:03 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2015-11-02 11:12:22 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='^ {0,3}[_a-zA-Z0-9]+ +:$$' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='There should be no space between label name and colon' \
|
2015-11-02 11:12:22 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-09-03 17:17:01 +00:00
|
|
|
# Doesn't catch all cases of mismatched braces across if-else, but it helps
|
|
|
|
sc_require_if_else_matching_braces:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='( else( if .*\))? {|} else( if .*\))?$$)' \
|
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
halt='if one side of if-else uses {}, both sides must use it' \
|
2014-09-03 17:17:01 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2013-09-20 15:56:38 +00:00
|
|
|
sc_curly_braces_style:
|
2019-01-03 19:30:39 +00:00
|
|
|
@if $(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs $(GREP) -nHP \
|
2017-11-03 12:09:47 +00:00
|
|
|
'^\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)\) ?\{' \
|
2019-01-03 19:30:39 +00:00
|
|
|
/dev/null; then \
|
2017-11-03 12:09:47 +00:00
|
|
|
echo '$(ME): Non-K&R style used for curly braces around' \
|
|
|
|
'function body' 1>&2; exit 1; \
|
|
|
|
fi; \
|
2019-01-03 19:30:39 +00:00
|
|
|
if $(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs \
|
|
|
|
$(GREP) -A1 -En ' ((if|for|while|switch) \(|(else|do)\b)[^{]*$$' \
|
|
|
|
/dev/null | $(GREP) '^[^ ]*- *{'; then \
|
2017-06-26 06:45:44 +00:00
|
|
|
echo '$(ME): Use hanging braces for compound statements' 1>&2; exit 1; \
|
2014-09-03 22:18:19 +00:00
|
|
|
fi
|
2013-11-14 16:14:26 +00:00
|
|
|
|
2014-03-29 11:16:38 +00:00
|
|
|
sc_prohibit_windows_special_chars_in_filename:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | $(GREP) '[:*?"<>|]' && \
|
|
|
|
{ echo '$(ME): Windows special chars in filename not allowed' 1>&2; echo exit 1; } || :
|
2014-03-29 11:16:38 +00:00
|
|
|
|
2014-03-13 12:00:16 +00:00
|
|
|
sc_prohibit_mixed_case_abbreviations:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='Pci|Usb|Scsi' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
|
|
|
halt='Use PCI, USB, SCSI, not Pci, Usb, Scsi' \
|
2014-03-13 12:00:16 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-06-04 08:57:21 +00:00
|
|
|
# Require #include <locale.h> in all files that call setlocale()
|
|
|
|
sc_require_locale_h:
|
2017-11-03 12:09:47 +00:00
|
|
|
@require='include.*locale\.h' \
|
|
|
|
containing='setlocale *(' \
|
|
|
|
halt='setlocale() requires <locale.h>' \
|
2014-06-04 17:07:59 +00:00
|
|
|
$(_sc_search_regexp)
|
2014-06-04 08:57:21 +00:00
|
|
|
|
2014-03-18 10:29:12 +00:00
|
|
|
sc_prohibit_empty_first_line:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | xargs awk 'BEGIN { fail=0; } \
|
2017-11-03 12:09:47 +00:00
|
|
|
FNR == 1 { if ($$0 == "") { print FILENAME ":1:"; fail=1; } } \
|
|
|
|
END { if (fail == 1) { \
|
|
|
|
print "$(ME): Prohibited empty first line" > "/dev/stderr"; \
|
2019-01-03 19:30:39 +00:00
|
|
|
} exit fail; }'
|
2014-03-18 10:29:12 +00:00
|
|
|
|
2014-08-20 11:00:30 +00:00
|
|
|
sc_prohibit_paren_brace:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\)\{$$' \
|
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
halt='Put space between closing parenthesis and opening brace' \
|
2014-08-20 11:00:30 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-10-28 18:22:03 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bstatic\b.*= *(0[^xX0-9]|NULL|false)' \
|
|
|
|
in_vc_files='\.[chx](\.in)?$$' \
|
2014-10-28 18:22:03 +00:00
|
|
|
halt='static variables do not need explicit zero initialization'\
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-10-01 14:07:46 +00:00
|
|
|
# FreeBSD exports the "devname" symbol which produces a warning.
|
|
|
|
sc_prohibit_devname:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bdevname\b' \
|
2014-10-01 14:07:46 +00:00
|
|
|
exclude='sc_prohibit_devname' \
|
2016-04-11 14:45:53 +00:00
|
|
|
halt='avoid using devname as FreeBSD exports the symbol' \
|
2014-10-01 14:07:46 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2014-11-28 08:37:42 +00: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 14:57:02 +00: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:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='\bvir(Domain|Network|NodeDevice|StorageVol|StoragePool|Stream|Secret|NWFilter|Interface|DomainSnapshot)Free\b' \
|
2014-11-30 14:57:02 +00:00
|
|
|
exclude='sc_prohibit_virXXXFree' \
|
2016-04-11 14:45:53 +00:00
|
|
|
halt='avoid using virXXXFree, use virObjectUnref instead' \
|
2014-11-30 14:57:02 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2015-02-02 10:26:49 +00:00
|
|
|
sc_prohibit_sysconf_pagesize:
|
|
|
|
@prohibit='sysconf\(_SC_PAGESIZE' \
|
|
|
|
halt='use virGetSystemPageSize[KB] instead of sysconf(_SC_PAGESIZE)' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2017-02-13 13:36:53 +00:00
|
|
|
sc_prohibit_virSecurity:
|
2019-01-03 19:30:39 +00:00
|
|
|
@$(VC_LIST_EXCEPT) | $(GREP) 'src/qemu/' | \
|
|
|
|
$(GREP) -v 'src/qemu/qemu_security' | \
|
|
|
|
xargs $(GREP) -Pn 'virSecurityManager(?!Ptr)' /dev/null && \
|
2017-02-13 13:36:53 +00:00
|
|
|
{ echo '$(ME): prefer qemuSecurity wrappers' 1>&2; exit 1; } || :
|
|
|
|
|
2015-03-20 15:25:15 +00:00
|
|
|
sc_prohibit_pthread_create:
|
|
|
|
@prohibit='\bpthread_create\b' \
|
|
|
|
exclude='sc_prohibit_pthread_create' \
|
2016-04-11 14:45:53 +00:00
|
|
|
halt='avoid using pthread_create, use virThreadCreate instead' \
|
2015-03-20 15:25:15 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2015-10-20 16:15:12 +00:00
|
|
|
sc_prohibit_not_streq:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='! *STRN?EQ *\(.*\)' \
|
|
|
|
halt='Use STRNEQ instead of !STREQ and STREQ instead of !STRNEQ' \
|
2015-10-20 16:15:12 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2016-02-03 08:48:40 +00:00
|
|
|
sc_prohibit_verbose_strcat:
|
2017-11-03 12:09:47 +00:00
|
|
|
@prohibit='strncat\([^,]*,\s+([^,]*),\s+strlen\(\1\)\)' \
|
|
|
|
in_vc_files='\.[ch]$$' \
|
2016-02-03 08:48:40 +00:00
|
|
|
halt='Use strcat(a, b) instead of strncat(a, b, strlen(b))' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2016-04-12 22:29:52 +00:00
|
|
|
# Ensure that each .c file containing a "main" function also
|
|
|
|
# calls virGettextInitialize
|
|
|
|
sc_gettext_init:
|
2017-11-03 12:09:47 +00:00
|
|
|
@require='virGettextInitialize *\(' \
|
|
|
|
in_vc_files='\.c$$' \
|
|
|
|
containing='\<main *(' \
|
|
|
|
halt='the above files do not call virGettextInitialize' \
|
2016-04-12 22:29:52 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2017-04-11 10:16:52 +00:00
|
|
|
sc_prohibit_obj_free_apis_in_virsh:
|
2017-04-11 15:21:05 +00:00
|
|
|
@prohibit='\bvir(Domain|DomainSnapshot)Free\b' \
|
2017-11-03 12:09:47 +00:00
|
|
|
in_vc_files='virsh.*\.[ch]$$' \
|
2017-04-11 10:16:52 +00:00
|
|
|
exclude='sc_prohibit_obj_free_apis_in_virsh' \
|
2017-04-11 15:21:05 +00:00
|
|
|
halt='avoid using virDomain(Snapshot)Free in virsh, use virsh-prefixed wrappers instead' \
|
2017-04-11 10:16:52 +00:00
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2017-10-13 15:30:41 +00:00
|
|
|
https_sites = www.libvirt.org
|
|
|
|
https_sites += libvirt.org
|
|
|
|
https_sites += security.libvirt.org
|
|
|
|
https_sites += qemu.org
|
|
|
|
https_sites += www.qemu.org
|
|
|
|
https_sites += wiki.qemu.org
|
|
|
|
https_sites += linux-kvm.org
|
|
|
|
https_sites += www.linux-kvm.org
|
|
|
|
|
|
|
|
https_re= ($(subst $(space),|,$(https_sites)))
|
|
|
|
|
|
|
|
sc_prohibit_http_urls:
|
|
|
|
@prohibit='http://$(https_re)' \
|
|
|
|
exclude="/schemas/" \
|
|
|
|
halt='Links must use https:// protocol' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2018-12-13 11:23:42 +00:00
|
|
|
sc_prohibit_author:
|
|
|
|
@prohibit="(\*|#)\s*(A|a)uthors?:" \
|
|
|
|
halt="Author: statements are prohibited in source comments" \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2017-12-04 10:12:06 +00:00
|
|
|
# Alignment is usually achieved through spaces (at least two of them)
|
|
|
|
# or tabs (at least one of them) right before the trailing backslash
|
2017-10-31 13:12:52 +00:00
|
|
|
sc_prohibit_backslash_alignment:
|
2017-12-04 10:12:06 +00:00
|
|
|
@prohibit='( | )\\$$' \
|
2017-10-31 13:12:52 +00:00
|
|
|
in_vc_files='*\.([chx]|am|mk)$$' \
|
|
|
|
halt='Do not attempt to right-align backslashes' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2018-07-13 17:54:40 +00:00
|
|
|
# Some syntax rules pertaining to the usage of cleanup macros
|
|
|
|
# implementing GNU C's cleanup attribute
|
|
|
|
|
2019-01-04 15:44:32 +00:00
|
|
|
# Rule to ensure that variables declared using a cleanup macro are
|
2018-07-13 17:54:40 +00:00
|
|
|
# always initialized.
|
|
|
|
sc_require_attribute_cleanup_initialization:
|
2019-02-26 16:02:58 +00:00
|
|
|
@prohibit='VIR_AUTO((FREE|PTR|UNREF|CLEAN)\(.+\)|CLOSE|STRINGLIST) *[^=]+;' \
|
2018-07-13 17:54:40 +00:00
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
halt='variable declared with a cleanup macro must be initialized' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2019-03-12 08:08:00 +00:00
|
|
|
# "class" in headers is not good because by default Vim treats it as a keyword
|
|
|
|
# Let's prohibit it in source files as well.
|
|
|
|
sc_prohibit_class:
|
|
|
|
@prohibit=' +_?class *;' \
|
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
halt='use klass instead of class or _class' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2019-04-02 12:33:06 +00:00
|
|
|
# The dirent "d_type" field is non-portable and even when it
|
|
|
|
# exists some filesystems will only ever return DT_UNKNOWN.
|
|
|
|
# This field should only be used by code which is exclusively
|
|
|
|
# run platforms supporting "d_type" and must expect DT_UNKNOWN.
|
|
|
|
# We blacklist it to discourage accidental usage which has
|
|
|
|
# happened many times. Add an exclude rule if it is genuinely
|
|
|
|
# needed and the above restrictions are acceptable.
|
|
|
|
sc_prohibit_dirent_d_type:
|
|
|
|
@prohibit='(->|\.)d_type' \
|
|
|
|
in_vc_files='\.[chx]$$' \
|
|
|
|
halt='do not use the d_type field in "struct dirent"' \
|
|
|
|
$(_sc_search_regexp)
|
|
|
|
|
2019-03-12 08:08:00 +00:00
|
|
|
|
2009-07-07 16:08:45 +00:00
|
|
|
# We don't use this feature of maint.mk.
|
|
|
|
prev_version_file = /dev/null
|
2009-07-10 08:01:04 +00:00
|
|
|
|
2014-06-04 21:48:20 +00:00
|
|
|
ifneq ($(_gl-Makefile),)
|
2009-07-10 08:01:04 +00:00
|
|
|
ifeq (0,$(MAKELEVEL))
|
2017-04-12 11:09:08 +00: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 19:08:01 +00:00
|
|
|
_clean_requested = $(filter %clean,$(MAKECMDGOALS))
|
2017-04-12 11:09:08 +00: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...)
|
2019-04-01 15:33:03 +00:00
|
|
|
$(shell touch $(srcdir)/AUTHORS)
|
build: avoid infinite autogen loop
Several people have reported that if the .gnulib submodule is dirty,
then 'make' will go into an infinite loop attempting to rerun bootstrap,
because that never cleans up the dirty submodule. By default, we
should halt and make the user investigate, but if the user doesn't
know why or care that the submodule is dirty, I also added the ability
to 'make CLEAN_SUBMODULE=1' to get things going again.
Also, while testing this, I noticed that when a submodule update was
needed, 'make' would first run autoreconf, then bootstrap (which
reruns autoreconf); adding a strategic dependency allows for less work.
* .gnulib: Update to latest, for maint.mk improvements.
* cfg.mk (_autogen): Also hook maint.mk, to run before autoreconf.
* autogen.sh (bootstrap): Refuse to run if gnulib is dirty, unless
user requests discarding gnulib changes.
2012-10-01 15:10:20 +00:00
|
|
|
maint.mk Makefile: _autogen
|
2009-07-10 08:01:04 +00:00
|
|
|
endif
|
|
|
|
endif
|
2014-06-04 21:48:20 +00:00
|
|
|
endif
|
2010-01-15 10:09:01 +00:00
|
|
|
|
build: avoid infinite autogen loop
Several people have reported that if the .gnulib submodule is dirty,
then 'make' will go into an infinite loop attempting to rerun bootstrap,
because that never cleans up the dirty submodule. By default, we
should halt and make the user investigate, but if the user doesn't
know why or care that the submodule is dirty, I also added the ability
to 'make CLEAN_SUBMODULE=1' to get things going again.
Also, while testing this, I noticed that when a submodule update was
needed, 'make' would first run autoreconf, then bootstrap (which
reruns autoreconf); adding a strategic dependency allows for less work.
* .gnulib: Update to latest, for maint.mk improvements.
* cfg.mk (_autogen): Also hook maint.mk, to run before autoreconf.
* autogen.sh (bootstrap): Refuse to run if gnulib is dirty, unless
user requests discarding gnulib changes.
2012-10-01 15:10:20 +00: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 11:09:08 +00:00
|
|
|
.PHONY: _autogen_error
|
|
|
|
_autogen_error:
|
|
|
|
$(srcdir)/autogen.sh --dry-run
|
|
|
|
|
2014-06-04 21:48:20 +00:00
|
|
|
ifneq ($(_gl-Makefile),)
|
2017-06-26 06:45:44 +00:00
|
|
|
syntax-check: spacing-check test-wrap-argv \
|
2018-12-13 13:32:06 +00:00
|
|
|
prohibit-duplicate-header mock-noinline group-qemu-caps \
|
|
|
|
header-ifdef
|
2019-06-17 16:19:03 +00:00
|
|
|
@if ! cppi --version >/dev/null 2>&1; then \
|
|
|
|
echo "*****************************************************" >&2; \
|
|
|
|
echo "* cppi not installed, some checks have been skipped *" >&2; \
|
|
|
|
echo "*****************************************************" >&2; \
|
|
|
|
fi
|
2014-06-04 21:48:20 +00:00
|
|
|
endif
|
2012-10-17 09:25:35 +00:00
|
|
|
|
2016-06-15 16:01:24 +00:00
|
|
|
# Don't include duplicate header in the source (either *.c or *.h)
|
|
|
|
prohibit-duplicate-header:
|
2019-01-03 19:30:39 +00:00
|
|
|
$(AM_V_GEN)$(VC_LIST_EXCEPT) | $(GREP) '\.[chx]$$' | xargs \
|
|
|
|
$(PERL) -W $(top_srcdir)/build-aux/prohibit-duplicate-header.pl
|
2016-06-15 16:01:24 +00:00
|
|
|
|
2016-06-15 07:15:38 +00:00
|
|
|
spacing-check:
|
2019-01-03 19:30:39 +00:00
|
|
|
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.c$$' | xargs \
|
|
|
|
$(PERL) $(top_srcdir)/build-aux/check-spacing.pl || \
|
2017-06-26 06:45:44 +00:00
|
|
|
{ echo '$(ME): incorrect formatting' 1>&2; exit 1; }
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2017-04-07 14:07:49 +00:00
|
|
|
mock-noinline:
|
2019-01-03 19:30:39 +00:00
|
|
|
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.[ch]$$' | xargs \
|
|
|
|
$(PERL) $(top_srcdir)/build-aux/mock-noinline.pl
|
2017-04-07 14:07:49 +00:00
|
|
|
|
2018-12-13 13:32:06 +00:00
|
|
|
header-ifdef:
|
2019-01-03 19:30:39 +00:00
|
|
|
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.[h]$$' | xargs \
|
|
|
|
$(PERL) $(top_srcdir)/build-aux/header-ifdef.pl
|
2018-12-13 13:32:06 +00:00
|
|
|
|
2015-11-06 13:20:06 +00:00
|
|
|
test-wrap-argv:
|
2019-01-03 19:30:39 +00:00
|
|
|
$(AM_V_GEN)$(VC_LIST) | $(GREP) -E '\.(ldargs|args)' | xargs \
|
|
|
|
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check
|
2015-11-06 13:20:06 +00:00
|
|
|
|
2018-04-12 06:16:12 +00:00
|
|
|
group-qemu-caps:
|
2018-12-14 14:10:48 +00:00
|
|
|
$(AM_V_GEN)$(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check $(top_srcdir)/
|
2018-04-12 06:16:12 +00:00
|
|
|
|
2011-06-28 15:50:11 +00:00
|
|
|
# sc_po_check can fail if generated files are not built first
|
2011-07-12 16:52:56 +00:00
|
|
|
sc_po_check: \
|
2018-02-20 13:16:28 +00:00
|
|
|
$(srcdir)/src/remote/remote_daemon_dispatch_stubs.h \
|
|
|
|
$(srcdir)/src/remote/remote_daemon_dispatch_qemu_stubs.h \
|
2015-04-16 12:23:16 +00:00
|
|
|
$(srcdir)/src/remote/remote_client_bodies.h \
|
2018-01-19 11:30:31 +00:00
|
|
|
$(srcdir)/src/admin/admin_server_dispatch_stubs.h \
|
2015-04-16 12:23:16 +00:00
|
|
|
$(srcdir)/src/admin/admin_client.h
|
2018-02-20 13:16:28 +00:00
|
|
|
$(srcdir)/src/remote/remote_daemon_dispatch_stubs.h: $(srcdir)/src/remote/remote_protocol.x
|
|
|
|
$(MAKE) -C src remote/remote_daemon_dispatch_stubs.h
|
|
|
|
$(srcdir)/src/remote/remote_daemon_dispatch_qemu_stubs.h: $(srcdir)/src/remote/qemu_protocol.x
|
|
|
|
$(MAKE) -C src remote/remote_daemon_dispatch_qemu_stubs.h
|
2011-07-12 16:52:56 +00:00
|
|
|
$(srcdir)/src/remote/remote_client_bodies.h: $(srcdir)/src/remote/remote_protocol.x
|
2011-06-28 15:50:11 +00:00
|
|
|
$(MAKE) -C src remote/remote_client_bodies.h
|
2018-01-19 11:30:31 +00:00
|
|
|
$(srcdir)/src/admin/admin_server_dispatch_stubs.h: $(srcdir)/src/admin/admin_protocol.x
|
|
|
|
$(MAKE) -C src admin/admin_server_dispatch_stubs.h
|
2015-04-16 12:23:16 +00:00
|
|
|
$(srcdir)/src/admin/admin_client.h: $(srcdir)/src/admin/admin_protocol.x
|
|
|
|
$(MAKE) -C src admin/admin_client.h
|
2011-06-28 15:50:11 +00:00
|
|
|
|
2011-03-16 21:25:56 +00:00
|
|
|
# List all syntax-check exemptions:
|
2015-06-15 16:53:58 +00:00
|
|
|
exclude_file_name_regexp--sc_avoid_strcase = ^tools/vsh\.h$$
|
2011-03-31 02:26:27 +00:00
|
|
|
|
2017-03-07 09:34:47 +00: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
|
2017-09-20 11:03:47 +00:00
|
|
|
_test1=shunloadtest|virnettlscontexttest|virnettlssessiontest|vircgroupmock|commandhelper
|
2011-03-16 21:25:56 +00:00
|
|
|
exclude_file_name_regexp--sc_avoid_write = \
|
2018-02-20 13:16:28 +00:00
|
|
|
^(src/($(_src1))|tools/virsh-console|tests/($(_test1)))\.c$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2016-04-12 22:29:52 +00:00
|
|
|
exclude_file_name_regexp--sc_bindtextdomain = .*
|
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_gettext_init = ^(tests|examples)/
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2016-04-11 15:00:26 +00:00
|
|
|
exclude_file_name_regexp--sc_copyright_format = \
|
|
|
|
^cfg\.mk$$
|
|
|
|
|
2013-05-14 23:41:15 +00:00
|
|
|
exclude_file_name_regexp--sc_copyright_usage = \
|
2013-05-14 23:25:02 +00:00
|
|
|
^COPYING(|\.LESSER)$$
|
2012-07-26 22:58:02 +00:00
|
|
|
|
2014-02-26 09:25:30 +00:00
|
|
|
exclude_file_name_regexp--sc_flags_usage = \
|
2018-12-07 12:21:43 +00:00
|
|
|
^(cfg\.mk|docs/|src/util/virnetdevtap\.c$$|tests/((vir(cgroup|pci|test|usb)|nss|qemuxml2argv|qemusecurity)mock|virfilewrapper)\.c$$)
|
2011-07-08 15:18:48 +00:00
|
|
|
|
2011-04-23 21:00:26 +00:00
|
|
|
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
|
2012-08-20 13:06:21 +00:00
|
|
|
^(src/rpc/gendispatch\.pl$$|tests/)
|
2011-04-23 21:00:26 +00:00
|
|
|
|
2010-12-10 12:27:33 +00:00
|
|
|
exclude_file_name_regexp--sc_po_check = ^(docs/|src/rpc/gendispatch\.pl$$)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_VIR_ERR_NO_MEMORY = \
|
2018-02-20 13:16:28 +00:00
|
|
|
^(cfg\.mk|include/libvirt/virterror\.h|src/remote/remote_daemon_dispatch\.c|src/util/virerror\.c|docs/internals/oomtesting\.html\.in)$$
|
2016-04-11 15:00:26 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_PATH_MAX = \
|
|
|
|
^cfg\.mk$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2016-04-11 15:00:26 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_access_xok = \
|
|
|
|
^(cfg\.mk|src/util/virutil\.c)$$
|
2011-03-18 20:41:13 +00:00
|
|
|
|
2011-03-16 21:25:56 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_asprintf = \
|
2016-05-15 14:04:51 +00:00
|
|
|
^(cfg\.mk|bootstrap.conf$$|examples/|src/util/virstring\.[ch]$$|tests/vircgroupmock\.c$$)
|
2011-04-11 22:25:25 +00:00
|
|
|
|
2013-04-04 18:16:43 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strdup = \
|
2017-09-20 11:03:47 +00:00
|
|
|
^(docs/|examples/|src/util/virstring\.c|tests/vir(netserverclient|cgroup)mock.c|tests/commandhelper\.c$$)
|
2013-04-04 18:16:43 +00:00
|
|
|
|
2011-03-16 21:25:56 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_close = \
|
2018-12-07 12:21:43 +00:00
|
|
|
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/(vir.+mock\.c|commandhelper\.c|qemusecuritymock\.c))$$)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
|
2018-03-28 20:46:41 +00:00
|
|
|
(^tests/(virhostcpu|virpcitest)data/|docs/js/.*\.js|docs/fonts/.*\.woff|\.diff|tests/virconfdata/no-newline\.conf$$)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2018-02-20 13:16:28 +00:00
|
|
|
_src2=src/(util/vircommand|libvirt|lxc/lxc_controller|locking/lock_daemon|logging/log_daemon|remote/remote_daemon)
|
2011-03-16 21:25:56 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
|
2018-02-20 13:16:28 +00:00
|
|
|
(^($(_src2)|tests/testutils)\.c$$)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2018-02-12 10:03:08 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_gethostname = ^src/util/vir(util|log)\.c$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2011-09-20 18:11:32 +00: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 18:11:32 +00:00
|
|
|
|
2018-04-13 14:41:17 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_raw_virclassnew = \
|
|
|
|
^src/util/virobject\.[hc]$$
|
|
|
|
|
2011-04-23 21:00:26 +00: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 21:00:26 +00:00
|
|
|
|
2011-03-16 21:25:56 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
2019-05-22 16:16:59 +00:00
|
|
|
^((po|tests|examples)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2016-04-11 15:00:26 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_select = \
|
|
|
|
^cfg\.mk$$
|
|
|
|
|
2018-04-30 14:55:57 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
|
2018-10-18 12:57:19 +00:00
|
|
|
^(cfg\.mk|tests/virfilemock\.c)$$
|
2018-04-30 14:55:57 +00:00
|
|
|
|
2012-02-02 22:47:04 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
2017-09-20 11:03:47 +00:00
|
|
|
^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c)$$
|
2012-02-02 22:47:04 +00:00
|
|
|
|
2012-05-16 15:52:44 +00: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 21:25:56 +00:00
|
|
|
|
2012-12-13 17:44:57 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/virutil\.c$$
|
2011-06-22 22:18:01 +00:00
|
|
|
|
Rewrite all the DTrace/SystemTAP probing
The libvirtd daemon had a few crude system tap probes. Some of
these were broken during the RPC rewrite. The new modular RPC
code is structured in a way that allows much more effective
tracing. Instead of trying to hook up the original probes,
define a new set of probes for the RPC and event code.
The master probes file is now src/probes.d. This contains
probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
probes for the poll event loop.
The src/dtrace2systemtap.pl script can convert the probes.d
file into a libvirt_probes.stp file to make use from systemtap
much simpler.
The src/rpc/gensystemtap.pl script can generate a set of
systemtap functions for translating RPC enum values into
printable strings. This works for all RPC header enums (program,
type, status, procedure) and also the authentication enum
The PROBE macro will automatically generate a VIR_DEBUG
statement, so any place with a PROBE can remove any existing
manual DEBUG statements.
* daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
* daemon/libvirtd.h: Remove probe macros
* daemon/Makefile.am: Remove all probe buildings/install
* daemon/remote.c: Update authentication probes
* src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
to generate STP files
* src/internal.h: Add probe macros
* src/probes.d: Master list of probes
* src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
src/util/event_poll.c: Insert probe points, removing any
DEBUG statements that duplicate the info
2011-09-30 13:40:23 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_sprintf = \
|
2016-04-11 15:00:26 +00:00
|
|
|
^(cfg\.mk|docs/hacking\.html\.in|.*\.stp|.*\.pl)$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2013-04-03 10:36:23 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virstring\.c$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2016-05-15 14:04:51 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_strtol = ^examples/.*$$
|
2012-04-19 00:06:59 +00:00
|
|
|
|
2012-12-13 18:13:21 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/virxml\.c$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2012-02-24 18:48:55 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
|
|
|
|
|
2012-03-23 07:34:09 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
|
|
|
|
|
2013-05-31 17:52:51 +00:00
|
|
|
exclude_file_name_regexp--sc_require_config_h = \
|
tests: fix mocking of stat() / lstat() functions
Quite a few of the tests have a need to mock the stat() / lstat()
functions and they are taking somewhat different & inconsistent
approaches none of which are actually fully correct. This is shown
by fact that 'make check' fails on 32-bit hosts. Investigation
revealed that the code was calling into the native C library impl,
not getting intercepted by our mocks.
The POSIX stat() function might resolve to any number of different
symbols in the C library.
The may be an additional stat64() function exposed by the headers
too.
On 64-bit hosts the stat & stat64 functions are identical, always
refering to the 64-bit ABI.
On 32-bit hosts they refer to the 32-bit & 64-bit ABIs respectively.
Libvirt uses _FILE_OFFSET_BITS=64 on 32-bit hosts, which causes the
C library to transparently rewrite stat() calls to be stat64() calls.
Libvirt will never see the 32-bit ABI from the traditional stat()
call. We cannot assume this rewriting is done using a macro. It might
be, but on GLibC it is done with a magic __asm__ statement to apply
the rewrite at link time instead of at preprocessing.
In GLibC there may be two additional functions exposed by the headers,
__xstat() and __xstat64(). When these exist, stat() and stat64() are
transparently rewritten to call __xstat() and __xstat64() respectively.
The former symbols will not actally exist in the library at all, only
the header. The leading "__" indicates the symbols are a private impl
detail of the C library that applications should not care about.
Unfortunately, because we are trying to mock replace the C library,
we need to know about this internal impl detail.
With all this in mind the list of functions we have to mock will depend
on several factors
- If _FILE_OFFSET_BITS is set, then we are on a 32-bit host, and we
only need to mock stat64 and __xstat64. The other stat / __xstat
functions exist, but we'll never call them so they can be ignored
for mocking.
- If _FILE_OFFSET_BITS is not set, then we are on a 64-bit host and
we should mock stat, stat64, __xstat & __xstat64. Either may be
called by app code.
- If __xstat & __xstat64 exist, then stat & stat64 will not exist
as symbols in the library, so the latter should not be mocked.
The same all applies to lstat()
These rules are complex enough that we don't want to duplicate them
across every mock file, so this centralizes all the logic in a helper
file virmockstathelper.c that should be #included when needed. The
code merely need to provide a filename rewriting callback called
virMockStatRedirect(). Optionally VIR_MOCK_STAT_HOOK can be defined
as a macro if further processing is needed inline.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-04-01 16:47:25 +00:00
|
|
|
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers.c)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2013-05-31 17:52:51 +00:00
|
|
|
exclude_file_name_regexp--sc_require_config_h_first = \
|
tests: fix mocking of stat() / lstat() functions
Quite a few of the tests have a need to mock the stat() / lstat()
functions and they are taking somewhat different & inconsistent
approaches none of which are actually fully correct. This is shown
by fact that 'make check' fails on 32-bit hosts. Investigation
revealed that the code was calling into the native C library impl,
not getting intercepted by our mocks.
The POSIX stat() function might resolve to any number of different
symbols in the C library.
The may be an additional stat64() function exposed by the headers
too.
On 64-bit hosts the stat & stat64 functions are identical, always
refering to the 64-bit ABI.
On 32-bit hosts they refer to the 32-bit & 64-bit ABIs respectively.
Libvirt uses _FILE_OFFSET_BITS=64 on 32-bit hosts, which causes the
C library to transparently rewrite stat() calls to be stat64() calls.
Libvirt will never see the 32-bit ABI from the traditional stat()
call. We cannot assume this rewriting is done using a macro. It might
be, but on GLibC it is done with a magic __asm__ statement to apply
the rewrite at link time instead of at preprocessing.
In GLibC there may be two additional functions exposed by the headers,
__xstat() and __xstat64(). When these exist, stat() and stat64() are
transparently rewritten to call __xstat() and __xstat64() respectively.
The former symbols will not actally exist in the library at all, only
the header. The leading "__" indicates the symbols are a private impl
detail of the C library that applications should not care about.
Unfortunately, because we are trying to mock replace the C library,
we need to know about this internal impl detail.
With all this in mind the list of functions we have to mock will depend
on several factors
- If _FILE_OFFSET_BITS is set, then we are on a 32-bit host, and we
only need to mock stat64 and __xstat64. The other stat / __xstat
functions exist, but we'll never call them so they can be ignored
for mocking.
- If _FILE_OFFSET_BITS is not set, then we are on a 64-bit host and
we should mock stat, stat64, __xstat & __xstat64. Either may be
called by app code.
- If __xstat & __xstat64 exist, then stat & stat64 will not exist
as symbols in the library, so the latter should not be mocked.
The same all applies to lstat()
These rules are complex enough that we don't want to duplicate them
across every mock file, so this centralizes all the logic in a helper
file virmockstathelper.c that should be #included when needed. The
code merely need to provide a filename rewriting callback called
virMockStatRedirect(). Optionally VIR_MOCK_STAT_HOOK can be defined
as a macro if further processing is needed inline.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
2019-04-01 16:47:25 +00:00
|
|
|
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers.c)
|
2011-03-16 21:25:56 +00:00
|
|
|
|
2012-04-26 10:11:49 +00:00
|
|
|
exclude_file_name_regexp--sc_trailing_blank = \
|
2018-03-28 20:46:41 +00:00
|
|
|
/sysinfodata/.*\.data|/virhostcpudata/.*\.cpuinfo|^gnulib/local/.*/.*diff$$
|
2011-03-16 21:25:56 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_unmarked_diagnostics = \
|
2016-10-26 08:37:06 +00:00
|
|
|
^(docs/apibuild.py|tests/virt-aa-helper-test|docs/js/.*\.js)$$
|
2012-03-29 09:52:04 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_size_of_brackets = cfg.mk
|
2011-07-06 16:20:04 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_correct_id_types = \
|
|
|
|
(^src/locking/lock_protocol.x$$)
|
Add some autoconf helper macros for checking for libraries
Most checks for libraries take the same format
* --with-libFOO=yes|no|check|/some/path argument
* check for a function NNN in libFOO.so
* check for a header file DDD/HHH.h
* Define a WITH_FOO config.h symbol
* Define a WITH_FOO make conditional
* Substitute FOO_CFLAGS and FOO_LIBS make variables
* Print CFLAGS & LIBS summary at the end
Doing all this correctly is rather difficult, typically
done by copy+paste of a previous usage. Further small
improvements people make are not applied to all previous
usages.
Improve this by creating some helper macros to apply
good practice. First, to perform the actual checks:
LIBVIRT_CHECK_LIB([SELINUX], [selinux],
[getfilecon], [selinux/selinux.h])
This checks for 'getfilecon' in -lselinux, and the
existence of 'selinux/selinux.h' header file. If successful
it sets SELINUX_CFLAGS and SELINUX_LIBS. The WITH_SELINUX
config.h macro and WITH_SELINUX make conditional are also
defined.
In some cases we need to check two variants of the same
library
LIBVIRT_CHECK_LIB_ALT([SASL], [sasl2],
[sasl_client_init], [sasl/sasl.h],
[SASL1], [sasl],
[sasl_client_init], [sasl/sasl.h])
This checks for sasl_client_init in libsasl2, and if that
is not found, checks sasl_client_init in libsasl. If the
first check succeeds WITH_SASL is set, while if the second
check succeeds *both* WITH_SASL and WITH_SASL1 are set.
If the library supports pkg-config, then another variant
is available
LIBVIRT_CHECK_PKG([AVAHI], [avahi-client], [0.6.0])
This checks for avahi-client >= 0.6.0 via pkg-config
and sets WITH_AVAHI if found.
Finally to print a summary of CFLAGS & LIBs found (if any):
LIBVIRT_RESULT_LIB([SELINUX])
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-09-19 17:46:30 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4
|
2013-04-17 10:19:18 +00:00
|
|
|
|
2013-04-17 10:19:19 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \
|
2019-02-08 08:54:40 +00:00
|
|
|
^(src/internal\.h$$|tools/wireshark/src/packet-libvirt.c$$)
|
2013-04-17 10:19:19 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \
|
2015-11-26 14:02:49 +00:00
|
|
|
^(tools/|examples/|include/libvirt/(virterror|libvirt(-(admin|qemu|lxc))?)\.h$$)
|
2013-07-08 14:17:29 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_int_ijk = \
|
2016-05-23 23:00:07 +00: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 10:19:27 +00:00
|
|
|
|
2016-10-06 14:54:41 +00: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 10:19:27 +00: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 11:25:51 +00: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 10:29:12 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_empty_first_line = \
|
2018-02-21 12:51:32 +00:00
|
|
|
^(README|src/esx/README|tests/(vmwarever|virhostcpu)data/.*)$$
|
2014-09-10 13:52:48 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_useless_translation = \
|
|
|
|
^tests/virpolkittest.c
|
2014-10-01 14:07:46 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_devname = \
|
|
|
|
^(tools/virsh.pod|cfg.mk|docs/.*)$$
|
2014-11-30 14:57:02 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_virXXXFree = \
|
2014-12-01 12:30:16 +00: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 10:26:49 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_sysconf_pagesize = \
|
|
|
|
^(cfg\.mk|src/util/virutil\.c)$$
|
2015-03-20 15:25:15 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_pthread_create = \
|
|
|
|
^(cfg\.mk|src/util/virthread\.c|tests/.*)$$
|
2015-10-20 16:15:12 +00:00
|
|
|
|
virtestmock: Mock stat() properly
There is a lot to explain, but I try to make it as short as
possible. I'd start by pasting some parts of sys/stat.h:
extern int stat (const char *__restrict __file,
struct stat *__restrict __buf) __THROW __nonnull ((1, 2));
extern int __REDIRECT_NTH (stat, (const char *__restrict __file,
struct stat *__restrict __buf), stat64)
__nonnull ((1, 2));
__extern_inline int
__NTH (stat (const char *__path, struct stat *__statbuf))
{
return __xstat (_STAT_VER, __path, __statbuf);
}
Only one of these is effective at once, due to some usage of
the mess we are dealing with in here. So, basically, while
compiling or linking stat() in our code can be transformed into
some other func. Or a dragon.
Now, if you read stat(2) manpage, esp. "C library/kernel
differences" section, you'll learn that glibc uses some tricks
for older applications to work. I haven't gotten around actual
code that does this, but based on my observations, if 'stat'
symbol is found, glibc assumes it's dealing with ancient
application. Unfortunately, it can be just ours stat coming from
our mock. Therefore, calling stat() from a test will end up in
our mock. But since glibc is not exposing the symbol anymore, our
call of real_stat() will SIGSEGV immediately as the pointer to
function is NULL. Therefore, we should expose only those symbols
we know glibc has.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
2016-05-17 14:26:53 +00:00
|
|
|
exclude_file_name_regexp--sc_prohibit_always-defined_macros = \
|
|
|
|
^tests/virtestmock.c$$
|
2016-06-21 14:53:42 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_readdir = \
|
2017-04-03 12:29:45 +00:00
|
|
|
^tests/(.*mock|virfilewrapper)\.c$$
|
2017-02-20 13:54:12 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_cross_inclusion = \
|
|
|
|
^(src/util/virclosecallbacks\.h|src/util/virhostdev\.h)$$
|
2019-04-02 12:33:06 +00:00
|
|
|
|
|
|
|
exclude_file_name_regexp--sc_prohibit_dirent_d_type = \
|
|
|
|
^(src/util/vircgroup.c)$
|