HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
UT_Version.h
Go to the documentation of this file.
1 //
2 // Copyright 2017 Pixar
3 //
4 // Licensed under the Apache License, Version 2.0 (the "Apache License")
5 // with the following modification; you may not use this file except in
6 // compliance with the Apache License and the following modification to it:
7 // Section 6. Trademarks. is deleted and replaced with:
8 //
9 // 6. Trademarks. This License does not grant permission to use the trade
10 // names, trademarks, service marks, or product names of the Licensor
11 // and its affiliates, except as required to comply with Section 4(c) of
12 // the License and to reproduce the content of the NOTICE file.
13 //
14 // You may obtain a copy of the Apache License at
15 //
16 // http://www.apache.org/licenses/LICENSE-2.0
17 //
18 // Unless required by applicable law or agreed to in writing, software
19 // distributed under the Apache License with the above modification is
20 // distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21 // KIND, either express or implied. See the Apache License for the specific
22 // language governing permissions and limitations under the Apache License.
23 //
24 /**
25  \file
26  \brief Helpers for dealing with versioning in the HDK.
27 */
28 #ifndef _GUSD_UT_VERSION_H_
29 #define _GUSD_UT_VERSION_H_
30 
31 #include "pxr/pxr.h"
32 
33 #include <UT/UT_Version.h>
34 
36 
37 /** Max number of versions for any component (major,minor,etc.) of the
38  current build. Should be at least 1K under current conventions.*/
39 #define _GUSD_MAX_VERS 10000
40 
41 /** Construct a single, consolidated integer value that allows legal
42  comparison between the combination of major+minor+build+patch components.*/
43 #define _GUSD_VER_INT(major,minor,build,patch) \
44  (major*_GUSD_MAX_VERS*_GUSD_MAX_VERS*_GUSD_MAX_VERS + \
45  minor*_GUSD_MAX_VERS*_GUSD_MAX_VERS + \
46  build*_GUSD_MAX_VERS + patch)
47 
48 /** Construct a consolidated version integer for the current Houdini version.
49  Each macro specifies a different level of granularity.
50  @{ */
51 #define _GUSD_CURR_VER_INT_1 _GUSD_VER_INT(UT_MAJOR_VERSION_INT,0,0,0)
52 
53 #define _GUSD_CURR_VER_INT_2 _GUSD_VER_INT(UT_MAJOR_VERSION_INT, \
54  UT_MINOR_VERSION_INT,0,0)
55 
56 #define _GUSD_CURR_VER_INT_3 _GUSD_VER_INT(UT_MAJOR_VERSION_INT, \
57  UT_MINOR_VERSION_INT, \
58  UT_BUILD_VERSION_INT,0)
59 
60 #define _GUSD_CURR_VER_INT_4 _GUSD_VER_INT(UT_MAJOR_VERSION_INT, \
61  UT_MINOR_VERSION_INT, \
62  UT_BUILD_VERSION_INT, \
63  UT_PATCH_VERSION_INT)
64 /* @} */
65 
66 /** Compare the current Houdini version against some other version.
67 
68  @a op should be a comparison operator (<,>,...). The @a major, @a minor,...
69  args form the right-hand side of the comparison.
70 
71  These are typically used to simplify expressions that are used to control
72  compilation that must change from version to version. The different macros
73  each compare the version at a different level of granularity, from the major
74  version all the way down to the patch.
75 
76  Example usage:
77  @code
78  #if (GUSD_VER_CMP_2(>=, 13, 256))
79  // special code path
80  ...
81  @endcode
82 
83  This is equivalent to the comparison, "major.minor >= 13.256"
84 
85  @note: Only the components of the version int specified in the comparison
86  operator are compared. For example, take the following expression:
87 
88  @code
89  GUSD_VER_CMP_2(>, 13, 1)
90  @endcode
91 
92  The expression above will evaluate to _false_ when the internal Houdini
93  version is 13.1.211, because only the major and minor components are
94  being compared; any build difference is ignored.
95  @{ */
96 #define GUSD_VER_CMP_1(op, major) \
97  _GUSD_CURR_VER_INT_1 op _GUSD_VER_INT(major,0,0,0)
98 
99 #define GUSD_VER_CMP_2(op, major, minor) \
100  _GUSD_CURR_VER_INT_2 op _GUSD_VER_INT(major,minor,0,0)
101 
102 #define GUSD_VER_CMP_3(op, major, minor, build) \
103  _GUSD_CURR_VER_INT_3 op _GUSD_VER_INT(major,minor,build,0)
104 
105 #define GUSD_VER_CMP_4(op, major, minor, build, patch) \
106  _GUSD_CURR_VER_INT_4 op _GUSD_VER_INT(major,minor,build,patch)
107 /** @} */
108 
110 
111 #endif /* _GUSD_UT_VERSION_H_ */
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
Definition: path.h:1245
#define PXR_NAMESPACE_CLOSE_SCOPE
Definition: pxr.h:83