1 // config.h
2 
3 #ifndef _CONFIG_H_
4 #define _CONFIG_H_
5 
6 ///// Start of Visual Studio Support /////
7 #ifdef  _MSC_VER
8 
9 #define _MSC_VER_2010 1600
10 #define _MSC_VER_2008 1500
11 
12 // Constants required by Microsoft SDKs to define SHGetFolderPathA and others
13 
14 #ifndef _WIN32_WINNT
15 // Visual Studio 2012 and earlier
16 # if _MSC_VER < 1800
17 #  define _WIN32_WINNT 0x0501
18 # else
19 #  define _WIN32_WINNT 0x0600
20 # endif
21 #endif
22 
23 #if _MSC_VER >= _MSC_VER_2008
24 #pragma warning(disable : 4996) // Disable warnings about 'deprecated' standard functions
25 #pragma warning(disable : 4251) // Disable warnings from std templates about exporting interfaces
26 #endif
27 
28 /* On Microsoft compilers pid_t has to be set to int. */
29 #ifndef HAVE_PID_T
30 typedef int pid_t;
31 #endif
32 
33 #endif // _MSC_VER
34 ///// End of Visual Studio Support /////
35 
36 #include "exv_conf.h"
37 ////////////////////////////////////////
38 
39 ///// Start of platform marcos /////////
40 #if defined(__MINGW32__) || defined(__MINGW64__)
41 # ifndef  __MING__
42 #  define __MING__  1
43 # endif
44 # ifndef  __MINGW__
45 #  define __MINGW__ 1
46 # endif
47 #endif
48 
49 #ifndef __CYGWIN__
50 # if defined(__CYGWIN32__) || defined(__CYGWIN64__)
51 #  define __CYGWIN__ 1
52 # endif
53 #endif
54 
55 #ifndef __LITTLE_ENDIAN__
56 # if    defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
57 #  if            __BYTE_ORDER__  ==         __ORDER_LITTLE_ENDIAN__
58 #   define __LITTLE_ENDIAN__ 1
59 #  endif
60 # endif
61 #endif
62 
63 #ifndef __LITTLE_ENDIAN__
64 # if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW__)
65 #  define __LITTLE_ENDIAN__ 1
66 # endif
67 #endif
68 
69 /*
70   If you're using Solaris and the Solaris Studio compiler
71   you must -library=stdcxx4 along with these inclusions below
72 */
73 #if defined(OS_SOLARIS)
74 # include <string.h>
75 # include <strings.h>
76 # include <math.h>
77 # if defined(__cplusplus)
78 #  include <ios>
79 #  include <fstream>
80 # endif
81 #endif
82 ///// End of platform marcos /////////
83 
84 ///// Path separator marcos      /////
85 #ifndef EXV_SEPARATOR_STR
86 # if defined(WIN32) && !defined(__CYGWIN__)
87 #  define EXV_SEPARATOR_STR "\\"
88 #  define EXV_SEPARATOR_CHR '\\'
89 # else
90 #  define EXV_SEPARATOR_STR "/"
91 #  define EXV_SEPARATOR_CHR '/'
92 # endif
93 #endif
94 //////////////////////////////////////
95 
96 
97 // https://softwareengineering.stackexchange.com/questions/291141/how-to-handle-design-changes-for-auto-ptr-deprecation-in-c11
98 #if __cplusplus >= 201103L
99   #include <memory>
100   #include <sys/types.h>
101   #ifndef  _MSC_VER
102     #include <unistd.h>
103   #endif
104   template <typename T>
105   using auto_ptr = std::unique_ptr<T>;
106 #endif
107 
108 #endif // _CONFIG_H_
109