spiegel-keyman/core/include/keyman/keyboardprocessor_bits.h
2022-08-11 16:29:02 +02:00

69 lines
2.3 KiB
C

/*
Copyright: © 2018 SIL International.
Description: Cross platform support macros to define API function
declspec/attributes and how each supported compiler or OS
allows us to specify them.
Create Date: 18 Oct 2018
Authors: Tim Eves (TSE)
History: 18 Oct 2018 - TSE - Imported from graphite2 project.
6 Oct 2018 - TSE - Move into keyman folder.
*/
#pragma once
// Define API function declspec/attributes and how each supported compiler or OS
// allows us to specify them.
#if defined __GNUC__
#define _kmn_and ,
#define _kmn_tag_fn(a) __attribute__((a))
#define _kmn_deprecated_flag deprecated
#define _kmn_export_flag visibility("default")
#define _kmn_import_flag visibility("default")
#define _kmn_static_flag visibility("hidden")
#define _kmn_unused(x) UNUSED_ ## x __attribute__((__unused__))
#else
#define _kmn_unused(x) UNUSED_ ## x
#endif
#if defined _WIN32 || defined __CYGWIN__
typedef wchar_t const * km_kbp_path_name;
#define _KM_KBP_PATH_SEPARATOR (L'\\')
#define _KM_KBP_EXT_SEPARATOR (L'.')
#if defined __GNUC__ // These three will be redefined for Windows
#undef _kmn_export_flag
#undef _kmn_import_flag
#undef _kmn_static_flag
#else // How MSVC sepcifies function level attributes adn deprecation
#define _kmn_and
#define _kmn_tag_fn(a) __declspec(a)
#define _kmn_deprecated_flag deprecated
#endif
#define _kmn_export_flag dllexport
#define _kmn_import_flag dllimport
#define _kmn_static_flag
#else
typedef char const * km_kbp_path_name;
#define _KM_KBP_PATH_SEPARATOR ('/')
#define _KM_KBP_EXT_SEPARATOR ('.')
#endif
#if defined KMN_KBP_STATIC
#define KMN_API _kmn_tag_fn(_kmn_static_flag)
#define KMN_DEPRECATED_API _kmn_tag_fn(_kmn_deprecated_flag _kmn_and _kmn_static_flag)
#elif defined KMN_KBP_EXPORTING
#define KMN_API _kmn_tag_fn(_kmn_export_flag)
#define KMN_DEPRECATED_API _kmn_tag_fn(_kmn_deprecated_flag _kmn_and _kmn_export_flag)
#else
#define KMN_API _kmn_tag_fn(_kmn_import_flag)
#define KMN_DEPRECATED_API _kmn_tag_fn(_kmn_deprecated_flag _kmn_and _kmn_import_flag)
#endif
#ifndef KMN_KBP
#define KMN_KBP
#endif
#ifndef USE_CHAR16_T
#define USE_CHAR16_T
#endif
#include <km_types.h>