libzypp 17.38.14
Globals.h File Reference

Provides API related macros. More...

#include <zypp-core/APIConfig.h>
#include <zypp-core/base/Easy.h>
Include dependency graph for Globals.h:

Go to the source code of this file.

Macros

#define LEGACY(CL)
 Legacy code we still support.
#define ZYPP_DECL_EXPORT
 Generic helper definitions for shared library support.
#define ZYPP_DECL_IMPORT
#define ZYPP_DECL_HIDDEN
#define ZYPP_API   ZYPP_DECL_IMPORT
#define ZYPP_TESTS   ZYPP_DECL_IMPORT
#define ZYPP_LOCAL
#define ZYPP_API_DEPTESTOMATIC   ZYPP_API
#define ZYPP_DEPRECATED   __attribute__ ((deprecated))
 The ZYPP_DEPRECATED macro can be used to trigger compile-time warnings with gcc >= 3.2 when deprecated functions are used.
#define ZYPP_DEFINE_GLOBAL_CONSTANT(type, name, ...)
 Defines a namespace-scope constant with the correct linkage for the build mode.
#define ZYPP_DEFINE_GLOBAL_CONSTEXPR(type, name, ...)

Detailed Description

Provides API related macros.

Definition in file Globals.h.

Macro Definition Documentation

◆ LEGACY

#define LEGACY ( CL)
Value:
( CL < 100 && LIBZYPP_VERSION_MAJOR <= CL ) || ( CL < 10000 && LIBZYPP_SOVERSION <= CL ) || LIBZYPP_VERSION <= CL

Legacy code we still support.

Deprecated items we can't drop immediately because YAST/PK still refer to them or they break binary compatibility, should be enclosed in #if LEGACY(#) where # is either a major number(<=99), a soversion [<=9999] or numversion [<=999999].

Definition at line 40 of file Globals.h.

◆ ZYPP_DECL_EXPORT

#define ZYPP_DECL_EXPORT

Generic helper definitions for shared library support.

See also
e.g. http://gcc.gnu.org/wiki/Visibility
extern "C" ZYPP_API void function(int a);
class ZYPP_API SomeClass
{
int c;
ZYPP_LOCAL void privateMethod(); // Only for use within this DSO
public:
Person(int _c) : c(_c) { }
static void foo(int a);
};
#define ZYPP_LOCAL
Definition Globals.h:76
#define ZYPP_API
Definition Globals.h:74
unsigned short a
};

Definition at line 64 of file Globals.h.

◆ ZYPP_DECL_IMPORT

#define ZYPP_DECL_IMPORT

Definition at line 65 of file Globals.h.

◆ ZYPP_DECL_HIDDEN

#define ZYPP_DECL_HIDDEN

Definition at line 66 of file Globals.h.

◆ ZYPP_API

#define ZYPP_API   ZYPP_DECL_IMPORT

Definition at line 74 of file Globals.h.

◆ ZYPP_TESTS

#define ZYPP_TESTS   ZYPP_DECL_IMPORT

Definition at line 75 of file Globals.h.

◆ ZYPP_LOCAL

#define ZYPP_LOCAL

Definition at line 76 of file Globals.h.

◆ ZYPP_API_DEPTESTOMATIC

#define ZYPP_API_DEPTESTOMATIC   ZYPP_API

Definition at line 82 of file Globals.h.

◆ ZYPP_DEPRECATED

#define ZYPP_DEPRECATED   __attribute__ ((deprecated))

The ZYPP_DEPRECATED macro can be used to trigger compile-time warnings with gcc >= 3.2 when deprecated functions are used.

For non-inline functions, the macro is used at the very end of the function declaration, right before the semicolon, unless it's pure virtual:

int deprecatedFunc() const ZYPP_DEPRECATED; virtual int deprecatedPureVirtualFunc() const ZYPP_DEPRECATED = 0;

Functions which are implemented inline are handled differently: the ZYPP_DEPRECATED macro is used at the front, right before the return type, but after "static" or "virtual":

ZYPP_DEPRECATED void deprecatedFuncA() { .. } virtual ZYPP_DEPRECATED int deprecatedFuncB() { .. } static ZYPP_DEPRECATED bool deprecatedFuncC() { .. }

You can also mark whole structs or classes as deprecated, by inserting the ZYPP_DEPRECATED macro after the struct/class keyword, but before the name of the struct/class:

class ZYPP_DEPRECATED DeprecatedClass { }; struct ZYPP_DEPRECATED DeprecatedStruct { };

However, deprecating a struct/class doesn't create a warning for gcc versions <= 3.3 (haven't tried 3.4 yet). If you want to deprecate a class, also deprecate all member functions as well (which will cause warnings).

Definition at line 117 of file Globals.h.

◆ ZYPP_DEFINE_GLOBAL_CONSTANT

#define ZYPP_DEFINE_GLOBAL_CONSTANT ( type,
name,
... )
Value:
static const type name { __VA_ARGS__ };

Defines a namespace-scope constant with the correct linkage for the build mode.

In the zyppng module build (-DZYPPNG), constants at namespace scope must have external linkage to be safely referenced by constexpr inline methods that are exported from C++20 module interface units. 'inline constexpr' (C++17) provides this.

In the legacy build (no -DZYPPNG), consumers may be compiled under C++11 where 'inline' on variables is not available.

ZYPP_DEFINE_GLOBAL_CONSTANT — replaces 'static const' (non-constexpr value) ZYPP_DEFINE_GLOBAL_CONSTEXPR — replaces 'static constexpr' (constexpr value)

Usage (inside a namespace block in a header):

ZYPP_DEFINE_GLOBAL_CONSTANT( IdType, noId, 0 )
ZYPP_DEFINE_GLOBAL_CONSTEXPR( ResolverNamespaces, NoResolverNamespaces, ResolverNamespace() )
#define ZYPP_DEFINE_GLOBAL_CONSTANT(type, name,...)
Defines a namespace-scope constant with the correct linkage for the build mode.
Definition Globals.h:151
#define ZYPP_DEFINE_GLOBAL_CONSTEXPR(type, name,...)
Definition Globals.h:153

Definition at line 151 of file Globals.h.

◆ ZYPP_DEFINE_GLOBAL_CONSTEXPR

#define ZYPP_DEFINE_GLOBAL_CONSTEXPR ( type,
name,
... )
Value:
static constexpr type name { __VA_ARGS__ };

Definition at line 153 of file Globals.h.