First MinGW-w64 support for cmake has been added. To test I recommend this build:
[blender.git] / source / blender / blenlib / BLI_winstuff.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
19  * All rights reserved.
20  *
21  * The Original Code is: all of this file.
22  *
23  * Contributor(s): none yet.
24  *
25  * ***** END GPL LICENSE BLOCK *****
26  */
27  
28 #ifndef __BLI_WINSTUFF_H__
29 #define __BLI_WINSTUFF_H__
30
31 /** \file BLI_winstuff.h
32  *  \ingroup bli
33  *  \brief Compatibility-like things for windows.
34  */
35
36 #ifndef _WIN32
37 #  error "This include is for Windows only!"
38 #endif
39
40 #ifndef FREE_WINDOWS
41 #  pragma warning(once: 4761 4305 4244 4018)
42 #else
43 #  ifdef WINVER
44 #    undef WINVER
45 #  endif
46
47 /* Some stuff requires WINVER 0x500, but mingw's default is 0x400 */
48 #  define WINVER 0x0501
49 #endif
50
51 #define WIN32_LEAN_AND_MEAN
52
53 #ifndef WIN32_SKIP_HKEY_PROTECTION
54 #  undef HKEY
55 #  define HKEY WIN32_HKEY                               // prevent competing definitions
56 #  include <windows.h>
57 #  undef HKEY
58 #else
59 #  include <windows.h>
60 #endif
61
62 #undef near
63 #undef far
64 #undef rad
65 #undef rad1
66 #undef rad2
67 #undef rad3
68 #undef vec
69 #undef rect
70 #undef rct1
71 #undef rct2
72
73 #define near clipsta
74 #define far clipend
75
76 #undef small
77
78 // These definitions are also in BLI_math for simplicity
79
80 #ifdef __cplusplus
81 extern "C" {
82 #endif
83
84 #define _USE_MATH_DEFINES
85 #define MAXPATHLEN MAX_PATH
86
87 #ifndef S_ISREG
88 #  define S_ISREG(x) (((x)&_S_IFREG) == _S_IFREG)
89 #endif
90 #ifndef S_ISDIR
91 #  define S_ISDIR(x) (((x)&_S_IFDIR) == _S_IFDIR)
92 #endif
93
94 /* defines for using ISO C++ conformant names */
95 #define snprintf _snprintf
96
97 #ifndef FREE_WINDOWS
98 typedef unsigned int mode_t;
99 #endif
100
101 /* use functions that take a 64 bit offset for files larger than 4GB */
102 #ifndef FREE_WINDOWS
103 #  include <stdio.h>
104 #  define fseek(stream, offset, origin) _fseeki64(stream, offset, origin)
105 #  define ftell(stream) _ftelli64(stream)
106 #  define lseek(fd, offset, origin) _lseeki64(fd, offset, origin)
107 #  define tell(fd) _telli64(fd)
108 #endif
109
110 /* mingw using _SSIZE_T_ to declare ssize_t type */
111 #ifndef _SSIZE_T_
112 #  define _SSIZE_T_
113 /* python uses HAVE_SSIZE_T */
114 #  ifndef HAVE_SSIZE_T
115 #    define HAVE_SSIZE_T 1
116 #    ifndef FREE_WINDOWS64
117 typedef long ssize_t;
118 #    endif
119 #  endif
120 #endif
121
122 struct dirent {
123         int d_ino;
124         int d_off;
125         unsigned short d_reclen;
126         char *d_name;
127 };
128
129 typedef struct _DIR {
130         HANDLE handle;
131         WIN32_FIND_DATAW data;
132         char path[MAX_PATH];
133         long dd_loc;
134         long dd_size;
135         char dd_buf[4096];
136         void *dd_direct;
137         
138         struct dirent direntry;
139 } DIR;
140
141 void RegisterBlendExtension(void);
142 DIR *opendir (const char *path);
143 struct dirent *readdir(DIR *dp);
144 int closedir (DIR *dp);
145 void get_default_root(char *root);
146 int check_file_chars(char *filename);
147 const char *dirname(char *path);
148
149 int BLI_getInstallationDir(char *str);
150
151 #ifdef __cplusplus
152 }
153 #endif
154
155 #endif /* __BLI_WINSTUFF_H__ */
156