]> CyberLeo.Net >> Repos - FreeBSD/stable/10.git/blob - contrib/subversion/subversion/include/private/svn_dep_compat.h
MFC r275385 (by bapt):
[FreeBSD/stable/10.git] / contrib / subversion / subversion / include / private / svn_dep_compat.h
1 /**
2  * @copyright
3  * ====================================================================
4  *    Licensed to the Apache Software Foundation (ASF) under one
5  *    or more contributor license agreements.  See the NOTICE file
6  *    distributed with this work for additional information
7  *    regarding copyright ownership.  The ASF licenses this file
8  *    to you under the Apache License, Version 2.0 (the
9  *    "License"); you may not use this file except in compliance
10  *    with the License.  You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  *    Unless required by applicable law or agreed to in writing,
15  *    software distributed under the License is distributed on an
16  *    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  *    KIND, either express or implied.  See the License for the
18  *    specific language governing permissions and limitations
19  *    under the License.
20  * ====================================================================
21  * @endcopyright
22  *
23  * @file svn_dep_compat.h
24  * @brief Compatibility macros and functions.
25  * @since New in 1.5.0.
26  */
27
28 #ifndef SVN_DEP_COMPAT_H
29 #define SVN_DEP_COMPAT_H
30
31 #include <apr_version.h>
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif /* __cplusplus */
36
37 /**
38  * We assume that 'int' and 'unsigned' are at least 32 bits wide.
39  * This also implies that long (rev numbers) is 32 bits or wider.
40  *
41  * @since New in 1.9.
42  */
43 #if    defined(APR_HAVE_LIMITS_H) \
44     && !defined(SVN_ALLOW_SHORT_INTS) \
45     && (INT_MAX < 0x7FFFFFFFl)
46 #error int is shorter than 32 bits and may break Subversion. Define SVN_ALLOW_SHORT_INTS to skip this check.
47 #endif
48
49 /**
50  * We assume that 'char' is 8 bits wide.  The critical interfaces are
51  * our repository formats and RA encodings.  E.g. a 32 bit wide char may
52  * mess up UTF8 parsing, how we interpret size values etc.
53  *
54  * @since New in 1.9.
55  */
56 #if    defined(CHAR_BIT) \
57     && !defined(SVN_ALLOW_NON_8_BIT_CHARS) \
58     && (CHAR_BIT != 8)
59 #error char is not 8 bits and may break Subversion. Define SVN_ALLOW_NON_8_BIT_CHARS to skip this check.
60 #endif
61
62 /**
63  * Work around a platform dependency issue. apr_thread_rwlock_trywrlock()
64  * will make APR_STATUS_IS_EBUSY() return TRUE if the lock could not be
65  * acquired under Unix. Under Windows, this will not work. So, provide
66  * a more portable substitute.
67  *
68  * @since New in 1.8.
69  */
70 #ifdef WIN32
71 #define SVN_LOCK_IS_BUSY(x) \
72     (APR_STATUS_IS_EBUSY(x) || (x) == APR_FROM_OS_ERROR(WAIT_TIMEOUT))
73 #else
74 #define SVN_LOCK_IS_BUSY(x) APR_STATUS_IS_EBUSY(x)
75 #endif
76
77 /**
78  * APR keeps a few interesting defines hidden away in its private
79  * headers apr_arch_file_io.h, so we redefined them here.
80  *
81  * @since New in 1.9
82  */
83 #ifndef APR_FREADONLY
84 #define APR_FREADONLY 0x10000000
85 #endif
86 #ifndef APR_OPENINFO
87 #define APR_OPENINFO  0x00100000
88 #endif
89
90 #if !APR_VERSION_AT_LEAST(1,4,0)
91 #ifndef apr_time_from_msec
92 #define apr_time_from_msec(msec) ((apr_time_t)(msec) * 1000)
93 #endif
94 #endif
95
96 /**
97  * Check at compile time if the Serf version is at least a certain
98  * level.
99  * @param major The major version component of the version checked
100  * for (e.g., the "1" of "1.3.0").
101  * @param minor The minor version component of the version checked
102  * for (e.g., the "3" of "1.3.0").
103  * @param patch The patch level component of the version checked
104  * for (e.g., the "0" of "1.3.0").
105  *
106  * @since New in 1.5.
107  */
108 #ifndef SERF_VERSION_AT_LEAST /* Introduced in Serf 0.1.1 */
109 #define SERF_VERSION_AT_LEAST(major,minor,patch)                       \
110 (((major) < SERF_MAJOR_VERSION)                                        \
111  || ((major) == SERF_MAJOR_VERSION && (minor) < SERF_MINOR_VERSION)    \
112  || ((major) == SERF_MAJOR_VERSION && (minor) == SERF_MINOR_VERSION && \
113      (patch) <= SERF_PATCH_VERSION))
114 #endif /* SERF_VERSION_AT_LEAST */
115
116 /**
117  * By default, if libsvn is built against one version of SQLite
118  * and then run using an older version, svn will error out:
119  *
120  *     svn: Couldn't perform atomic initialization
121  *     svn: SQLite compiled for 3.7.4, but running with 3.7.3
122  *
123  * That can be annoying when building on a modern system in order
124  * to deploy on a less modern one.  So these constants allow one
125  * to specify how old the system being deployed on might be.
126  * For example,
127  *
128  *     EXTRA_CFLAGS += -DSVN_SQLITE_MIN_VERSION_NUMBER=3007003
129  *     EXTRA_CFLAGS += '-DSVN_SQLITE_MIN_VERSION="3.7.3"'
130  *
131  * turns on code that works around infelicities in older versions
132  * as far back as 3.7.3 and relaxes the check at initialization time
133  * to permit them.
134  *
135  * @since New in 1.8.
136  */
137 #ifndef SVN_SQLITE_MIN_VERSION_NUMBER
138 #define SVN_SQLITE_MIN_VERSION_NUMBER SQLITE_VERSION_NUMBER
139 #define SVN_SQLITE_MIN_VERSION SQLITE_VERSION
140 #endif /* SVN_SQLITE_MIN_VERSION_NUMBER */
141
142 /**
143  * Check at compile time if the SQLite version is at least a certain
144  * level.
145  * @param major The major version component of the version checked
146  * for (e.g., the "1" of "1.3.0").
147  * @param minor The minor version component of the version checked
148  * for (e.g., the "3" of "1.3.0").
149  * @param patch The patch level component of the version checked
150  * for (e.g., the "0" of "1.3.0").
151  *
152  * @since New in 1.6.
153  */
154 #ifndef SQLITE_VERSION_AT_LEAST
155 #define SQLITE_VERSION_AT_LEAST(major,minor,patch)                     \
156 ((major*1000000 + minor*1000 + patch) <= SVN_SQLITE_MIN_VERSION_NUMBER)
157 #endif /* SQLITE_VERSION_AT_LEAST */
158
159 #ifdef __cplusplus
160 }
161 #endif /* __cplusplus */
162
163 #endif /* SVN_DEP_COMPAT_H */