Patch to allow mingw32 compilation
This commit is contained in:
		
							parent
							
								
									9b8ec6ec5a
								
							
						
					
					
						commit
						8337f13d6c
					
				| @ -4,6 +4,29 @@ MESSAGE(STATUS "CMAKE_SYSTEM_NAME is ${CMAKE_SYSTEM_NAME}") | |||||||
| 
 | 
 | ||||||
| INCLUDE_DIRECTORIES(../include/) | INCLUDE_DIRECTORIES(../include/) | ||||||
| 
 | 
 | ||||||
|  | INCLUDE(CheckCSourceCompiles) | ||||||
|  | 
 | ||||||
|  | MACRO (CHECK_STRUCT_MEMBER _STRUCT _MEMBER _HEADER _RESULT) | ||||||
|  |    SET(_INCLUDE_FILES) | ||||||
|  |    FOREACH (it ${_HEADER}) | ||||||
|  |       SET(_INCLUDE_FILES "${_INCLUDE_FILES}#include <${it}>\n") | ||||||
|  |    ENDFOREACH (it) | ||||||
|  | 
 | ||||||
|  |    SET(_CHECK_STRUCT_MEMBER_SOURCE_CODE " | ||||||
|  | ${_INCLUDE_FILES} | ||||||
|  | int main() | ||||||
|  | { | ||||||
|  |    static ${_STRUCT} tmp; | ||||||
|  |    if (sizeof(tmp.${_MEMBER})) | ||||||
|  |       return 0; | ||||||
|  |   return 0; | ||||||
|  | } | ||||||
|  | ") | ||||||
|  |    CHECK_C_SOURCE_COMPILES("${_CHECK_STRUCT_MEMBER_SOURCE_CODE}" ${_RESULT}) | ||||||
|  | 
 | ||||||
|  | ENDMACRO (CHECK_STRUCT_MEMBER) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| ## linux | ## linux | ||||||
| IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") | IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") | ||||||
|   SET(SIGAR_SRC os/linux/linux_sigar.c) |   SET(SIGAR_SRC os/linux/linux_sigar.c) | ||||||
| @ -60,6 +83,8 @@ IF(WIN32) | |||||||
|   ADD_DEFINITIONS(-DSIGAR_SHARED) |   ADD_DEFINITIONS(-DSIGAR_SHARED) | ||||||
|   SET(SIGAR_SRC os/win32/peb.c os/win32/win32_sigar.c) |   SET(SIGAR_SRC os/win32/peb.c os/win32/win32_sigar.c) | ||||||
|   INCLUDE_DIRECTORIES(os/win32) |   INCLUDE_DIRECTORIES(os/win32) | ||||||
|  |   CHECK_STRUCT_MEMBER(MIB_IPADDRROW wType "windows.h;iphlpapi.h" wType_in_MIB_IPADDRROW) | ||||||
|  |   add_definitions(-DHAVE_MIB_IPADDRROW_WTYPE=${wType_in_MIB_IPADDRROW}) | ||||||
| ENDIF(WIN32) | ENDIF(WIN32) | ||||||
| 
 | 
 | ||||||
| SET(SIGAR_SRC ${SIGAR_SRC} | SET(SIGAR_SRC ${SIGAR_SRC} | ||||||
|  | |||||||
| @ -19,11 +19,15 @@ | |||||||
| #ifndef SIGAR_OS_H | #ifndef SIGAR_OS_H | ||||||
| #define SIGAR_OS_H | #define SIGAR_OS_H | ||||||
| 
 | 
 | ||||||
|  | #ifdef MSVC | ||||||
| #if _MSC_VER <= 1200 | #if _MSC_VER <= 1200 | ||||||
| #define SIGAR_USING_MSC6 /* Visual Studio version 6 */ | #define SIGAR_USING_MSC6 /* Visual Studio version 6 */ | ||||||
| #endif | #endif | ||||||
|  | #else | ||||||
|  | /* Cross compiling */ | ||||||
|  | #define _WIN32_WINNT 0x0501 | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #define WIN32_LEAN_AND_MEAN |  | ||||||
| #include <windows.h> | #include <windows.h> | ||||||
| #include <winreg.h> | #include <winreg.h> | ||||||
| #include <winperf.h> | #include <winperf.h> | ||||||
| @ -38,7 +42,22 @@ | |||||||
| 
 | 
 | ||||||
| #include "sigar_util.h" | #include "sigar_util.h" | ||||||
| 
 | 
 | ||||||
| #define INT64_C(val) val##i64 | #ifdef MSVC | ||||||
|  | #  define INT64_C(val) val##i64 | ||||||
|  | #  define SIGAR_DLLFUNC(api, name) \ | ||||||
|  |     struct { \ | ||||||
|  |          const char *name; \ | ||||||
|  |          ##api##_##name func; \ | ||||||
|  |     } ##name | ||||||
|  | #else | ||||||
|  | /* The GCC compiler doesn't require/accept the ## prefix */ | ||||||
|  | #  define INT64_C(val) val##L | ||||||
|  | #  define SIGAR_DLLFUNC(api, name)		\ | ||||||
|  |     struct { \ | ||||||
|  |          const char *name; \ | ||||||
|  |          api##_##name func; \ | ||||||
|  |     } name | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| /* see apr/include/arch/win32/atime.h */ | /* see apr/include/arch/win32/atime.h */ | ||||||
| #define EPOCH_DELTA INT64_C(11644473600000000) | #define EPOCH_DELTA INT64_C(11644473600000000) | ||||||
| @ -457,12 +476,6 @@ typedef BOOL (CALLBACK *mpr_get_net_connection)(LPCTSTR, | |||||||
|                                                 LPTSTR, |                                                 LPTSTR, | ||||||
|                                                 LPDWORD); |                                                 LPDWORD); | ||||||
| 
 | 
 | ||||||
| #define SIGAR_DLLFUNC(api, name) \ |  | ||||||
|     struct { \ |  | ||||||
|          const char *name; \ |  | ||||||
|          ##api##_##name func; \ |  | ||||||
|     } ##name |  | ||||||
| 
 |  | ||||||
| typedef struct { | typedef struct { | ||||||
|     sigar_dll_handle_t handle; |     sigar_dll_handle_t handle; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ | |||||||
| #include "sigar_util.h" | #include "sigar_util.h" | ||||||
| #include "sigar_format.h" | #include "sigar_format.h" | ||||||
| #include <shellapi.h> | #include <shellapi.h> | ||||||
|  | #include <iphlpapi.h> | ||||||
| 
 | 
 | ||||||
| #define USING_WIDE_S(s) (s)->using_wide | #define USING_WIDE_S(s) (s)->using_wide | ||||||
| #define USING_WIDE()    USING_WIDE_S(sigar) | #define USING_WIDE()    USING_WIDE_S(sigar) | ||||||
| @ -124,6 +125,9 @@ typedef enum { | |||||||
| #define MS_LOOPBACK_ADAPTER "Microsoft Loopback Adapter" | #define MS_LOOPBACK_ADAPTER "Microsoft Loopback Adapter" | ||||||
| #define NETIF_LA "la" | #define NETIF_LA "la" | ||||||
| 
 | 
 | ||||||
|  | static int get_proc_info(sigar_t *sigar, sigar_pid_t pid); | ||||||
|  | static int netif_hash(char *s); | ||||||
|  | 
 | ||||||
| sigar_uint64_t sigar_FileTimeToTime(FILETIME *ft) | sigar_uint64_t sigar_FileTimeToTime(FILETIME *ft) | ||||||
| { | { | ||||||
|     sigar_uint64_t time; |     sigar_uint64_t time; | ||||||
| @ -374,6 +378,7 @@ static sigar_mpr_t sigar_mpr = { | |||||||
|     { NULL, NULL } |     { NULL, NULL } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | #ifdef MSVC | ||||||
| #define DLLMOD_COPY(name) \ | #define DLLMOD_COPY(name) \ | ||||||
|     memcpy(&(sigar->##name), &sigar_##name, sizeof(sigar_##name)) |     memcpy(&(sigar->##name), &sigar_##name, sizeof(sigar_##name)) | ||||||
| 
 | 
 | ||||||
| @ -382,6 +387,18 @@ static sigar_mpr_t sigar_mpr = { | |||||||
| 
 | 
 | ||||||
| #define DLLMOD_FREE(name) \ | #define DLLMOD_FREE(name) \ | ||||||
|     sigar_dllmod_free((sigar_dll_module_t *)&(sigar->##name)) |     sigar_dllmod_free((sigar_dll_module_t *)&(sigar->##name)) | ||||||
|  | #else | ||||||
|  | /* The GCC compiler doesn't require/accept the ## prefix */ | ||||||
|  | #define DLLMOD_COPY(name) \ | ||||||
|  |     memcpy(&(sigar->name), &sigar_##name, sizeof(sigar_##name)) | ||||||
|  | 
 | ||||||
|  | #define DLLMOD_INIT(name, all) \ | ||||||
|  |     sigar_dllmod_init(sigar, (sigar_dll_module_t *)&(sigar->name), all) | ||||||
|  | 
 | ||||||
|  | #define DLLMOD_FREE(name) \ | ||||||
|  |     sigar_dllmod_free((sigar_dll_module_t *)&(sigar->name)) | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| static void sigar_dllmod_free(sigar_dll_module_t *module) | static void sigar_dllmod_free(sigar_dll_module_t *module) | ||||||
| { | { | ||||||
| @ -1470,7 +1487,9 @@ static int sigar_remote_proc_args_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /* likely we are 32-bit, pid process is 64-bit */ |     /* likely we are 32-bit, pid process is 64-bit */ | ||||||
|  | #ifdef MSVC | ||||||
|     status = sigar_proc_args_wmi_get(sigar, pid, procargs); |     status = sigar_proc_args_wmi_get(sigar, pid, procargs); | ||||||
|  | #endif | ||||||
|     if (status == ERROR_NOT_FOUND) { |     if (status == ERROR_NOT_FOUND) { | ||||||
|         status = SIGAR_NO_SUCH_PROCESS; |         status = SIGAR_NO_SUCH_PROCESS; | ||||||
|     } |     } | ||||||
| @ -1507,7 +1526,7 @@ static int sigar_proc_env_parse(UCHAR *ptr, sigar_proc_env_t *procenv, | |||||||
|             break; /*XXX*/ |             break; /*XXX*/ | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         klen = val - ptr; |         klen = val - (char*)ptr; | ||||||
|         SIGAR_SSTRCPY(key, ptr); |         SIGAR_SSTRCPY(key, ptr); | ||||||
|         key[klen] = '\0'; |         key[klen] = '\0'; | ||||||
|         ++val; |         ++val; | ||||||
| @ -1640,6 +1659,7 @@ SIGAR_DECLARE(int) sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     status = sigar_proc_exe_peb_get(sigar, proc, procexe); |     status = sigar_proc_exe_peb_get(sigar, proc, procexe); | ||||||
|  | #ifdef MSVC | ||||||
|     if (procexe->name[0] == '\0') { |     if (procexe->name[0] == '\0') { | ||||||
|         /* likely we are 32-bit, pid process is 64-bit */ |         /* likely we are 32-bit, pid process is 64-bit */ | ||||||
|         /* procexe->cwd[0] = XXX where else can we try? */ |         /* procexe->cwd[0] = XXX where else can we try? */ | ||||||
| @ -1648,7 +1668,7 @@ SIGAR_DECLARE(int) sigar_proc_exe_get(sigar_t *sigar, sigar_pid_t pid, | |||||||
|             status = SIGAR_NO_SUCH_PROCESS; |             status = SIGAR_NO_SUCH_PROCESS; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | #endif | ||||||
|     if (procexe->cwd[0] != '\0') { |     if (procexe->cwd[0] != '\0') { | ||||||
|         /* strip trailing '\' */ |         /* strip trailing '\' */ | ||||||
|         int len = strlen(procexe->cwd); |         int len = strlen(procexe->cwd); | ||||||
| @ -2394,10 +2414,10 @@ static int sigar_get_netif_ipaddr(sigar_t *sigar, | |||||||
|             MIB_IPADDRROW *row = &mib->table[i]; |             MIB_IPADDRROW *row = &mib->table[i]; | ||||||
|             short type; |             short type; | ||||||
| 
 | 
 | ||||||
| #ifdef SIGAR_USING_MSC6 | #if HAVE_MIB_IPADDRROW_WTYPE | ||||||
|             type = row->unused2; |  | ||||||
| #else |  | ||||||
|             type = row->wType; |             type = row->wType; | ||||||
|  | #else | ||||||
|  |             type = row->unused2; | ||||||
| #endif | #endif | ||||||
|             if (!(type & MIB_IPADDR_PRIMARY)) { |             if (!(type & MIB_IPADDR_PRIMARY)) { | ||||||
|                 continue; |                 continue; | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #if defined(_WIN32) | #if defined(MSVC) | ||||||
| #include <WinError.h> | #include <WinError.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| @ -85,7 +85,7 @@ TEST(test_sigar_file_system_list_get) { | |||||||
| 		} else { | 		} else { | ||||||
| 			switch (ret) { | 			switch (ret) { | ||||||
| 				/* track the expected error code */ | 				/* track the expected error code */ | ||||||
| #if defined(_WIN32) | #if defined(MSVC) | ||||||
| 			case ERROR_NOT_READY: | 			case ERROR_NOT_READY: | ||||||
| 				break; | 				break; | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -39,7 +39,7 @@ | |||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <errno.h> | #include <errno.h> | ||||||
| #if defined(_WIN32) | #if defined(MSVC) | ||||||
| #include <WinError.h> | #include <WinError.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| @ -127,7 +127,7 @@ TEST(test_sigar_proc_list_get) { | |||||||
| 			switch (ret) { | 			switch (ret) { | ||||||
| 			case EPERM: | 			case EPERM: | ||||||
| 			case ESRCH: | 			case ESRCH: | ||||||
| #if (defined(_WIN32)) | #if (defined(MSVC)) | ||||||
| 			/* OpenProcess() may return ERROR_ACCESS_DENIED */ | 			/* OpenProcess() may return ERROR_ACCESS_DENIED */ | ||||||
| 			case ERROR_ACCESS_DENIED: | 			case ERROR_ACCESS_DENIED: | ||||||
| #endif | #endif | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Adam Stokes
						Adam Stokes