Blame shared/nm-default.h

Packit Service b23acc
// SPDX-License-Identifier: LGPL-2.1+
Packit Service b23acc
/*
Packit Service b23acc
 * Copyright (C) 2015 Red Hat, Inc.
Packit Service b23acc
 */
Packit Service b23acc
Packit Service b23acc
#ifndef __NM_DEFAULT_H__
Packit Service b23acc
#define __NM_DEFAULT_H__
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB                 (1 <<  0)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB        (1 <<  1)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG       (1 <<  2)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM                (1 <<  3)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE        (1 <<  4)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE           (1 <<  5)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL  (1 <<  6)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE   (1 <<  7)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON               (1 << 10)
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_WITH_SYSTEMD              (1 << 11)
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_LIBNM_CORE     ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_PRIVATE \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_LIBNM          ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_CLIENT         ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_DAEMON         ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_SYSTEMD \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_SYSTEMD        ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_DAEMON \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_SYSTEMD_SHARED \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#define NM_NETWORKMANAGER_COMPILATION_GLIB           ( 0 \
Packit Service b23acc
                                                     | NM_NETWORKMANAGER_COMPILATION_WITH_GLIB \
Packit Service b23acc
                                                     )
Packit Service b23acc
Packit Service b23acc
#ifndef NETWORKMANAGER_COMPILATION
Packit Service b23acc
#error Define NETWORKMANAGER_COMPILATION accordingly
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#ifndef G_LOG_DOMAIN
Packit Service b23acc
#if defined(NETWORKMANAGER_COMPILATION_TEST)
Packit Service b23acc
#define G_LOG_DOMAIN "test"
Packit Service b23acc
#elif NETWORKMANAGER_COMPILATION & NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON
Packit Service b23acc
#define G_LOG_DOMAIN "NetworkManager"
Packit Service b23acc
#else
Packit Service b23acc
#error Need to define G_LOG_DOMAIN
Packit Service b23acc
#endif
Packit Service b23acc
#elif defined (NETWORKMANAGER_COMPILATION_TEST) || (NETWORKMANAGER_COMPILATION & NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON)
Packit Service b23acc
#error Do not define G_LOG_DOMAIN with NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
/* always include these headers for our internal source files. */
Packit Service b23acc
Packit Service b23acc
#ifndef ___CONFIG_H__
Packit Service b23acc
#define ___CONFIG_H__
Packit Service b23acc
#include <config.h>
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#include "config-extra.h"
Packit Service b23acc
Packit Service b23acc
/* for internal compilation we don't want the deprecation macros
Packit Service b23acc
 * to be in effect. Define the widest range of versions to effectively
Packit Service b23acc
 * disable deprecation checks */
Packit Service b23acc
#define NM_VERSION_MIN_REQUIRED  NM_VERSION_0_9_8
Packit Service b23acc
Packit Service b23acc
#ifndef NM_MORE_ASSERTS
Packit Service b23acc
#define NM_MORE_ASSERTS 0
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#if NM_MORE_ASSERTS == 0
Packit Service b23acc
/* The cast macros like NM_TYPE() are implemented via G_TYPE_CHECK_INSTANCE_CAST()
Packit Service b23acc
 * and _G_TYPE_CIC(). The latter, by default performs runtime checks of the type
Packit Service b23acc
 * by calling g_type_check_instance_cast().
Packit Service b23acc
 * This check has a certain overhead without being helpful.
Packit Service b23acc
 *
Packit Service b23acc
 * Example 1:
Packit Service b23acc
 *     static void foo (NMType *obj)
Packit Service b23acc
 *     {
Packit Service b23acc
 *         access_obj_without_check (obj);
Packit Service b23acc
 *     }
Packit Service b23acc
 *     foo ((NMType *) obj);
Packit Service b23acc
 *     // There is no runtime check and passing an invalid pointer
Packit Service b23acc
 *     // leads to a crash.
Packit Service b23acc
 *
Packit Service b23acc
 * Example 2:
Packit Service b23acc
 *     static void foo (NMType *obj)
Packit Service b23acc
 *     {
Packit Service b23acc
 *         access_obj_without_check (obj);
Packit Service b23acc
 *     }
Packit Service b23acc
 *     foo (NM_TYPE (obj));
Packit Service b23acc
 *     // There is a runtime check which prints a g_warning(), but that doesn't
Packit Service b23acc
 *     // avoid the crash as NM_TYPE() cannot do anything then passing on the
Packit Service b23acc
 *     // invalid pointer.
Packit Service b23acc
 *
Packit Service b23acc
 * Example 3:
Packit Service b23acc
 *     static void foo (NMType *obj)
Packit Service b23acc
 *     {
Packit Service b23acc
 *         g_return_if_fail (NM_IS_TYPE (obj));
Packit Service b23acc
 *         access_obj_without_check (obj);
Packit Service b23acc
 *     }
Packit Service b23acc
 *     foo ((NMType *) obj);
Packit Service b23acc
 *     // There is a runtime check which prints a g_critical() which also avoids
Packit Service b23acc
 *     // the crash. That is actually helpful to catch bugs and avoid crashes.
Packit Service b23acc
 *
Packit Service b23acc
 * Example 4:
Packit Service b23acc
 *     static void foo (NMType *obj)
Packit Service b23acc
 *     {
Packit Service b23acc
 *         g_return_if_fail (NM_IS_TYPE (obj));
Packit Service b23acc
 *         access_obj_without_check (obj);
Packit Service b23acc
 *     }
Packit Service b23acc
 *     foo (NM_TYPE (obj));
Packit Service b23acc
 *     // The runtime check is performed twice, with printing a g_warning() and
Packit Service b23acc
 *     // a g_critical() and avoiding the crash.
Packit Service b23acc
 *
Packit Service b23acc
 * Example 3 is how it should be done. Type checks in NM_TYPE() are pointless.
Packit Service b23acc
 * Disable them for our production builds.
Packit Service b23acc
 */
Packit Service b23acc
#ifndef G_DISABLE_CAST_CHECKS
Packit Service b23acc
#define G_DISABLE_CAST_CHECKS
Packit Service b23acc
#endif
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#if NM_MORE_ASSERTS == 0
Packit Service b23acc
#ifndef G_DISABLE_CAST_CHECKS
Packit Service b23acc
/* Unless compiling with G_DISABLE_CAST_CHECKS, glib performs type checking
Packit Service b23acc
 * during G_VARIANT_TYPE() via g_variant_type_checked_(). This is not necessary
Packit Service b23acc
 * because commonly this cast is needed during something like
Packit Service b23acc
 *
Packit Service b23acc
 *   g_variant_builder_init (&props, G_VARIANT_TYPE ("a{sv}"));
Packit Service b23acc
 *
Packit Service b23acc
 * Note that in if the variant type would be invalid, the check still
Packit Service b23acc
 * wouldn't make the buggy code magically work. Instead of passing a
Packit Service b23acc
 * bogus type string (bad), it would pass %NULL to g_variant_builder_init()
Packit Service b23acc
 * (also bad).
Packit Service b23acc
 *
Packit Service b23acc
 * Also, a function like g_variant_builder_init() already validates
Packit Service b23acc
 * the input type via something like
Packit Service b23acc
 *
Packit Service b23acc
 *   g_return_if_fail (g_variant_type_is_container (type));
Packit Service b23acc
 *
Packit Service b23acc
 * So, by having G_VARIANT_TYPE() also validate the type, we validate
Packit Service b23acc
 * twice, whereas the first validation is rather pointless because it
Packit Service b23acc
 * doesn't prevent the function to be called with invalid arguments.
Packit Service b23acc
 *
Packit Service b23acc
 * Just patch G_VARIANT_TYPE() to perform no check.
Packit Service b23acc
 */
Packit Service b23acc
#undef G_VARIANT_TYPE
Packit Service b23acc
#define G_VARIANT_TYPE(type_string) ((const GVariantType *) (type_string))
Packit Service b23acc
#endif
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#include <stdlib.h>
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_GLIB
Packit Service b23acc
Packit Service b23acc
#include <glib.h>
Packit Service b23acc
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB
Packit Service b23acc
#error Cannot define NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_PROG and NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB
Packit Service b23acc
#endif
Packit Service b23acc
#include <glib/gi18n.h>
Packit Service b23acc
#elif (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_GLIB_I18N_LIB
Packit Service b23acc
#include <glib/gi18n-lib.h>
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#if NM_MORE_ASSERTS == 0
Packit Service b23acc
Packit Service b23acc
/* glib assertions (g_return_*(), g_assert*()) contain a textual representation
Packit Service b23acc
 * of the checked statement. This part of the assertion blows up the size of the
Packit Service b23acc
 * binary. Unless we compile a debug-build with NM_MORE_ASSERTS, drop these
Packit Service b23acc
 * parts. Note that the failed assertion still prints the file and line where the
Packit Service b23acc
 * assertion fails. That shall suffice. */
Packit Service b23acc
Packit Service b23acc
static inline void
Packit Service b23acc
_nm_g_return_if_fail_warning (const char *log_domain,
Packit Service b23acc
                              const char *file,
Packit Service b23acc
                              int line)
Packit Service b23acc
{
Packit Service b23acc
	char file_buf[256 + 15];
Packit Service b23acc
Packit Service b23acc
	g_snprintf (file_buf, sizeof (file_buf), "((%s:%d))", file, line);
Packit Service b23acc
	g_return_if_fail_warning (log_domain, file_buf, "<dropped>");
Packit Service b23acc
}
Packit Service b23acc
Packit Service b23acc
#define g_return_if_fail_warning(log_domain, pretty_function, expression) \
Packit Service b23acc
	_nm_g_return_if_fail_warning (log_domain, __FILE__, __LINE__)
Packit Service b23acc
Packit Service b23acc
#define g_assertion_message_expr(domain, file, line, func, expr) \
Packit Service b23acc
	g_assertion_message_expr(domain, file, line, "<unknown-fcn>", (expr) ? "<dropped>" : NULL)
Packit Service b23acc
Packit Service b23acc
#undef g_return_val_if_reached
Packit Service b23acc
#define g_return_val_if_reached(val) \
Packit Service b23acc
    G_STMT_START { \
Packit Service b23acc
        g_log (G_LOG_DOMAIN, \
Packit Service b23acc
               G_LOG_LEVEL_CRITICAL, \
Packit Service b23acc
               "file %s: line %d (%s): should not be reached", \
Packit Service b23acc
               __FILE__, \
Packit Service b23acc
               __LINE__, \
Packit Service b23acc
               "<dropped>"); \
Packit Service b23acc
        return (val); \
Packit Service b23acc
    } G_STMT_END
Packit Service b23acc
Packit Service b23acc
#undef g_return_if_reached
Packit Service b23acc
#define g_return_if_reached() \
Packit Service b23acc
    G_STMT_START { \
Packit Service b23acc
        g_log (G_LOG_DOMAIN, \
Packit Service b23acc
               G_LOG_LEVEL_CRITICAL, \
Packit Service b23acc
               "file %s: line %d (%s): should not be reached", \
Packit Service b23acc
               __FILE__, \
Packit Service b23acc
               __LINE__, \
Packit Service b23acc
               "<dropped>"); \
Packit Service b23acc
        return; \
Packit Service b23acc
    } G_STMT_END
Packit Service b23acc
Packit Service b23acc
#define NM_ASSERT_G_RETURN_EXPR(expr) "<dropped>"
Packit Service b23acc
#define NM_ASSERT_NO_MSG 1
Packit Service b23acc
Packit Service b23acc
#else
Packit Service b23acc
Packit Service b23acc
#define NM_ASSERT_G_RETURN_EXPR(expr) ""expr""
Packit Service b23acc
#define NM_ASSERT_NO_MSG 0
Packit Service b23acc
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#include "nm-glib-aux/nm-macros-internal.h"
Packit Service b23acc
#include "nm-glib-aux/nm-shared-utils.h"
Packit Service b23acc
#include "nm-glib-aux/nm-errno.h"
Packit Service b23acc
#include "nm-glib-aux/nm-hash-utils.h"
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE
Packit Service b23acc
#include "nm-version.h"
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_DAEMON
Packit Service b23acc
#include "nm-core-types.h"
Packit Service b23acc
#include "nm-types.h"
Packit Service b23acc
#include "nm-logging.h"
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#if (NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE
Packit Service b23acc
#include "nm-libnm-utils.h"
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#if ((NETWORKMANAGER_COMPILATION) & NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM) && !((NETWORKMANAGER_COMPILATION) & (NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_PRIVATE | NM_NETWORKMANAGER_COMPILATION_WITH_LIBNM_CORE_INTERNAL))
Packit Service b23acc
#include "NetworkManager.h"
Packit Service b23acc
#endif
Packit Service b23acc
Packit Service b23acc
#endif /* NM_NETWORKMANAGER_COMPILATION_WITH_GLIB */
Packit Service b23acc
Packit Service b23acc
/*****************************************************************************/
Packit Service b23acc
Packit Service b23acc
#endif /* __NM_DEFAULT_H__ */