WebCFace 2.9.0
Web-based Communication Framework & Dashboard-like UI
Loading...
Searching...
No Matches
webcface-config.h
Go to the documentation of this file.
1#pragma once
2
3#define WEBCFACE_STR(v) #v
4#define WEBCFACE_DEFAULT_PORT 7530
5#define WEBCFACE_DEFAULT_PORT_SI(port) WEBCFACE_STR(port)
6#define WEBCFACE_DEFAULT_PORT_S WEBCFACE_DEFAULT_PORT_SI(WEBCFACE_DEFAULT_PORT)
7#define WEBCFACE_SERVER_NAME "webcface"
8#define WEBCFACE_VERSION_MAJOR 2
9#define WEBCFACE_VERSION_MINOR 9
10#define WEBCFACE_VERSION_REVISION 0
11#define WEBCFACE_ABI_MAJOR 23
12#define WEBCFACE_VERSION "2.9.0"
13#define WEBCFACE_SHARED 1
14#define WEBCFACE_SYSTEM_DLLEXPORT 0
15#define WEBCFACE_SYSTEM_VISIBILITY 1
16#define WEBCFACE_SYSTEM_WCHAR_WINDOWS 0
17#define WEBCFACE_SYSTEM_WIN32SOCKET 0
18#define WEBCFACE_SYSTEM_PATH_WINDOWS 0
19#define WEBCFACE_SYSTEM_ADD_DEBUG 0
20#define WEBCFACE_EXP_FILESYSTEM 0
21#define WEBCFACE_PTR_SIZE 8
22
23// clang-format off
24/*
25* 関数の宣言 (msvc, mingw, unix)
26 WEBCFACE_DLL return_type WEBCFACE_CALL func_name(args...);
27* クラスの定義 (msvc, mingw, unix)
28 class WEBCFACE_DLL class_name {...};
29* テンプレートクラスの定義 (unix)
30 template <...> class WEBCFACE_DLL_TEMPLATE class_name {...};
31* テンプレートクラスの明示的実体化の宣言 (msvc_import, mingw) (unixでは消す:gcc-10でエラー)
32 extern template class WEBCFACE_DLL_INSTANCE_DECL class_name<...>;
33* テンプレートクラスの明示的実体化の定義 (msvc_export, unix)
34 template class WEBCFACE_DLL_INSTANCE_DEF class_name<...>;
35* テンプレートメンバ関数の明示的実体化の宣言
36 extern template return_type class_name::func_name<...>(args...);
37* テンプレートメンバ関数の明示的実体化の定義
38 template WEBCFACE_DLL return_type class_name::func_name<...>(args...);
39*/
40// clang-format on
41
42#if WEBCFACE_SHARED
43#if WEBCFACE_SYSTEM_DLLEXPORT
44#ifdef WEBCFACE_BUILDING
45#ifdef _MSC_VER
46#define WEBCFACE_DLL __declspec(dllexport)
47#define WEBCFACE_DLL_TEMPLATE
48#define WEBCFACE_DLL_INSTANCE_DECL
49#define WEBCFACE_DLL_INSTANCE_DEF WEBCFACE_DLL
50#else // !_MSC_VER => on MinGW
51#define WEBCFACE_DLL __declspec(dllexport)
52#define WEBCFACE_DLL_TEMPLATE
53#define WEBCFACE_DLL_INSTANCE_DECL WEBCFACE_DLL
54#define WEBCFACE_DLL_INSTANCE_DEF
55#endif // _MSC_VER
56#else // !WEBCFACE_BUILDING
57#define WEBCFACE_DLL __declspec(dllimport)
58#define WEBCFACE_DLL_TEMPLATE
59#define WEBCFACE_DLL_INSTANCE_DECL WEBCFACE_DLL
60#define WEBCFACE_DLL_INSTANCE_DEF
61#endif // WEBCFACE_BUILDING
62#elif WEBCFACE_SYSTEM_VISIBILITY
63#ifdef WEBCFACE_BUILDING
64#define WEBCFACE_DLL __attribute__((visibility("default")))
65#define WEBCFACE_DLL_TEMPLATE WEBCFACE_DLL
66#undef WEBCFACE_DLL_INSTANCE_DECL
67#define WEBCFACE_DLL_INSTANCE_DEF WEBCFACE_DLL
68#else // !WEBCFACE_BUILDING
69#define WEBCFACE_DLL
70#define WEBCFACE_DLL_TEMPLATE
71#undef WEBCFACE_DLL_INSTANCE_DECL
72#define WEBCFACE_DLL_INSTANCE_DEF
73#endif // WEBCFACE_BUILDING
74#else // DLLEXPORT, VISIBILITY
75// clang-format off
76#error "neither WEBCFACE_SYSTEM_DLLEXPORT nor WEBCFACE_SYSTEM_VISIBILITY is defined"
77// clang-format on
78#endif
79#else // !WEBCFACE_SHARED
80#define WEBCFACE_DLL
81#define WEBCFACE_DLL_TEMPLATE
82#define WEBCFACE_DLL_INSTANCE_DECL
83#define WEBCFACE_DLL_INSTANCE_DEF
84#endif // WEBCFACE_SHARED
85
86// clang-format off
87/*
88calling convention
89* 通常の関数またはstaticメンバ関数(dllexportしているもの)につける。
90* メンバ関数はthiscallなのでつけない
91* std::function<>の中には要る(ただし型推論ができたりできなかったりする)
92 * ただしcygwinでstd::functionの中にcdecl宣言するとmanglingがおかしなことになった(なぜ?)ので、
93 std::function<>の中では WEBCFACE_CALL_FP をつける(cygwinで消える)
94* 関数ポインタには要る (typedef return_type (WEBCFACE_CALL *name)(args...); )
95
96*/
97// clang-format on
98#if WEBCFACE_SYSTEM_DLLEXPORT
99#define WEBCFACE_CALL __cdecl
100#ifdef __CYGWIN__
101#define WEBCFACE_CALL_FP
102#else
103#define WEBCFACE_CALL_FP WEBCFACE_CALL
104#endif
105#else // !DLLEXPORT
106#define WEBCFACE_CALL
107#define WEBCFACE_CALL_FP
108#endif
109
110// gccかどうかのチェック: webcfaceを使う側でも必要なので、コンパイル時にチェックする
111#if defined(__GNUC__) && !defined(__clang__)
112#define WEBCFACE_COMPILER_IS_GCC
113#endif
114
115// doxygenを生成するときは namespace webcface だけにする
116#ifdef WEBCFACE_DOXYGEN
117#define WEBCFACE_NS_BEGIN namespace webcface {
118#define WEBCFACE_NS_END }
119
120#else
121// コンパイル時にnamespaceにabiバージョンを埋め込む
122
123#if WEBCFACE_SYSTEM_ADD_DEBUG
124#ifdef _DEBUG
125#define WEBCFACE_NS_ABI_2(ver) v##ver##_debug
126#endif
127#endif
128
129#ifndef WEBCFACE_NS_ABI_2
130#define WEBCFACE_NS_ABI_2(ver) v##ver##_
131#endif
132
133#define WEBCFACE_NS_ABI(ver) WEBCFACE_NS_ABI_2(ver)
134#define WEBCFACE_NS_BEGIN \
135 namespace webcface { \
136 inline namespace WEBCFACE_NS_ABI(WEBCFACE_ABI_MAJOR) {
137#define WEBCFACE_NS_END \
138 } \
139 }
140
141#endif