Kodi Development  20.0
for Binary and Script based Add-Ons
versions.h
1 /*
2  * Copyright (C) 2016-2018 Team Kodi
3  * This file is part of Kodi - https://kodi.tv
4  *
5  * SPDX-License-Identifier: GPL-2.0-or-later
6  * See LICENSES/README.md for more information.
7  */
8 
9 #pragma once
10 
11 #ifndef KODI_VERSIONS_H
12 #define KODI_VERSIONS_H
13 
14 #include <string.h>
15 
16 #define STR_HELPER(x) #x
17 #define STR(x) STR_HELPER(x)
18 
19 /*
20  *------------------------------------------------------------------------------
21  * Some parts on headers are only be used for Kodi itself and internally (not
22  * for add-on development).
23  *
24  * For this reason also no doxygen part with "///" defined there.
25  * -----------------------------------------------------------------------------
26  */
27 
28 /*
29  * Versions of all add-on globals and instances are defined below.
30  *
31  * This is added here and not in related header to prevent not
32  * needed includes during compile. Also have it here a better
33  * overview.
34  */
35 
36 // Ignore clang here, as this must be good in overview and as the main reason,
37 // because cmake uses this area in this form to perform its addon dependency
38 // check.
39 // clang-format off
40 #define ADDON_GLOBAL_VERSION_MAIN "1.3.0"
41 #define ADDON_GLOBAL_VERSION_MAIN_MIN "1.2.0"
42 #define ADDON_GLOBAL_VERSION_MAIN_XML_ID "kodi.binary.global.main"
43 #define ADDON_GLOBAL_VERSION_MAIN_DEPENDS "AddonBase.h" \
44  "addon-instance/" \
45  "c-api/addon_base.h"
46 
47 #define ADDON_GLOBAL_VERSION_GENERAL "1.0.5"
48 #define ADDON_GLOBAL_VERSION_GENERAL_MIN "1.0.4"
49 #define ADDON_GLOBAL_VERSION_GENERAL_XML_ID "kodi.binary.global.general"
50 #define ADDON_GLOBAL_VERSION_GENERAL_DEPENDS "General.h"
51 
52 #define ADDON_GLOBAL_VERSION_GUI "5.15.0"
53 #define ADDON_GLOBAL_VERSION_GUI_MIN "5.15.0"
54 #define ADDON_GLOBAL_VERSION_GUI_XML_ID "kodi.binary.global.gui"
55 #define ADDON_GLOBAL_VERSION_GUI_DEPENDS "c-api/gui/input/action_ids.h" \
56  "c-api/gui/" \
57  "gui/"
58 
59 #define ADDON_GLOBAL_VERSION_AUDIOENGINE "1.1.1"
60 #define ADDON_GLOBAL_VERSION_AUDIOENGINE_MIN "1.1.0"
61 #define ADDON_GLOBAL_VERSION_AUDIOENGINE_XML_ID "kodi.binary.global.audioengine"
62 #define ADDON_GLOBAL_VERSION_AUDIOENGINE_DEPENDS "AudioEngine.h" \
63  "c-api/audio_engine.h"
64 
65 #define ADDON_GLOBAL_VERSION_FILESYSTEM "1.1.6"
66 #define ADDON_GLOBAL_VERSION_FILESYSTEM_MIN "1.1.0"
67 #define ADDON_GLOBAL_VERSION_FILESYSTEM_XML_ID "kodi.binary.global.filesystem"
68 #define ADDON_GLOBAL_VERSION_FILESYSTEM_DEPENDS "Filesystem.h" \
69  "c-api/filesystem.h" \
70  "gui/gl/Shader.h" \
71  "tools/DllHelper.h"
72 
73 #define ADDON_GLOBAL_VERSION_NETWORK "1.0.4"
74 #define ADDON_GLOBAL_VERSION_NETWORK_MIN "1.0.0"
75 #define ADDON_GLOBAL_VERSION_NETWORK_XML_ID "kodi.binary.global.network"
76 #define ADDON_GLOBAL_VERSION_NETWORK_DEPENDS "Network.h" \
77  "c-api/network.h"
78 
79 #define ADDON_GLOBAL_VERSION_TOOLS "1.0.4"
80 #define ADDON_GLOBAL_VERSION_TOOLS_MIN "1.0.0"
81 #define ADDON_GLOBAL_VERSION_TOOLS_XML_ID "kodi.binary.global.tools"
82 #define ADDON_GLOBAL_VERSION_TOOLS_DEPENDS "tools/DllHelper.h" \
83  "tools/EndTime.h" \
84  "tools/StringUtils.h" \
85  "tools/Thread.h" \
86  "tools/Timer.h"
87 
88 #define ADDON_INSTANCE_VERSION_AUDIODECODER "3.0.0"
89 #define ADDON_INSTANCE_VERSION_AUDIODECODER_MIN "3.0.0"
90 #define ADDON_INSTANCE_VERSION_AUDIODECODER_XML_ID "kodi.binary.instance.audiodecoder"
91 #define ADDON_INSTANCE_VERSION_AUDIODECODER_DEPENDS "c-api/addon-instance/audio_decoder.h" \
92  "addon-instance/AudioDecoder.h"
93 
94 #define ADDON_INSTANCE_VERSION_AUDIOENCODER "2.1.0"
95 #define ADDON_INSTANCE_VERSION_AUDIOENCODER_MIN "2.1.0"
96 #define ADDON_INSTANCE_VERSION_AUDIOENCODER_XML_ID "kodi.binary.instance.audioencoder"
97 #define ADDON_INSTANCE_VERSION_AUDIOENCODER_DEPENDS "c-api/addon-instance/audio_encoder.h" \
98  "addon-instance/AudioEncoder.h"
99 
100 #define ADDON_INSTANCE_VERSION_GAME "2.1.0"
101 #define ADDON_INSTANCE_VERSION_GAME_MIN "2.1.0"
102 #define ADDON_INSTANCE_VERSION_GAME_XML_ID "kodi.binary.instance.game"
103 #define ADDON_INSTANCE_VERSION_GAME_DEPENDS "addon-instance/Game.h"
104 
105 #define ADDON_INSTANCE_VERSION_IMAGEDECODER "2.1.1"
106 #define ADDON_INSTANCE_VERSION_IMAGEDECODER_MIN "2.1.0"
107 #define ADDON_INSTANCE_VERSION_IMAGEDECODER_XML_ID "kodi.binary.instance.imagedecoder"
108 #define ADDON_INSTANCE_VERSION_IMAGEDECODER_DEPENDS "addon-instance/ImageDecoder.h"
109 
110 #define ADDON_INSTANCE_VERSION_INPUTSTREAM "3.0.2"
111 #define ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN "3.0.1"
112 #define ADDON_INSTANCE_VERSION_INPUTSTREAM_XML_ID "kodi.binary.instance.inputstream"
113 #define ADDON_INSTANCE_VERSION_INPUTSTREAM_DEPENDS "c-api/addon-instance/inputstream.h" \
114  "c-api/addon-instance/inputstream/demux_packet.h" \
115  "c-api/addon-instance/inputstream/stream_codec.h" \
116  "c-api/addon-instance/inputstream/stream_constants.h" \
117  "c-api/addon-instance/inputstream/stream_crypto.h" \
118  "c-api/addon-instance/inputstream/timing_constants.h" \
119  "addon-instance/Inputstream.h" \
120  "addon-instance/inputstream/DemuxPacket.h" \
121  "addon-instance/inputstream/StreamCodec.h" \
122  "addon-instance/inputstream/StreamConstants.h" \
123  "addon-instance/inputstream/StreamCrypto.h" \
124  "addon-instance/inputstream/TimingConstants.h"
125 
126 #define ADDON_INSTANCE_VERSION_PERIPHERAL "2.0.0"
127 #define ADDON_INSTANCE_VERSION_PERIPHERAL_MIN "2.0.0"
128 #define ADDON_INSTANCE_VERSION_PERIPHERAL_XML_ID "kodi.binary.instance.peripheral"
129 #define ADDON_INSTANCE_VERSION_PERIPHERAL_DEPENDS "addon-instance/Peripheral.h" \
130  "addon-instance/PeripheralUtils.h"
131 
132 #define ADDON_INSTANCE_VERSION_PVR "8.0.1"
133 #define ADDON_INSTANCE_VERSION_PVR_MIN "8.0.0"
134 #define ADDON_INSTANCE_VERSION_PVR_XML_ID "kodi.binary.instance.pvr"
135 #define ADDON_INSTANCE_VERSION_PVR_DEPENDS "c-api/addon-instance/pvr.h" \
136  "c-api/addon-instance/pvr/pvr_providers.h" \
137  "c-api/addon-instance/pvr/pvr_channel_groups.h" \
138  "c-api/addon-instance/pvr/pvr_channels.h" \
139  "c-api/addon-instance/pvr/pvr_defines.h" \
140  "c-api/addon-instance/pvr/pvr_edl.h" \
141  "c-api/addon-instance/pvr/pvr_epg.h" \
142  "c-api/addon-instance/pvr/pvr_general.h" \
143  "c-api/addon-instance/pvr/pvr_menu_hook.h" \
144  "c-api/addon-instance/pvr/pvr_recordings.h" \
145  "c-api/addon-instance/pvr/pvr_stream.h" \
146  "c-api/addon-instance/pvr/pvr_timers.h" \
147  "addon-instance/PVR.h" \
148  "addon-instance/pvr/ChannelGroups.h" \
149  "addon-instance/pvr/Channels.h" \
150  "addon-instance/pvr/EDL.h" \
151  "addon-instance/pvr/EPG.h" \
152  "addon-instance/pvr/General.h" \
153  "addon-instance/pvr/MenuHook.h" \
154  "addon-instance/pvr/Recordings.h" \
155  "addon-instance/pvr/Stream.h" \
156  "addon-instance/pvr/Timers.h"
157 
158 #define ADDON_INSTANCE_VERSION_SCREENSAVER "2.1.0"
159 #define ADDON_INSTANCE_VERSION_SCREENSAVER_MIN "2.1.0"
160 #define ADDON_INSTANCE_VERSION_SCREENSAVER_XML_ID "kodi.binary.instance.screensaver"
161 #define ADDON_INSTANCE_VERSION_SCREENSAVER_DEPENDS "c-api/addon-instance/screensaver.h" \
162  "addon-instance/Screensaver.h"
163 
164 #define ADDON_INSTANCE_VERSION_VFS "3.0.0"
165 #define ADDON_INSTANCE_VERSION_VFS_MIN "3.0.0"
166 #define ADDON_INSTANCE_VERSION_VFS_XML_ID "kodi.binary.instance.vfs"
167 #define ADDON_INSTANCE_VERSION_VFS_DEPENDS "c-api/addon-instance/vfs.h" \
168  "addon-instance/VFS.h"
169 
170 #define ADDON_INSTANCE_VERSION_VISUALIZATION "3.0.0"
171 #define ADDON_INSTANCE_VERSION_VISUALIZATION_MIN "3.0.0"
172 #define ADDON_INSTANCE_VERSION_VISUALIZATION_XML_ID "kodi.binary.instance.visualization"
173 #define ADDON_INSTANCE_VERSION_VISUALIZATION_DEPENDS "addon-instance/Visualization.h" \
174  "c-api/addon-instance/visualization.h"
175 
176 #define ADDON_INSTANCE_VERSION_VIDEOCODEC "2.0.2"
177 #define ADDON_INSTANCE_VERSION_VIDEOCODEC_MIN "2.0.1"
178 #define ADDON_INSTANCE_VERSION_VIDEOCODEC_XML_ID "kodi.binary.instance.videocodec"
179 #define ADDON_INSTANCE_VERSION_VIDEOCODEC_DEPENDS "c-api/addon-instance/video_codec.h" \
180  "c-api/addon-instance/inputstream/stream_codec.h" \
181  "c-api/addon-instance/inputstream/stream_crypto.h" \
182  "addon-instance/VideoCodec.h" \
183  "addon-instance/inputstream/StreamCodec.h" \
184  "addon-instance/inputstream/StreamCrypto.h" \
185 // clang-format on
186 
187 //==============================================================================
200 typedef enum ADDON_TYPE
201 {
202  /* addon global parts */
203  ADDON_GLOBAL_MAIN = 0,
204  ADDON_GLOBAL_GUI = 1,
205  ADDON_GLOBAL_AUDIOENGINE = 2,
206  ADDON_GLOBAL_GENERAL = 3,
207  ADDON_GLOBAL_NETWORK = 4,
208  ADDON_GLOBAL_FILESYSTEM = 5,
209  ADDON_GLOBAL_TOOLS = 6,
210  // Last used global id, used in loops to check versions.
211  // Need to change if new global type becomes added!
212  ADDON_GLOBAL_MAX = 6,
213 
214  /* addon type instances */
215 
218 
221 
224 
227 
230 
233 
236 
239 
242 
245 
248 } ADDON_TYPE;
250 //------------------------------------------------------------------------------
251 
252 #ifdef __cplusplus
253 extern "C" {
254 namespace kodi {
255 namespace addon {
256 #endif
257 
266 inline const char* GetTypeVersion(int type)
267 {
268  /*
269  * #ifdef's below becomes set by cmake, no set by hand needed.
270  */
271  switch (type)
272  {
273  /* addon global parts */
274  case ADDON_GLOBAL_MAIN:
275  return ADDON_GLOBAL_VERSION_MAIN;
276 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_GENERAL_USED)
277  case ADDON_GLOBAL_GENERAL:
278  return ADDON_GLOBAL_VERSION_GENERAL;
279 #endif
280 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_GUI_USED)
281  case ADDON_GLOBAL_GUI:
282  return ADDON_GLOBAL_VERSION_GUI;
283 #endif
284 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_AUDIOENGINE_USED)
285  case ADDON_GLOBAL_AUDIOENGINE:
286  return ADDON_GLOBAL_VERSION_AUDIOENGINE;
287 #endif
288 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_FILESYSTEM_USED)
289  case ADDON_GLOBAL_FILESYSTEM:
290  return ADDON_GLOBAL_VERSION_FILESYSTEM;
291 #endif
292 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_NETWORK_USED)
293  case ADDON_GLOBAL_NETWORK:
294  return ADDON_GLOBAL_VERSION_NETWORK;
295 #endif
296 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_GLOBAL_VERSION_TOOLS_USED)
297  case ADDON_GLOBAL_TOOLS:
298  return ADDON_GLOBAL_VERSION_TOOLS;
299 #endif
300 
301  /* addon type instances */
302 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_AUDIODECODER_USED)
304  return ADDON_INSTANCE_VERSION_AUDIODECODER;
305 #endif
306 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_AUDIOENCODER_USED)
308  return ADDON_INSTANCE_VERSION_AUDIOENCODER;
309 #endif
310 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_GAME_USED)
311  case ADDON_INSTANCE_GAME:
312  return ADDON_INSTANCE_VERSION_GAME;
313 #endif
314 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_IMAGEDECODER_USED)
316  return ADDON_INSTANCE_VERSION_IMAGEDECODER;
317 #endif
318 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_INPUTSTREAM_USED)
320  return ADDON_INSTANCE_VERSION_INPUTSTREAM;
321 #endif
322 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_PERIPHERAL_USED)
324  return ADDON_INSTANCE_VERSION_PERIPHERAL;
325 #endif
326 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_PVR_USED)
327  case ADDON_INSTANCE_PVR:
328  return ADDON_INSTANCE_VERSION_PVR;
329 #endif
330 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_SCREENSAVER_USED)
332  return ADDON_INSTANCE_VERSION_SCREENSAVER;
333 #endif
334 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VFS_USED)
335  case ADDON_INSTANCE_VFS:
336  return ADDON_INSTANCE_VERSION_VFS;
337 #endif
338 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VISUALIZATION_USED)
340  return ADDON_INSTANCE_VERSION_VISUALIZATION;
341 #endif
342 #if !defined(BUILD_KODI_ADDON) || defined(ADDON_INSTANCE_VERSION_VIDEOCODEC_USED)
344  return ADDON_INSTANCE_VERSION_VIDEOCODEC;
345 #endif
346  }
347  return "0.0.0";
348 }
349 
358 inline const char* GetTypeMinVersion(int type)
359 {
360  switch (type)
361  {
362  /* addon global parts */
363  case ADDON_GLOBAL_MAIN:
364  return ADDON_GLOBAL_VERSION_MAIN_MIN;
365  case ADDON_GLOBAL_GUI:
366  return ADDON_GLOBAL_VERSION_GUI_MIN;
367  case ADDON_GLOBAL_GENERAL:
368  return ADDON_GLOBAL_VERSION_GENERAL_MIN;
369  case ADDON_GLOBAL_AUDIOENGINE:
370  return ADDON_GLOBAL_VERSION_AUDIOENGINE_MIN;
371  case ADDON_GLOBAL_FILESYSTEM:
372  return ADDON_GLOBAL_VERSION_FILESYSTEM_MIN;
373  case ADDON_GLOBAL_NETWORK:
374  return ADDON_GLOBAL_VERSION_NETWORK_MIN;
375  case ADDON_GLOBAL_TOOLS:
376  return ADDON_GLOBAL_VERSION_TOOLS_MIN;
377 
378  /* addon type instances */
380  return ADDON_INSTANCE_VERSION_AUDIODECODER_MIN;
382  return ADDON_INSTANCE_VERSION_AUDIOENCODER_MIN;
383  case ADDON_INSTANCE_GAME:
384  return ADDON_INSTANCE_VERSION_GAME_MIN;
386  return ADDON_INSTANCE_VERSION_IMAGEDECODER_MIN;
388  return ADDON_INSTANCE_VERSION_INPUTSTREAM_MIN;
390  return ADDON_INSTANCE_VERSION_PERIPHERAL_MIN;
391  case ADDON_INSTANCE_PVR:
392  return ADDON_INSTANCE_VERSION_PVR_MIN;
394  return ADDON_INSTANCE_VERSION_SCREENSAVER_MIN;
395  case ADDON_INSTANCE_VFS:
396  return ADDON_INSTANCE_VERSION_VFS_MIN;
398  return ADDON_INSTANCE_VERSION_VISUALIZATION_MIN;
400  return ADDON_INSTANCE_VERSION_VIDEOCODEC_MIN;
401  }
402  return "0.0.0";
403 }
404 
412 inline const char* GetTypeName(int type)
413 {
414  switch (type)
415  {
416  /* addon global parts */
417  case ADDON_GLOBAL_MAIN:
418  return "Addon";
419  case ADDON_GLOBAL_GUI:
420  return "GUI";
421  case ADDON_GLOBAL_GENERAL:
422  return "General";
423  case ADDON_GLOBAL_AUDIOENGINE:
424  return "AudioEngine";
425  case ADDON_GLOBAL_FILESYSTEM:
426  return "Filesystem";
427  case ADDON_GLOBAL_NETWORK:
428  return "Network";
429  case ADDON_GLOBAL_TOOLS:
430  return "Tools";
431 
432  /* addon type instances */
434  return "AudioDecoder";
436  return "AudioEncoder";
437  case ADDON_INSTANCE_GAME:
438  return "Game";
440  return "ImageDecoder";
442  return "Inputstream";
444  return "Peripheral";
445  case ADDON_INSTANCE_PVR:
446  return "PVR";
448  return "ScreenSaver";
450  return "Visualization";
452  return "VideoCodec";
453  }
454  return "unknown";
455 }
456 
466 inline int GetTypeId(const char* name)
467 {
468  if (name)
469  {
470  if (strcmp(name, "addon") == 0)
471  return ADDON_GLOBAL_MAIN;
472  else if (strcmp(name, "general") == 0)
473  return ADDON_GLOBAL_GENERAL;
474  else if (strcmp(name, "gui") == 0)
475  return ADDON_GLOBAL_GUI;
476  else if (strcmp(name, "audioengine") == 0)
477  return ADDON_GLOBAL_AUDIOENGINE;
478  else if (strcmp(name, "filesystem") == 0)
479  return ADDON_GLOBAL_FILESYSTEM;
480  else if (strcmp(name, "network") == 0)
481  return ADDON_GLOBAL_NETWORK;
482  else if (strcmp(name, "tools") == 0)
483  return ADDON_GLOBAL_TOOLS;
484  else if (strcmp(name, "audiodecoder") == 0)
486  else if (strcmp(name, "audioencoder") == 0)
488  else if (strcmp(name, "game") == 0)
489  return ADDON_INSTANCE_GAME;
490  else if (strcmp(name, "imagedecoder") == 0)
492  else if (strcmp(name, "inputstream") == 0)
494  else if (strcmp(name, "peripheral") == 0)
496  else if (strcmp(name, "pvr") == 0)
497  return ADDON_INSTANCE_PVR;
498  else if (strcmp(name, "screensaver") == 0)
500  else if (strcmp(name, "vfs") == 0)
501  return ADDON_INSTANCE_VFS;
502  else if (strcmp(name, "visualization") == 0)
504  else if (strcmp(name, "videocodec") == 0)
506  }
507  return -1;
508 }
509 
510 #ifdef __cplusplus
511 } /* namespace addon */
512 } /* namespace kodi */
513 } /* extern "C" */
514 #endif
515 
516 #endif /* !KODI_VERSIONS_H */
ADDON_TYPE
Definition: versions.h:201
@ ADDON_INSTANCE_PVR
Game instance, see kodi::addon::CInstancePVRClient.
Definition: versions.h:232
@ ADDON_INSTANCE_AUDIODECODER
Audio decoder instance, see kodi::addon::CInstanceAudioDecoder.
Definition: versions.h:217
@ ADDON_INSTANCE_VISUALIZATION
Music visualization instance, see kodi::addon::CInstanceVisualization.
Definition: versions.h:238
@ ADDON_INSTANCE_AUDIOENCODER
Audio encoder instance, see kodi::addon::CInstanceAudioEncoder.
Definition: versions.h:220
@ ADDON_INSTANCE_SCREENSAVER
PVR client instance, see kodi::addon::CInstanceScreensaver.
Definition: versions.h:235
@ ADDON_INSTANCE_VFS
Virtual Filesystem (VFS) instance, see kodi::addon::CInstanceVFS.
Definition: versions.h:241
@ ADDON_INSTANCE_INPUTSTREAM
Input stream instance, see kodi::addon::CInstanceInputStream.
Definition: versions.h:226
@ ADDON_INSTANCE_VIDEOCODEC
Video Decoder instance, see kodi::addon::CInstanceVideoCodec.
Definition: versions.h:247
@ ADDON_INSTANCE_PERIPHERAL
Peripheral instance, see kodi::addon::CInstancePeripheral.
Definition: versions.h:229
@ ADDON_INSTANCE_GAME
Game instance, see kodi::addon::CInstanceGame.
Definition: versions.h:223
@ ADDON_INSTANCE_IMAGEDECODER
Image Decoder instance, see kodi::addon::CInstanceImageDecoder.
Definition: versions.h:244