2008-01-29 20:42:39 +03:00
# Customize Makefile.maint. -*- makefile -*-
2013-01-10 00:50:03 +04:00
# Copyright (C) 2008-2013 Red Hat, Inc.
2011-01-07 03:17:32 +03:00
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
2008-01-29 20:42:39 +03: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-27 02:58:02 +04:00
# along with this program. If not, see
# <http://www.gnu.org/licenses/>.
2008-01-29 20:42:39 +03: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-28 00:39:40 +04:00
# We use .gnulib, not gnulib.
gnulib_dir = $( srcdir) /.gnulib
2011-05-04 18:18:06 +04:00
# List of additional files that we want to pick up in our POTFILES.in
# This is all gnulib files, as well as generated files for RPC code.
generated_files = \
2011-06-28 23:38:27 +04:00
$( srcdir) /daemon/*_dispatch.h \
2013-09-08 01:22:18 +04:00
$( srcdir) /src/*/*_dispatch.h \
2011-05-04 18:18:06 +04:00
$( srcdir) /src/remote/*_client_bodies.h \
2013-09-08 01:22:18 +04:00
$( srcdir) /src/*/*_protocol.[ ch] \
2011-05-04 18:18:06 +04:00
$( srcdir) /gnulib/lib/*.[ ch]
2011-11-30 03:42:23 +04:00
# We haven't converted all scripts to using gnulib's init.sh yet.
_test_script_regex = \< \( init\| test-lib\) \. sh\>
2008-01-29 20:42:39 +03:00
# Tests not to run as part of "make distcheck".
local-checks-to-skip = \
2009-01-29 15:11:49 +03:00
changelog-check \
2008-01-29 20:42:39 +03:00
makefile-check \
2009-01-29 15:11:49 +03:00
makefile_path_separator_check \
patch-check \
2008-01-29 20:42:39 +03:00
sc_GPL_version \
sc_always_defined_macros \
sc_cast_of_alloca_return_value \
2010-04-21 19:55:03 +04:00
sc_cross_check_PATH_usage_in_tests \
2008-01-29 20:42:39 +03:00
sc_dd_max_sym_length \
sc_error_exit_success \
sc_file_system \
2009-01-29 15:11:49 +03:00
sc_immutable_NEWS \
sc_makefile_path_separator_check \
2008-01-29 20:42:39 +03:00
sc_obsolete_symbols \
2009-01-29 15:11:49 +03:00
sc_prohibit_S_IS_definition \
2008-01-29 20:42:39 +03:00
sc_prohibit_atoi_atof \
2010-02-23 19:54:32 +03:00
sc_prohibit_hash_without_use \
2008-01-29 20:42:39 +03:00
sc_prohibit_jm_in_m4 \
sc_prohibit_quote_without_use \
sc_prohibit_quotearg_without_use \
2009-01-29 15:11:49 +03:00
sc_prohibit_stat_st_blocks \
2008-01-29 20:42:39 +03:00
sc_root_tests \
sc_space_tab \
sc_sun_os_names \
sc_system_h_headers \
2010-03-26 02:37:31 +03:00
sc_texinfo_acronym \
2009-01-29 15:11:49 +03:00
sc_tight_scope \
2008-01-29 20:42:39 +03:00
sc_two_space_separator_in_usage \
2009-07-06 21:17:06 +04:00
sc_error_message_uppercase \
sc_program_name \
sc_require_test_exit_idiom \
sc_makefile_check \
2009-01-29 15:11:49 +03:00
sc_useless_cpp_parens
2008-02-07 19:49:29 +03:00
2012-07-10 19:37:07 +04: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.
i f e q ( $( filter dist %, $ ( MAKECMDGOALS ) ) , )
local-checks-to-skip += sc_vulnerable_makefile_CVE-2012-3386
e l s e
2012-08-17 02:18:44 +04:00
distdir : sc_vulnerable_makefile_CVE -2012-3386.z
2012-07-10 19:37:07 +04:00
e n d i f
2010-11-30 23:29:19 +03:00
# Files that should never cause syntax check failures.
2011-07-08 19:13:53 +04:00
VC_LIST_ALWAYS_EXCLUDE_REGEX = \
( ^( HACKING| docs/( news\. html\. in| .*\. patch) ) | \. po) $$
2010-11-30 23:29:19 +03:00
# Functions like free() that are no-ops on NULL arguments.
2010-05-18 00:38:59 +04:00
useless_free_options = \
2013-01-24 04:34:48 +04:00
--name= VBOX_UTF16_FREE \
--name= VBOX_UTF8_FREE \
--name= VBOX_COM_UNALLOC_MEM \
2010-05-18 00:38:59 +04:00
--name= VIR_FREE \
2011-02-08 17:22:39 +03:00
--name= qemuCapsFree \
2011-01-24 21:06:16 +03:00
--name= qemuMigrationCookieFree \
2011-02-17 16:17:59 +03:00
--name= qemuMigrationCookieGraphicsFree \
2010-05-18 00:38:59 +04:00
--name= sexpr_free \
2013-01-08 16:42:26 +04:00
--name= usbFreeDevice \
2011-07-22 18:07:25 +04:00
--name= virBandwidthDefFree \
2010-05-21 08:23:48 +04:00
--name= virBitmapFree \
2010-05-18 00:38:59 +04:00
--name= virCPUDefFree \
--name= virCapabilitiesFree \
--name= virCapabilitiesFreeGuest \
--name= virCapabilitiesFreeGuestDomain \
--name= virCapabilitiesFreeGuestFeature \
--name= virCapabilitiesFreeGuestMachine \
--name= virCapabilitiesFreeHostNUMACell \
--name= virCapabilitiesFreeMachines \
--name= virCgroupFree \
2010-05-25 15:14:06 +04:00
--name= virCommandFree \
2010-05-18 00:38:59 +04:00
--name= virConfFreeList \
--name= virConfFreeValue \
2011-06-26 12:09:00 +04:00
--name= virDomainActualNetDefFree \
2010-05-18 00:38:59 +04:00
--name= virDomainChrDefFree \
domain_conf: split source data out from ChrDef
This opens up the possibility of reusing the smaller ChrSourceDef
for both qemu monitor and a passthrough smartcard device.
* src/conf/domain_conf.h (_virDomainChrDef): Factor host
details...
(_virDomainChrSourceDef): ...into new struct.
(virDomainChrSourceDefFree): New prototype.
* src/conf/domain_conf.c (virDomainChrDefFree)
(virDomainChrDefParseXML, virDomainChrDefFormat): Split...
(virDomainChrSourceDefClear, virDomainChrSourceDefFree)
(virDomainChrSourceDefParseXML, virDomainChrSourceDefFormat):
...into new functions.
(virDomainChrDefParseTargetXML): Update clients to reflect type
split.
* src/vmx/vmx.c (virVMXParseSerial, virVMXParseParallel)
(virVMXFormatSerial, virVMXFormatParallel): Likewise.
* src/xen/xen_driver.c (xenUnifiedDomainOpenConsole): Likewise.
* src/xen/xend_internal.c (xenDaemonParseSxprChar)
(xenDaemonFormatSxprChr): Likewise.
* src/vbox/vbox_tmpl.c (vboxDomainDumpXML, vboxAttachSerial)
(vboxAttachParallel): Likewise.
* src/security/security_dac.c (virSecurityDACSetChardevLabel)
(virSecurityDACSetChardevCallback)
(virSecurityDACRestoreChardevLabel)
(virSecurityDACRestoreChardevCallback): Likewise.
* src/security/security_selinux.c (SELinuxSetSecurityChardevLabel)
(SELinuxSetSecurityChardevCallback)
(SELinuxRestoreSecurityChardevLabel)
(SELinuxSetSecurityChardevCallback): Likewise.
* src/security/virt-aa-helper.c (get_files): Likewise.
* src/lxc/lxc_driver.c (lxcVmStart, lxcDomainOpenConsole):
Likewise.
* src/uml/uml_conf.c (umlBuildCommandLineChr): Likewise.
* src/uml/uml_driver.c (umlIdentifyOneChrPTY, umlIdentifyChrPTY)
(umlDomainOpenConsole): Likewise.
* src/qemu/qemu_command.c (qemuBuildChrChardevStr)
(qemuBuildChrArgStr, qemuBuildCommandLine)
(qemuParseCommandLineChr): Likewise.
* src/qemu/qemu_domain.c (qemuDomainObjPrivateXMLFormat)
(qemuDomainObjPrivateXMLParse): Likewise.
* src/qemu/qemu_cgroup.c (qemuSetupChardevCgroup): Likewise.
* src/qemu/qemu_hotplug.c (qemuDomainAttachNetDevice): Likewise.
* src/qemu/qemu_driver.c (qemudFindCharDevicePTYsMonitor)
(qemudFindCharDevicePTYs, qemuPrepareChardevDevice)
(qemuPrepareMonitorChr, qemudShutdownVMDaemon)
(qemuDomainOpenConsole): Likewise.
* src/qemu/qemu_command.h (qemuBuildChrChardevStr)
(qemuBuildChrArgStr): Delete, now that they are static.
* src/libvirt_private.syms (domain_conf.h): New exports.
* cfg.mk (useless_free_options): Update list.
* tests/qemuxml2argvtest.c (testCompareXMLToArgvFiles): Update
tests.
2011-01-08 01:45:01 +03:00
--name= virDomainChrSourceDefFree \
2010-05-18 00:38:59 +04:00
--name= virDomainControllerDefFree \
--name= virDomainDefFree \
--name= virDomainDeviceDefFree \
--name= virDomainDiskDefFree \
--name= virDomainEventCallbackListFree \
--name= virDomainEventFree \
--name= virDomainEventQueueFree \
2011-01-06 01:27:40 +03:00
--name= virDomainEventStateFree \
2010-05-18 00:38:59 +04:00
--name= virDomainFSDefFree \
--name= virDomainGraphicsDefFree \
--name= virDomainHostdevDefFree \
--name= virDomainInputDefFree \
--name= virDomainNetDefFree \
--name= virDomainObjFree \
2011-01-10 19:41:33 +03:00
--name= virDomainSmartcardDefFree \
2010-05-18 00:38:59 +04:00
--name= virDomainSnapshotDefFree \
--name= virDomainSnapshotObjFree \
--name= virDomainSoundDefFree \
--name= virDomainVideoDefFree \
--name= virDomainWatchdogDefFree \
2011-07-12 01:26:33 +04:00
--name= virFileDirectFdFree \
2011-02-19 00:30:24 +03:00
--name= virHashFree \
2010-05-18 00:38:59 +04:00
--name= virInterfaceDefFree \
--name= virInterfaceIpDefFree \
--name= virInterfaceObjFree \
--name= virInterfaceProtocolDefFree \
--name= virJSONValueFree \
--name= virLastErrFreeData \
2010-12-06 20:03:22 +03:00
--name= virNetMessageFree \
2011-03-02 20:11:42 +03:00
--name= virNetServerMDNSFree \
--name= virNetServerMDNSEntryFree \
--name= virNetServerMDNSGroupFree \
2010-05-18 00:38:59 +04:00
--name= virNWFilterDefFree \
--name= virNWFilterEntryFree \
--name= virNWFilterHashTableFree \
--name= virNWFilterIPAddrLearnReqFree \
--name= virNWFilterIncludeDefFree \
2011-01-15 18:06:52 +03:00
--name= virNWFilterObjFree \
2010-05-18 00:38:59 +04:00
--name= virNWFilterRuleDefFree \
--name= virNWFilterRuleInstFree \
--name= virNetworkDefFree \
--name= virNetworkObjFree \
--name= virNodeDeviceDefFree \
--name= virNodeDeviceObjFree \
Add a generic reference counted virObject type
This introduces a fairly basic reference counted virObject type
and an associated virClass type, that use atomic operations for
ref counting.
In a global initializer (recommended to be invoked using the
virOnceInit API), a virClass type must be allocated for each
object type. This requires a class name, a "dispose" callback
which will be invoked to free memory associated with the object's
fields, and the size in bytes of the object struct.
eg,
virClassPtr connclass = virClassNew("virConnect",
sizeof(virConnect),
virConnectDispose);
The struct for the object, must include 'virObject' as its
first member
eg
struct _virConnect {
virObject object;
virURIPtr uri;
};
The 'dispose' callback is only responsible for freeing
fields in the object, not the object itself. eg a suitable
impl for the above struct would be
void virConnectDispose(void *obj) {
virConnectPtr conn = obj;
virURIFree(conn->uri);
}
There is no need to reset fields to 'NULL' or '0' in the
dispose callback, since the entire object will be memset
to 0, and the klass pointer & magic integer fields will
be poisoned with 0xDEADBEEF before being free()d
When creating an instance of an object, one needs simply
pass the virClassPtr eg
virConnectPtr conn = virObjectNew(connclass);
if (!conn)
return NULL;
conn->uri = virURIParse("foo:///bar")
Object references can be manipulated with
virObjectRef(conn)
virObjectUnref(conn)
The latter returns a true value, if the object has been
freed (ie its ref count hit zero)
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-07-11 17:35:44 +04:00
--name= virObjectUnref \
--name= virObjectFreeCallback \
2013-06-05 00:00:46 +04:00
--name= virPCIDeviceFree \
2010-05-18 00:38:59 +04:00
--name= virSecretDefFree \
--name= virStorageEncryptionFree \
--name= virStorageEncryptionSecretFree \
2011-07-14 14:53:45 +04:00
--name= virStorageFileFreeMetadata \
2010-05-18 00:38:59 +04:00
--name= virStoragePoolDefFree \
--name= virStoragePoolObjFree \
--name= virStoragePoolSourceFree \
--name= virStorageVolDefFree \
2010-12-08 09:19:06 +03:00
--name= virThreadPoolFree \
2011-08-19 00:54:43 +04:00
--name= xmlBufferFree \
2010-05-18 00:38:59 +04:00
--name= xmlFree \
2011-08-19 00:54:43 +04:00
--name= xmlFreeDoc \
2012-01-25 04:16:16 +04:00
--name= xmlFreeNode \
2010-05-18 00:38:59 +04:00
--name= xmlXPathFreeContext \
2008-02-07 19:49:29 +03: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 20:28:10 +04:00
2010-05-18 00:38:59 +04: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 virDomainEventFree
# y virDomainEventQueueFree
# y virDomainFSDefFree
# n virDomainFree
# n virDomainFreeName (can't fix -- returns int)
# y virDomainGraphicsDefFree
# y virDomainHostdevDefFree
# y virDomainInputDefFree
# y virDomainNetDefFree
# y virDomainObjFree
# y virDomainSnapshotDefFree
# n virDomainSnapshotFree (returns int)
# n virDomainSnapshotFreeName (returns int)
# y virDomainSnapshotObjFree
# y virDomainSoundDefFree
# y virDomainVideoDefFree
# y virDomainWatchdogDefFree
# n virDrvNodeGetCellsFreeMemory (returns int)
# n virDrvNodeGetFreeMemory (returns long long)
2011-09-20 22:11:32 +04:00
# n virFree - dereferences param
2010-05-18 00:38:59 +04: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 18:06:52 +03:00
# n virNWFilterFreeName (returns int)
# y virNWFilterObjFree
# n virNWFilterObjListFree FIXME
2010-05-18 00:38:59 +04:00
# y virNWFilterRuleDefFree
# n virNWFilterRuleFreeInstanceData (typedef)
# y virNWFilterRuleInstFree
# y virNetworkDefFree
# n virNetworkFree (returns int)
# n virNetworkFreeName (returns int)
# y virNetworkObjFree
# n virNetworkObjListFree FIXME
# 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 20:28:10 +04:00
# Avoid uses of write(2). Either switch to streams (fwrite), or use
# the safewrite wrapper.
sc_avoid_write :
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-04-01 03:02:10 +04:00
@prohibit= '\<write *\(' \
in_vc_files = '\.c$$' \
halt = 'consider using safewrite instead of write' \
2010-05-19 14:51:11 +04: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 20:28:10 +04:00
2011-07-08 19:18:48 +04:00
# In debug statements, print flags as bitmask and mode_t as octal.
sc_flags_debug :
@prohibit= '\<mode=%[0-9.]*[diux]' \
2011-07-07 21:57:43 +04:00
halt = 'use %o to debug mode_t values' \
2011-07-08 19:18:48 +04:00
$( _sc_search_regexp)
2011-07-07 21:57:43 +04:00
@prohibit= '[Ff]lags=%[0-9.]*l*[diou]' \
halt = 'use %x to debug flag values' \
$( _sc_search_regexp)
# Prefer 'unsigned int flags', along with checks for unknown flags.
# For historical reasons, we are stuck with 'unsigned long flags' in
# migration, so check for those known 4 instances and no more in public
# API. Also check that no flags are marked unused, and 'unsigned' should
# appear before any declaration of a flags variable (achieved by
# prohibiting the word prior to the type from ending in anything other
# than d). The existence of long long, and of documentation about
# flags, makes the regex in the third test slightly harder.
sc_flags_usage :
@test " $$ (cat $( srcdir) /include/libvirt/libvirt.h.in \
$( srcdir) /include/libvirt/virterror.h \
$( srcdir) /include/libvirt/libvirt-qemu.h \
Introduce an LXC specific public API & library
This patch introduces support for LXC specific public APIs. In
common with what was done for QEMU, this creates a libvirt_lxc.so
library and libvirt/libvirt-lxc.h header file.
The actual APIs are
int virDomainLxcOpenNamespace(virDomainPtr domain,
int **fdlist,
unsigned int flags);
int virDomainLxcEnterNamespace(virDomainPtr domain,
unsigned int nfdlist,
int *fdlist,
unsigned int *noldfdlist,
int **oldfdlist,
unsigned int flags);
which provide a way to use the setns() system call to move the
calling process into the container's namespace. It is not
practical to write in a generically applicable manner. The
nearest that we could get to such an API would be an API which
allows to pass a command + argv to be executed inside a
container. Even if we had such a generic API, this LXC specific
API is still useful, because it allows the caller to maintain
the current process context, in particular any I/O streams they
have open.
NB the virDomainLxcEnterNamespace() API is special in that it
runs client side, so does not involve the internal driver API.
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
2012-12-21 17:15:19 +04:00
$( srcdir) /include/libvirt/libvirt-lxc.h \
2011-07-07 21:57:43 +04:00
| grep -c '\(long\|unsigned\) flags' ) " != 4 && \
{ echo '$(ME): new API should use "unsigned int flags"' 1>& 2; \
exit 1; } || :
@prohibit= ' flags ' 'ATTRIBUTE_UNUSED' \
halt = 'flags should be checked with virCheckFlags' \
$( _sc_search_regexp)
@prohibit= '^[^@]*([^d] (int|long long)|[^dg] long) flags[;,)]' \
halt = 'flags should be unsigned' \
2011-07-08 19:18:48 +04:00
$( _sc_search_regexp)
2011-09-20 22:11:32 +04: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 21:33:35 +04:00
@prohibit= 'vir(Free|AllocN?|ReallocN|(Insert|Delete)ElementsN|File(Close|Fclose|Fdopen)) *\(' \
2011-09-20 22:11:32 +04:00
halt = 'use VIR_ macros instead of internal functions' \
$( _sc_search_regexp)
2012-02-03 02:47:04 +04:00
# Avoid raw malloc and free, except in documentation comments.
sc_prohibit_raw_allocation :
@prohibit= '^.[^*].*\<((m|c|re)alloc|free) *\([^)]' \
2012-12-12 22:06:53 +04:00
halt = 'use VIR_ macros from viralloc.h instead of malloc/free' \
2012-02-03 02:47:04 +04:00
$( _sc_search_regexp)
2010-11-20 03:25:23 +03:00
# Avoid functions that can lead to double-close bugs.
sc_prohibit_close :
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-28 01:16:14 +03:00
@prohibit= '([^>.]|^)\<[fp]?close *\(' \
2010-11-20 03:25:23 +03:00
halt = 'use VIR_{FORCE_}[F]CLOSE instead of [f]close' \
$( _sc_search_regexp)
@prohibit= '\<fdopen *\(' \
halt = 'use VIR_FDOPEN instead of fdopen' \
$( _sc_search_regexp)
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-28 01:16:14 +03:00
# Prefer virCommand for all child processes.
sc_prohibit_fork_wrappers :
@prohibit= '= *\<(fork|popen|system) *\(' \
halt = 'use virCommand for child processes' \
$( _sc_search_regexp)
2012-10-31 18:13:47 +04:00
# Prefer mkostemp with O_CLOEXEC.
sc_prohibit_mkstemp :
@prohibit= '[^"]\<mkstemps? *\(' \
halt = 'use mkostemp with O_CLOEXEC instead of mkstemp' \
$( _sc_search_regexp)
2011-03-18 23:41:13 +03: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 :
@prohibit= 'access' '(at)? *\(.*X_OK' \
halt = 'use virFileIsExecutable instead of access' '(,X_OK)' \
$( _sc_search_regexp)
2010-11-18 02:41:31 +03: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 23:01:15 +04:00
snp_ = strncmp *\( .+\)
2010-11-18 02:41:31 +03:00
sc_prohibit_strncmp :
2012-03-02 04:21:08 +04:00
@prohibit= '! *strncmp *\(|\<$(snp_) *[!=]=|[!=]= *$(snp_)' \
exclude = ':# *define STR(N?EQLEN|PREFIX)\(' \
2012-09-05 03:40:04 +04:00
halt = 'use STREQLEN or STRPREFIX instead of str' 'ncmp' \
2012-03-02 04:21:08 +04: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 20:28:10 +04:00
2012-04-19 04:06:59 +04:00
# strtol and friends are too easy to misuse
sc_prohibit_strtol :
@prohibit= '\bstrto(u?ll?|[ui]max) *\(' \
exclude = 'exempt from syntax-check' \
2012-09-05 03:40:04 +04:00
halt = 'use virStrToLong_*, not strtol variants' \
2012-04-19 04:06:59 +04:00
$( _sc_search_regexp)
@prohibit= '\bstrto[df] *\(' \
exclude = 'exempt from syntax-check' \
2012-09-05 03:40:04 +04:00
halt = 'use virStrToDouble, not strtod variants' \
2012-04-19 04:06:59 +04:00
$( _sc_search_regexp)
2010-08-19 03:31:39 +04:00
# Use virAsprintf rather than as'printf since *strp is undefined on error.
2013-05-02 23:35:26 +04: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 20:28:10 +04:00
sc_prohibit_asprintf :
2010-11-23 02:39:47 +03:00
@prohibit= '\<v?a[s]printf\>' \
2010-08-19 03:31:39 +04:00
halt = 'use virAsprintf, not as' printf \
$( _sc_search_regexp)
2013-05-02 23:35:26 +04:00
@prohibit= 'virAsprintf.*, *"%s",' \
2013-04-04 22:16:43 +04:00
halt = 'use VIR_STRDUP instead of virAsprintf with "%s"' \
$( _sc_search_regexp)
sc_prohibit_strdup :
@prohibit= '\<strn?dup\> *\(' \
halt = 'use VIR_STRDUP, not strdup' \
2013-05-02 23:35:26 +04:00
$( _sc_search_regexp)
2010-08-19 03:31:39 +04:00
2011-06-23 02:18:01 +04:00
# Prefer virSetUIDGID.
sc_prohibit_setuid :
@prohibit= '\<set(re)?[ug]id\> *\(' \
halt = 'use virSetUIDGID, not raw set*id' \
$( _sc_search_regexp)
2013-03-15 02:28:29 +04:00
# Don't compare *id_t against raw -1.
sc_prohibit_risky_id_promotion :
@prohibit= '\b(user|group|[ug]id) *[=!]= *-' \
halt = 'cast -1 to ([ug]id_t) before comparing against id' \
$( _sc_search_regexp)
2010-08-19 03:31:39 +04:00
# Use snprintf rather than s'printf, even if buffer is provably large enough,
# since gnulib has more guarantees for snprintf portability
sc_prohibit_sprintf :
@prohibit= '\<[s]printf\>' \
halt = 'use snprintf, not s' printf \
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-04-01 03:02:10 +04: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 20:28:10 +04:00
2009-12-21 22:14:46 +03:00
sc_prohibit_readlink :
util: do a better job of matching up pids with their binaries
This patch resolves: https://bugzilla.redhat.com/show_bug.cgi?id=871201
If libvirt is restarted after updating the dnsmasq or radvd packages,
a subsequent "virsh net-destroy" will fail to kill the dnsmasq/radvd
process.
The problem is that when libvirtd restarts, it re-reads the dnsmasq
and radvd pidfiles, then does a sanity check on each pid it finds,
including checking that the symbolic link in /proc/$pid/exe actually
points to the same file as the path used by libvirt to execute the
binary in the first place. If this fails, libvirt assumes that the
process is no longer alive.
But if the original binary has been replaced, the link in /proc is set
to "$binarypath (deleted)" (it literally has the string " (deleted)"
appended to the link text stored in the filesystem), so even if a new
binary exists in the same location, attempts to resolve the link will
fail.
In the end, not only is the old dnsmasq/radvd not terminated when the
network is stopped, but a new dnsmasq can't be started when the
network is later restarted (because the original process is still
listening on the ports that the new process wants).
The solution is, when the initial "use stat to check for identical
inodes" check for identity between /proc/$pid/exe and $binpath fails,
to check /proc/$pid/exe for a link ending with " (deleted)" and if so,
truncate that part of the link and compare what's left with the
original binarypath.
A twist to this problem is that on systems with "merged" /sbin and
/usr/sbin (i.e. /sbin is really just a symlink to /usr/sbin; Fedora
17+ is an example of this), libvirt may have started the process using
one path, but /proc/$pid/exe lists a different path (indeed, on F17
this is the case - libvirtd uses /sbin/dnsmasq, but /proc/$pid/exe
shows "/usr/sbin/dnsmasq"). The further bit of code to resolve this is
to call virFileResolveAllLinks() on both the original binarypath and
on the truncated link we read from /proc/$pid/exe, and compare the
results.
The resulting code still succeeds in all the same cases it did before,
but also succeeds if the binary was deleted or replaced after it was
started.
2012-10-30 02:05:41 +04:00
@prohibit= '\<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-04-01 03:02:10 +04:00
halt = 'use virFileResolveLink, not readlink' \
$( _sc_search_regexp)
2009-12-21 22:14:46 +03:00
2009-10-23 14:13:20 +04:00
sc_prohibit_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-04-01 03:02:10 +04:00
@prohibit= 'gethostname *\(' \
halt = 'use virGetHostname, not gethostname' \
$( _sc_search_regexp)
2009-10-23 14:13:20 +04:00
2010-03-18 16:05:44 +03:00
sc_prohibit_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-04-01 03:02:10 +04:00
@prohibit= 'gettext_noop *\(' \
halt = 'use N_, not gettext_noop' \
$( _sc_search_regexp)
2010-03-18 16:05:44 +03: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 20:28:10 +04:00
sc_prohibit_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-04-01 03:02:10 +04:00
@prohibit= '\<V' 'IR_ERR_NO_MEMORY\>' \
halt = 'use virReportOOMError, not V' IR_ERR_NO_MEMORY \
$( _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 20:28:10 +04:00
2012-05-25 17:14:07 +04:00
sc_prohibit_PATH_MAX :
@prohibit= '\<P' 'ATH_MAX\>' \
halt = 'dynamically allocate paths, do not use P' ATH_MAX \
$( _sc_search_regexp)
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-04-01 03:02:10 +04:00
# Use a subshell for each function, to give the optimal warning message.
2009-10-01 18:55:09 +04:00
i n c l u d e $( srcdir ) / M a k e f i l e . n o n r e e n t r a n t
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 20:28:10 +04:00
sc_prohibit_nonreentrant :
@fail= 0 ; \
for i in $( NON_REENTRANT) ; \
do \
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-04-01 03:02:10 +04:00
( prohibit = " \\< $$ i *\\( " \
halt = " use $$ {i}_r, not $$ i " \
$( _sc_search_regexp) \
) || fail = 1; \
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 20:28:10 +04:00
done ; \
exit $$ fail
2013-05-13 17:43:20 +04:00
sc_prohibit_select :
@prohibit= "\\<select *\\(" \
halt = "use poll(), not se" "lect()" \
$( _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 20:28:10 +04:00
# Prohibit the inclusion of <ctype.h>.
sc_prohibit_ctype_h :
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-04-01 03:02:10 +04:00
@prohibit= '^# *include *<ctype\.h>' \
halt = "don't use ctype.h; instead, use c-ctype.h" \
2010-05-19 14:51:11 +04: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 20:28:10 +04:00
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-11 03:08:11 +04:00
# Insist on correct types for [pug]id.
sc_correct_id_types :
@prohibit= '\<(int|long) *[pug]id\>' \
halt = "use pid_t for pid, uid_t for uid, gid_t for gid" \
$( _sc_search_regexp)
2013-09-24 20:41:54 +04: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 23:57:19 +04:00
# Also requires that all 'fooPtr' typedefs are actually pointers.
2013-09-24 20:41:54 +04:00
sc_forbid_const_pointer_typedef :
@prohibit= '(^|[^"])const \w*Ptr' \
halt = '"const fooPtr var" does not declare what you meant' \
$( _sc_search_regexp)
2013-10-29 23:57:19 +04:00
@prohibit= 'typedef [^(]+ [^*]\w*Ptr\b' \
halt = 'use correct style and type for Ptr typedefs' \
$( _sc_search_regexp)
2013-09-24 20:41:54 +04:00
2012-03-29 13:52:04 +04:00
# Forbid sizeof foo or sizeof (foo), require sizeof(foo)
sc_size_of_brackets :
@prohibit= 'sizeof\s' \
halt = 'use sizeof(foo), not sizeof (foo) or sizeof foo' \
$( _sc_search_regexp)
2011-02-04 21:16:35 +03:00
# Ensure that no C source file, docs, or rng schema uses TABs for
2010-04-05 18:17:31 +04:00
# indentation. Also match *.h.in files, to get libvirt.h.in. Exclude
# files in gnulib, since they're imported.
2012-07-27 16:51:28 +04:00
space_indent_files = ( \. ( 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 20:28:10 +04:00
sc_TAB_in_indentation :
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-04-01 03:02:10 +04:00
@prohibit= '^ * ' \
2011-03-14 17:36:26 +03:00
in_vc_files = '$(space_indent_files)$$' \
2012-01-26 18:30:36 +04:00
halt = 'indent with space, not TAB, in C, sh, html, py, syms and RNG schemas' \
2010-05-19 14:51:11 +04: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 20:28:10 +04:00
ctype_re = isalnum| isalpha| isascii| isblank| iscntrl| isdigit| isgraph| islower\
| i s p r i n t | i s p u n c t | i s s p a c e | i s u p p e r | i s x d i g i t | t o l o w e r | t o u p p e r
sc_avoid_ctype_macros :
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-04-01 03:02:10 +04:00
@prohibit= '\b($(ctype_re)) *\(' \
halt = "don't use ctype macros (use c-ctype.h)" \
2010-05-19 14:51:11 +04: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 20:28:10 +04:00
2011-03-31 06:26:27 +04:00
sc_avoid_strcase :
@prohibit= '\bstrn?case(cmp|str) *\(' \
halt = "don't use raw strcase functions (use c-strcase instead)" \
$( _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 20:28:10 +04:00
sc_prohibit_virBufferAdd_with_string_literal :
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-04-01 03:02:10 +04:00
@prohibit= '\<virBufferAdd *\([^,]+, *"[^"]' \
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 20:28:10 +04:00
2013-05-07 15:42:40 +04:00
sc_prohibit_virBufferAsprintf_with_string_literal :
@prohibit= '\<virBufferAsprintf *\([^,]+, *"([^%"\]|\\.|%%)*"\)' \
halt = 'use virBufferAddLit, not virBufferAsprintf, 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 20:28:10 +04:00
# Not only do they fail to deal well with ipv6, but the gethostby*
# functions are also not thread-safe.
sc_prohibit_gethostby :
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-04-01 03:02:10 +04:00
@prohibit= '\<gethostby(addr|name2?) *\(' \
halt = 'use getaddrinfo, not gethostby*' \
$( _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 20:28:10 +04:00
2013-04-26 00:24:42 +04:00
# dirname and basename from <libgen.h> are not required to be thread-safe
sc_prohibit_libgen :
@prohibit= '( (base|dir)name *\(|include .libgen\.h)' \
halt = 'use functions from gnulib "dirname.h", not <libgen.h>' \
$( _sc_search_regexp)
2010-11-24 23:08:55 +03:00
# raw xmlGetProp requires some nasty casts
sc_prohibit_xmlGetProp :
@prohibit= '\<xmlGetProp *\(' \
halt = 'use virXMLPropString, not xmlGetProp' \
$( _sc_search_regexp)
2012-02-24 22:48:55 +04:00
# xml(ParseURI|SaveUri) doesn't handle IPv6 URIs well
sc_prohibit_xmlURI :
@prohibit= '\<xml(ParseURI|SaveUri) *\(' \
halt = 'use virURI(Parse|Format), not xml(ParseURI|SaveUri)' \
$( _sc_search_regexp)
2012-03-23 11:34:09 +04:00
# we don't want old old-style return with parentheses around argument
sc_prohibit_return_as_function :
@prohibit= '\<return *\(([^()]*(\([^()]*\)[^()]*)*)\) *;' \
halt = 'avoid extra () with return statements' \
$( _sc_search_regexp)
2011-07-09 01:58:28 +04:00
# ATTRIBUTE_UNUSED should only be applied in implementations, not
# header declarations
sc_avoid_attribute_unused_in_header :
@prohibit= '^[^#]*ATTRIBUTE_UNUSED([^:]|$$)' \
in_vc_files = '\.h$$' \
halt = 'use ATTRIBUTE_UNUSED in .c rather than .h files' \
$( _sc_search_regexp)
2013-07-08 18:17:29 +04:00
sc_prohibit_int_ijk :
2013-10-22 20:09:57 +04:00
@prohibit= '\<(int|unsigned) ([^(]* )*(i|j|k)\>(\s|,|;)' \
2013-07-08 18:17:29 +04:00
halt = 'use size_t, not int/unsigned int for loop vars i, j, k' \
$( _sc_search_regexp)
sc_prohibit_loop_iijjkk :
2013-10-22 20:09:57 +04:00
@prohibit= '\<(int|unsigned) ([^=]+ )*(ii|jj|kk)\>(\s|,|;)' \
2013-08-08 02:44:58 +04:00
halt = 'use i, j, k for loop iterators, not ii, jj, kk' \
2013-07-08 18:17:29 +04:00
$( _sc_search_regexp)
2013-08-08 02:44:58 +04:00
# RHEL 5 gcc can't grok "for (int i..."
sc_prohibit_loop_var_decl :
@prohibit= '\<for *\(\w+[ *]+\w+' \
in_vc_files = '\.[ch]$$' \
halt = 'declare loop iterators outside the for statement' \
$( _sc_search_regexp)
2013-07-08 18:17:29 +04: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 20:28:10 +04: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 10:30:49 +04: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 20:28:10 +04:00
msg_gen_function += lxcError
msg_gen_function += regerror
2010-05-12 21:23:06 +04:00
msg_gen_function += vah_error
msg_gen_function += vah_warning
2011-04-17 10:30:49 +04: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 20:28:10 +04:00
msg_gen_function += virLibConnError
msg_gen_function += virLibDomainError
2011-04-17 10:30:49 +04:00
msg_gen_function += virLibDomainSnapshotError
msg_gen_function += virLibInterfaceError
msg_gen_function += virLibNetworkError
msg_gen_function += virLibNodeDeviceError
msg_gen_function += virLibNWFilterError
msg_gen_function += virLibSecretError
msg_gen_function += virLibStoragePoolError
msg_gen_function += virLibStorageVolError
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 20:28:10 +04:00
msg_gen_function += virRaiseError
2012-07-18 14:23:56 +04: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 20:28:10 +04:00
msg_gen_function += virReportErrorHelper
msg_gen_function += virReportSystemError
2010-03-31 14:24:25 +04:00
msg_gen_function += xenapiSessionErrorHandler
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 20:28:10 +04: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
2012-07-26 18:29:15 +04:00
func_or := $( shell echo $( msg_gen_function) | tr -s ' ' '|' )
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 20:28:10 +04:00
func_re := ( $( func_or) )
# Look for diagnostics that aren't marked for translation.
# This won't find any for which error's format string is on a separate line.
# The sed filters eliminate false-positives like these:
# _("...: "
# "%s", _("no storage vol w..."
sc_libvirt_unmarked_diagnostics :
2012-03-02 04:21:08 +04:00
@prohibit= '\<$(func_re) *\([^"]*"[^"]*[a-z]{3}' \
exclude = '_\(' \
2012-09-05 03:40:04 +04:00
halt = 'found unmarked diagnostic(s)' \
2012-03-02 04:21:08 +04: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 20:28:10 +04:00
@{ grep -nE '\<$(func_re) *\(.*;$$' $$ ( $( VC_LIST_EXCEPT) ) ; \
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$ ( $( VC_LIST_EXCEPT) ) ; } \
2012-05-01 01:55:13 +04:00
| sed 's/_("\([^\"]\|\\.\)\+"//;s/[ ]"%s"//' \
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 20:28:10 +04:00
| grep '[ ]"' && \
{ echo '$(ME): found unmarked diagnostic(s)' 1>& 2; \
exit 1; } || :
2009-07-07 20:08:45 +04:00
2010-05-20 13:13:41 +04:00
# Like the above, but prohibit a newline at the end of a diagnostic.
# This is subject to false positives partly because it naively looks for
# `\n"', which may not be the end of the string, and also because it takes
# two lines of context (the -A2) after the line with the function name.
# FIXME: this rule might benefit from a separate function list, in case
# there are functions to which this one applies but that do not get marked
# diagnostics.
sc_prohibit_newline_at_end_of_diagnostic :
@grep -A2 -nE \
'\<$(func_re) *\(' $$ ( $( VC_LIST_EXCEPT) ) \
| grep '\\n"' \
&& { echo '$(ME): newline at end of message(s)' 1>& 2; \
exit 1; } || :
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-24 00:33:08 +04:00
# Look for diagnostics that lack a % in the format string, except that we
# allow VIR_ERROR to do this, and ignore functions that take a single
# string rather than a format argument.
sc_prohibit_diagnostic_without_format :
@{ grep -nE '\<$(func_re) *\(.*;$$' $$ ( $( VC_LIST_EXCEPT) ) ; \
grep -A2 -nE '\<$(func_re) *\(.*,$$' $$ ( $( VC_LIST_EXCEPT) ) ; } \
| sed -rn -e ':l; /[,"]$$/ {N;b l;}' \
-e '/(xenapiSessionErrorHandler|vah_(error|warning))/d' \
-e '/\<$(func_re) *\([^"]*"([^%"]|"\n[^"]*")*"[,)]/p' \
| grep -vE 'VIR_ERROR' && \
{ echo '$(ME): found diagnostic without %' 1>& 2; \
exit 1; } || :
2012-07-11 01:43:08 +04:00
# The strings "" and "%s" should never be marked for translation.
2012-08-20 18:26:58 +04:00
# Files under tests/ and examples/ should not be translated.
2012-07-11 01:43:08 +04:00
sc_prohibit_useless_translation :
@prohibit= '_\("(%s)?"\)' \
2012-08-20 18:26:58 +04:00
halt = 'found useless translation' \
$( _sc_search_regexp)
@prohibit= '\<N?_ *\(' \
in_vc_files = '^(tests|examples)/' \
halt = 'no translations in tests or examples' \
2012-07-11 01:43:08 +04:00
$( _sc_search_regexp)
2012-09-12 20:54:42 +04:00
# When splitting a diagnostic across lines, ensure that there is a space
# or \n on one side of the split.
sc_require_whitespace_in_translation :
@grep -n -A1 '"$$' $$ ( $( VC_LIST_EXCEPT) ) \
| sed -ne ':l; /"$$/ {N;b l;}; s/"\n[^"]*"/""/g; s/\\n/ /g' \
-e '/_(.*[^\ ]""[^\ ]/p' | grep . && \
{ echo '$(ME): missing whitespace at line split' 1>& 2; \
exit 1; } || :
2010-03-10 00:22:14 +03:00
# Enforce recommended preprocessor indentation style.
sc_preprocessor_indentation :
2010-05-11 00:17:10 +04:00
@if cppi --version >/dev/null 2>& 1; then \
2011-05-06 17:11:32 +04:00
$( VC_LIST_EXCEPT) | grep '\.[ch]$$' | xargs cppi -a -c \
2010-03-10 00:22:14 +03:00
|| { echo '$(ME): incorrect preprocessor indentation' 1>& 2; \
exit 1; } ; \
else \
echo '$(ME): skipping test $@: cppi not installed' 1>& 2; \
fi
2013-01-10 00:50:03 +04:00
# Enforce similar spec file indentation style, by running cppi on a
# (comment-only) C file that mirrors the same layout as the spec file.
sc_spec_indentation :
@if cppi --version >/dev/null 2>& 1; then \
for f in $$ ( $( VC_LIST_EXCEPT) | grep '\.spec\.in$$' ) ; do \
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| " ; \
done | { if grep . >& 2; then false; else :; fi ; } \
|| { echo '$(ME): incorrect preprocessor indentation' 1>& 2; \
exit 1; } ; \
else \
echo '$(ME): skipping test $@: cppi not installed' 1>& 2; \
fi
2013-09-04 06:39:16 +04:00
# Nested conditionals are easier to understand if we enforce that endifs
# can be paired back to the if
sc_makefile_conditionals :
@prohibit= '(else|endif)($$| *#)' \
in_vc_files = 'Makefile\.am' \
halt = 'match "if FOO" with "endif FOO" in Makefiles' \
$( _sc_search_regexp)
2013-07-17 21:47:01 +04:00
# Long lines can be harder to diff; too long, and git send-email chokes.
# For now, only enforce line length on files where we have intentionally
# fixed things and don't want to regress.
sc_prohibit_long_lines :
@prohibit= '.{90}' \
in_vc_files = '\.arg[sv]' \
halt = 'Wrap long lines in expected output files' \
$( _sc_search_regexp)
2013-07-18 19:37:52 +04:00
@prohibit= '.{80}' \
in_vc_files = 'Makefile\.am' \
halt = 'Wrap long lines in Makefiles' \
$( _sc_search_regexp)
2013-07-17 21:47:01 +04:00
2010-03-18 20:25:01 +03:00
sc_copyright_format :
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-04-01 03:02:10 +04:00
@require= 'Copyright .*Red ' Hat', Inc\.' \
containing = 'Copyright .*Red ' Hat \
halt = 'Red Hat copyright is missing Inc.' \
2010-05-19 14:51:11 +04:00
$( _sc_search_regexp)
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-04-01 03:02:10 +04:00
@prohibit= 'Copyright [^(].*Red ' Hat \
halt = 'consistently use (C) in Red Hat copyright' \
2010-05-19 14:51:11 +04:00
$( _sc_search_regexp)
2011-07-19 22:17:22 +04:00
@prohibit= '\<Red' 'Hat\>' \
halt = 'spell Red Hat as two words' \
$( _sc_search_regexp)
2010-05-19 14:51:11 +04:00
2012-07-27 02:58:02 +04:00
# Prefer the new URL listing over the old street address listing when
2013-05-15 03:41:15 +04:00
# calling out where to get a copy of the [L]GPL. Also, while we have
# to ship COPYING (GPL) alongside COPYING.LESSER (LGPL), we want any
# source file that calls out a top-level file to call out the LGPL
# version. Note that our typical copyright boilerplate refers to the
# license by name, not by reference to a top-level file.
sc_copyright_usage :
2012-07-27 02:58:02 +04:00
@prohibit= Boston,' MA' \
halt = 'Point to <http://www.gnu.org/licenses/>, not an address' \
$( _sc_search_regexp)
2013-05-15 03:41:15 +04:00
@require= 'COPYING\.LESSER' \
containing = 'COPYING' \
halt = 'Refer to COPYING.LESSER for LGPL' \
$( _sc_search_regexp)
@prohibit= 'COPYING\.LIB' \
halt = 'Refer to COPYING.LESSER for LGPL' \
$( _sc_search_regexp)
2012-07-27 02:58:02 +04:00
2010-05-19 14:51:11 +04:00
# Some functions/macros produce messages intended solely for developers
# and maintainers. Do not mark them for translation.
sc_prohibit_gettext_markup :
maint: omit translation for all VIR_INFO
We were 31/73 on whether to translate; since less than 50% translated
and since VIR_INFO is less than VIR_WARN which also doesn't translate,
this makes sense.
* cfg.mk (sc_prohibit_gettext_markup): Add VIR_INFO, since it
falls between WARN and DEBUG.
* daemon/libvirtd.c (qemudDispatchSignalEvent, remoteCheckAccess)
(qemudDispatchServer): Adjust offenders.
* daemon/remote.c (remoteDispatchAuthPolkit): Likewise.
* src/network/bridge_driver.c (networkReloadIptablesRules)
(networkStartNetworkDaemon, networkShutdownNetworkDaemon)
(networkCreate, networkDefine, networkUndefine): Likewise.
* src/qemu/qemu_driver.c (qemudDomainDefine)
(qemudDomainUndefine): Likewise.
* src/storage/storage_driver.c (storagePoolCreate)
(storagePoolDefine, storagePoolUndefine, storagePoolStart)
(storagePoolDestroy, storagePoolDelete, storageVolumeCreateXML)
(storageVolumeCreateXMLFrom, storageVolumeDelete): Likewise.
* src/util/bridge.c (brProbeVnetHdr): Likewise.
* po/POTFILES.in: Drop src/util/bridge.c.
2011-05-11 19:08:44 +04:00
@prohibit= '\<VIR_(WARN|INFO|DEBUG) *\(_\(' \
2010-05-19 14:51:11 +04:00
halt = 'do not mark these strings for translation' \
$( _sc_search_regexp)
2010-03-18 20:25:01 +03:00
2012-03-02 04:21:08 +04: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) ) )
sc_prohibit_cross_inclusion :
@for dir in $( cross_dirs) ; do \
case $$ dir in \
util/) safe = "util" ; ; \
2012-08-02 23:06:50 +04:00
locking/) \
safe = " ( $$ dir|util|conf|rpc) " ; ; \
2012-03-02 04:21:08 +04:00
cpu/ | locking/ | network/ | rpc/ | security/) \
safe = " ( $$ dir|util|conf) " ; ; \
xenapi/ | xenxs/ ) safe = " ( $$ dir|util|conf|xen) " ; ; \
*) safe = " ( $$ dir|util|conf|cpu|network|locking|rpc|security) " ; ; \
esac ; \
in_vc_files = " ^src/ $$ dir " \
prohibit = '^# *include .$(cross_dirs_re)' \
exclude = " # *include . $$ safe " \
halt = 'unsafe cross-directory include' \
$( _sc_search_regexp) \
done
2012-01-21 01:00:58 +04:00
# When converting an enum to a string, make sure that we track any new
# elements added to the enum by using a _LAST marker.
sc_require_enum_last_marker :
@grep -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' $$ ( $( VC_LIST_EXCEPT) ) \
| sed -ne '/VIR_ENUM_IMPL[^,]*,$$/N' \
-e '/VIR_ENUM_IMPL[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
| grep . && \
{ echo '$(ME): enum impl needs to use _LAST marker' 1>& 2; \
exit 1; } || :
2013-02-07 11:01:52 +04:00
# In Python files we don't want to end lines with a semicolon like in C
sc_prohibit_semicolon_at_eol_in_python :
@prohibit= '^[^#].*\;$$' \
in_vc_files = '\.py$$' \
halt = "Don't use semicolon at eol in python files" \
$( _sc_search_regexp)
2013-02-23 02:42:39 +04:00
# mymain() in test files should use return, not exit, for nicer output
sc_prohibit_exit_in_tests :
@prohibit= '\<exit *\(' \
in_vc_files = '^tests/' \
halt = 'use return, not exit(), in tests' \
$( _sc_search_regexp)
2013-04-17 14:25:57 +04:00
# Don't include duplicate header in the source (either *.c or *.h)
sc_prohibit_duplicate_header :
@fail= 0; for i in $$ ( $( VC_LIST_EXCEPT) | grep '\.[chx]$$' ) ; do \
awk ' /# *include.*\. h/ { \
match( $$ 0, /[ <"][^>" ] *[ " >]/); \
arr[ substr( $$ 0, RSTART + 1, RLENGTH - 2) ] ++; \
} \
END { \
for ( key in arr) { \
if ( arr[ key] > 1) { \
fail = 1; \
printf( "%d %s are included\n" , arr[ key] , key) ; \
} \
} \
if ( fail = = 1) { \
printf( "duplicate header(s) in " FILENAME "\n" ) ; \
exit 1; \
} \
} ' $$ i || fail = 1; \
done ; \
if test $$ fail -eq 1; then \
2013-05-28 19:49:53 +04:00
{ echo '$(ME): avoid duplicate headers' 1>& 2; exit 1; } \
2013-04-17 14:25:57 +04:00
fi ;
2013-04-17 14:19:18 +04:00
# Don't include "libvirt/*.h" in "" form.
2013-04-17 14:19:19 +04:00
sc_prohibit_include_public_headers_quote :
2013-04-17 14:19:18 +04:00
@prohibit= '# *include *"libvirt/.*\.h"' \
2013-04-17 14:19:19 +04:00
in_vc_files = '\.[ch]$$' \
halt = 'Do not include libvirt/*.h in internal source' \
$( _sc_search_regexp)
# Don't include "libvirt/*.h" in <> form. Except for external tools,
# e.g. Python binding, examples and tools subdirectories.
sc_prohibit_include_public_headers_brackets :
@prohibit= '# *include *<libvirt/.*\.h>' \
in_vc_files = '\.[ch]$$' \
2013-04-17 14:19:18 +04:00
halt = 'Do not include libvirt/*.h in internal source' \
$( _sc_search_regexp)
2013-05-31 21:52:51 +04:00
# <config.h> is only needed in .c files; .h files do not need it since
# .c files must include config.h before any other .h.
sc_prohibit_config_h_in_headers :
@prohibit= '^# *include\>.*config\.h' \
in_vc_files = '\.h$$' \
halt = 'headers should not include <config.h>' \
$( _sc_search_regexp)
2013-08-19 18:17:20 +04:00
sc_prohibit_unbounded_arrays_in_rpc :
@prohibit= '<>' \
in_vc_files = '\.x$$' \
halt = 'Arrays in XDR must have a upper limit set for <NNN>' \
$( _sc_search_regexp)
2013-10-09 14:19:27 +04:00
sc_prohibit_getenv :
@prohibit= '\b(secure_)?getenv *\(' \
exclude = 'exempt from syntax-check' \
halt = 'Use virGetEnv{Allow,Block}SUID instead of getenv' \
$( _sc_search_regexp)
2013-05-31 21:52:51 +04:00
2009-07-07 20:08:45 +04:00
# We don't use this feature of maint.mk.
prev_version_file = /dev/null
2009-07-10 12:01:04 +04:00
i f e q ( 0 , $( MAKELEVEL ) )
_curr_status = .git-module-status
2009-07-15 11:54:26 +04:00
# The sed filter accommodates those who check out on a commit from which
# no tag is reachable. In that case, git submodule status prints a "-"
# in column 1 and does not print a "git describe"-style string after the
# submodule name. Contrast these:
# -b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib
# b653eda3ac4864de205419d9f41eec267cb89eeb .gnulib (v0.0-2286-gb653eda)
2010-02-24 14:01:09 +03:00
# $ cat .git-module-status
# b653eda3ac4864de205419d9f41eec267cb89eeb
2012-12-04 00:12:09 +04:00
#
# Keep this logic in sync with autogen.sh.
2010-02-24 14:01:09 +03:00
_submodule_hash = sed 's/^[ +-]//;s/ .*//'
2009-07-15 11:54:26 +04:00
_update_required := $( shell \
2010-04-28 00:39:40 +04:00
cd '$(srcdir)' ; \
2011-02-11 20:35:54 +03:00
test -d .git || { echo 0; exit; } ; \
2010-08-10 18:58:16 +04:00
test -f po/Makevars || { echo 1; exit; } ; \
2012-11-15 00:20:55 +04:00
test -f AUTHORS || { echo 1; exit; } ; \
2013-07-04 00:43:11 +04:00
test "no-git" = " $$ (cat $( _curr_status) ) " && { echo 0; exit; } ; \
2010-03-10 20:03:29 +03:00
actual = $$ ( git submodule status | $( _submodule_hash) ; \
2010-04-03 00:52:35 +04:00
git hash-object bootstrap.conf; \
2011-11-09 04:06:27 +04:00
git ls-tree -d HEAD gnulib/local | awk '{print $$3}' ; \
2010-04-03 00:52:35 +04:00
git diff .gnulib) ; \
2009-07-15 11:54:26 +04:00
stamp = " $$ ( $( _submodule_hash) $( _curr_status) 2>/dev/null) " ; \
test " $$ stamp " = " $$ actual " ; echo $$ ?)
2010-04-06 23:08:01 +04:00
_clean_requested = $( filter %clean,$( MAKECMDGOALS) )
ifeq ( 1,$( _update_required) $( _clean_requested) )
2010-03-27 02:11:22 +03:00
$( info INFO: gnulib update required; running ./autogen.sh first)
2012-10-13 03:50:19 +04:00
$( shell touch $( srcdir) /AUTHORS $( srcdir) /ChangeLog)
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 19:10:20 +04:00
maint.mk Makefile : _autogen
2009-07-10 12:01:04 +04:00
endif
e n d i f
2010-01-15 13:09:01 +03: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 19:10:20 +04: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
2010-11-12 17:36:53 +03:00
# regenerate HACKING as part of the syntax-check
2012-10-17 13:25:35 +04:00
syntax-check : $( top_srcdir ) /HACKING bracket -spacing -check
bracket-spacing-check :
$( AM_V_GEN) files = ` $( VC_LIST) | grep '\.c$$' ` ; \
$( PERL) $( top_srcdir) /build-aux/bracket-spacing.pl $$ files || \
2013-05-28 19:49:53 +04:00
{ echo '$(ME): incorrect whitespace, see HACKING for rules' 1>& 2; \
2013-05-24 20:43:45 +04:00
exit 1; }
2011-03-17 00:25:56 +03:00
2011-06-28 19:50:11 +04:00
# sc_po_check can fail if generated files are not built first
2011-07-12 20:52:56 +04:00
sc_po_check : \
$( srcdir) /daemon/remote_dispatch.h \
$( srcdir) /daemon/qemu_dispatch.h \
2011-06-28 19:50:11 +04:00
$( srcdir) /src/remote/remote_client_bodies.h
2011-07-12 20:52:56 +04:00
$(srcdir)/daemon/remote_dispatch.h : $( srcdir ) /src /remote /remote_protocol .x
2011-06-28 19:50:11 +04:00
$( MAKE) -C daemon remote_dispatch.h
2011-07-12 20:52:56 +04:00
$(srcdir)/daemon/qemu_dispatch.h : $( srcdir ) /src /remote /qemu_protocol .x
$( MAKE) -C daemon qemu_dispatch.h
$(srcdir)/src/remote/remote_client_bodies.h : $( srcdir ) /src /remote /remote_protocol .x
2011-06-28 19:50:11 +04:00
$( MAKE) -C src remote/remote_client_bodies.h
2011-03-17 00:25:56 +03:00
# List all syntax-check exemptions:
2012-08-20 14:17:26 +04:00
exclude_file_name_regexp--sc_avoid_strcase = ^tools/virsh\. h$$
2011-03-31 06:26:27 +04:00
2013-05-09 22:59:04 +04:00
_src1 = libvirt| fdstream| qemu/qemu_monitor| util/( vircommand| virfile) | xen/xend_internal| rpc/virnetsocket| lxc/lxc_controller| locking/lock_daemon
2013-08-05 19:49:24 +04:00
_test1 = shunloadtest| virnettlscontexttest| virnettlssessiontest| vircgroupmock
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_avoid_write = \
2013-08-26 13:53:43 +04:00
^( src/( $( _src1) ) | daemon/libvirtd| tools/virsh-console| tests/( $( _test1) ) ) \. c$$
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_bindtextdomain = ^( tests| examples) /
2013-05-15 03:41:15 +04:00
exclude_file_name_regexp--sc_copyright_usage = \
2013-05-15 03:25:02 +04:00
^COPYING( | \. LESSER) $$
2012-07-27 02:58:02 +04:00
2013-10-23 17:44:40 +04:00
exclude_file_name_regexp--sc_flags_usage = ^( docs/| src/util/virnetdevtap\. c$$ | tests/vir( cgroup| pci) mock\. c$$ )
2011-07-08 19:18:48 +04:00
2011-04-24 01:00:26 +04:00
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
2012-08-20 17:06:21 +04:00
^( src/rpc/gendispatch\. pl$$ | tests/)
2011-04-24 01:00:26 +04:00
2010-12-10 15:27:33 +03:00
exclude_file_name_regexp--sc_po_check = ^( docs/| src/rpc/gendispatch\. pl$$ )
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_VIR_ERR_NO_MEMORY = \
2012-12-13 22:21:53 +04:00
^( include/libvirt/virterror\. h| daemon/dispatch\. c| src/util/virerror\. c) $$
2011-03-17 00:25:56 +03:00
2012-12-13 21:44:57 +04:00
exclude_file_name_regexp--sc_prohibit_access_xok = ^src/util/virutil\. c$$
2011-03-18 23:41:13 +03:00
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_asprintf = \
2013-06-07 19:10:28 +04:00
^( bootstrap.conf$$ | src/util/virstring\. [ ch] $$ | examples/domain-events/events-c/event-test\. c$$ | tests/vircgroupmock\. c$$ )
2011-04-12 02:25:25 +04:00
2013-04-04 22:16:43 +04:00
exclude_file_name_regexp--sc_prohibit_strdup = \
2013-11-22 20:42:22 +04:00
^( docs/| examples/| src/util/virstring\. c| tests/virnetserverclientmock.c$$ )
2013-04-04 22:16:43 +04:00
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_close = \
2013-10-23 19:55:02 +04:00
( \. p[ yl] $$ | ^docs/| ^( src/util/virfile\. c| src/libvirt\. c| tests/vir( cgroup| pci) mock\. c) $$ )
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
2013-11-05 18:07:49 +04:00
( ^tests/( qemuhelp| nodeinfo| virpcitest) data/| \. ( gif| ico| png| diff) $$ )
2011-03-17 00:25:56 +03:00
2012-12-12 20:27:01 +04:00
_src2 = src/( util/vircommand| libvirt| lxc/lxc_controller| locking/lock_daemon)
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
2011-07-08 19:13:53 +04:00
( ^( $( _src2) | tests/testutils| daemon/libvirtd) \. c$$ )
2011-03-17 00:25:56 +03:00
2012-12-13 21:44:57 +04:00
exclude_file_name_regexp--sc_prohibit_gethostname = ^src/util/virutil\. c$$
2011-03-17 00:25:56 +03:00
2011-09-20 22:11:32 +04:00
exclude_file_name_regexp--sc_prohibit_internal_functions = \
2012-12-13 21:44:57 +04:00
^src/( util/( viralloc| virutil| virfile) \. [ hc] | esx/esx_vi\. c) $$
2011-09-20 22:11:32 +04:00
2011-04-24 01:00:26 +04:00
exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
2010-12-10 15:27:33 +03:00
^src/rpc/gendispatch\. pl$$
2011-04-24 01:00:26 +04:00
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
2013-02-06 14:48:44 +04:00
^( ( po| tests) /| docs/.*( py| html\. in) | run.in$$ )
2011-03-17 00:25:56 +03:00
2012-02-03 02:47:04 +04:00
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
2013-03-28 18:36:52 +04:00
^( docs/hacking\. html\. in) | ( src/util/viralloc\. [ ch] | examples/.*| tests/securityselinuxhelper\. c| tests/vircgroupmock\. c) $$
2012-02-03 02:47:04 +04:00
2012-05-16 19:52:44 +04:00
exclude_file_name_regexp--sc_prohibit_readlink = \
2012-12-13 21:44:57 +04:00
^src/( util/virutil| lxc/lxc_container) \. c$$
2011-03-17 00:25:56 +03:00
2012-12-13 21:44:57 +04:00
exclude_file_name_regexp--sc_prohibit_setuid = ^src/util/virutil\. c$$
2011-06-23 02:18:01 +04: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 17:40:23 +04:00
exclude_file_name_regexp--sc_prohibit_sprintf = \
2011-10-07 19:36:05 +04:00
^( docs/hacking\. html\. in) | ( examples/systemtap/.*stp) | ( src/dtrace2systemtap\. pl) | ( src/rpc/gensystemtap\. pl) $$
2011-03-17 00:25:56 +03:00
2013-04-03 14:36:23 +04:00
exclude_file_name_regexp--sc_prohibit_strncpy = ^src/util/virstring\. c$$
2011-03-17 00:25:56 +03:00
2012-04-19 04:06:59 +04:00
exclude_file_name_regexp--sc_prohibit_strtol = \
2012-12-13 19:07:43 +04:00
^src/( util/virsexpr| ( vbox| xen| xenxs) /.*) \. c$$
2012-04-19 04:06:59 +04:00
2012-12-13 22:13:21 +04:00
exclude_file_name_regexp--sc_prohibit_xmlGetProp = ^src/util/virxml\. c$$
2011-03-17 00:25:56 +03:00
2012-02-24 22:48:55 +04:00
exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\. c$$
2012-03-23 11:34:09 +04:00
exclude_file_name_regexp--sc_prohibit_return_as_function = \. py$$
2013-05-31 21:52:51 +04:00
exclude_file_name_regexp--sc_require_config_h = \
^( examples/| tools/virsh-edit\. c$$ )
2011-03-17 00:25:56 +03:00
2013-05-31 21:52:51 +04:00
exclude_file_name_regexp--sc_require_config_h_first = \
^( examples/| tools/virsh-edit\. c$$ )
2011-03-17 00:25:56 +03:00
2012-04-26 14:11:49 +04:00
exclude_file_name_regexp--sc_trailing_blank = \
2012-12-14 19:08:25 +04:00
( /qemuhelpdata/| /sysinfodata/.*\. data| \. ( fig| gif| ico| png) $$ )
2011-03-17 00:25:56 +03:00
exclude_file_name_regexp--sc_unmarked_diagnostics = \
^( docs/apibuild.py| tests/virt-aa-helper-test) $$
2012-03-29 13:52:04 +04:00
exclude_file_name_regexp--sc_size_of_brackets = cfg.mk
2011-07-06 20:20:04 +04: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 21:46:30 +04:00
exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4
2013-04-17 14:19:18 +04:00
2013-04-17 14:19:19 +04:00
exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \
^src/internal\. h$$
exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \
2013-11-22 20:42:22 +04:00
^( tools/| examples/| include/libvirt/( virterror| libvirt-( qemu| lxc) ) \. h$$ )
2013-07-08 18:17:29 +04:00
exclude_file_name_regexp--sc_prohibit_int_ijk = \
^( src/remote_protocol-structs| src/remote/remote_protocol.x| cfg.mk| include/) $
2013-10-09 14:19:27 +04:00
exclude_file_name_regexp--sc_prohibit_getenv = \
^tests/.*\. [ ch] $$