aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt41
1 files changed, 27 insertions, 14 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c4b26287..9f91900e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,6 +7,7 @@ include(CheckSymbolExists)
include(CheckFunctionExists)
include(CheckLibraryExists)
include(CheckTypeSize)
+include(CheckStructHasMember)
MACRO(DefineFunctionIfAvailable func feature)
check_function_exists("${func}" "${feature}")
@@ -36,6 +37,13 @@ MACRO(DefineSymbolIfAvailable symbol hfile feature)
ENDIF ()
ENDMACRO(DefineSymbolIfAvailable)
+MACRO(DefineStructHasMemberIfAvailable struct member hfile feature)
+ check_struct_has_member("${struct}" "${member}" "${hfile}" "${feature}")
+ IF (${feature})
+ ADD_DEFINITIONS (-D ${feature})
+ ENDIF ()
+ENDMACRO(DefineStructHasMemberIfAvailable)
+
MACRO(DefineLibraryIfAvailable lib func location feature)
check_library_exists("${lib}" "${func}" "${location}" "${feature}")
IF (${feature})
@@ -68,7 +76,7 @@ add_definitions(-D DEFLIBPATH=\\"${CMAKE_BINARY_DIR}/lib\\")
#add_definitions(-D EXTLIB_SUFFIX=\\"lib\\")
add_definitions(-D SHLIBEXT=\\".so\\")
DefineTypeIfAvailable("unsigned int" SIZEOF_UNSIGNED_INT)
-add_definitions(-D SIZEOF_UNSIGNED_LONG=8)
+DefineTypeIfAvailable("unsigned long" SIZEOF_UNSIGNED_LONG)
#/* Define to 1 if *printf supports %F format */
add_definitions(-D PRINTF_HAS_F_FORMAT)
#/* Define as the return type of signal handlers (`int' or `void'). */
@@ -114,18 +122,25 @@ DefineHFileIfAvailable(wchar.h HAVE_WCHAR_H)
DefineHFileIfAvailable(wctype.h HAVE_WCTYPE_H)
#DefineTypeIfAvailable("long long int" HAVE_LONG_LONG_INT)
#add_definitions(-D HAVE_UNSIGNED_LONG_LONG_INT)
-#add_definitions(-D HAVE_INTMAX_T)
-#CHECK_TYPE_SIZE(uintmax_t UINTMAX_T)
+DefineTypeIfAvailable(intmax_t INTMAX_T)
+DefineTypeIfAvailable(uintmax_t UINTMAX_T)
# These dont work, maybe CheckCSourceCompiles would be better.
add_definitions(-D TIME_T_IN_SYS_TYPES_H)
#DefineTypeIfAvailable("time_t" TIME_T_IN_SYS_TYPES_H)
-add_definitions(-D HAVE_WCTYPE_T)
-#DefineTypeIfAvailable("wctype_t" HAVE_WCTYPE_T)
-add_definitions(-D HAVE_WINT_T)
-#DefineTypeIfAvailable("wint_t" HAVE_WINT_T)
+DefineTypeIfAvailable("wctype_t" WCTYPE_T)
+add_definitions(-D WINT_T)
+#DefineTypeIfAvailable("wint_t" WINT_T)
add_definitions(-D HAVE_SOCKADDR_STORAGE)
-#DefineTypeIfAvailable("struct sockaddr_storage" HAVE_SOCKADDR_STORAGE)
+#DefineTypeIfAvailable("struct sockaddr_storage" SOCKADDR_STORAGE)
+add_definitions(-D HAVE_STRUCT_STAT_ST_BLKSIZE)
+#DefineStructHasMemberIfAvailable("struct stat" st_blksize bits/stat.h HAVE_STRUCT_STAT_ST_BLKSIZE)
+add_definitions(-D HAVE_ST_BLKSIZE)
+#DefineStructHasMemberIfAvailable("struct stat" st_blksize bits/stat.h HAVE_ST_BLKSIZE)
+add_definitions(-D HAVE_TM_ZONE)
+#DefineStructHasMemberIfAvailable("struct tm" tm_zone time.h HAVE_TM_ZONE)
+add_definitions(-D HAVE_STRUCT_TM_TM_ZONE)
+#DefineStructHasMemberIfAvailable("struct tm" tm_zone time.h HAVE_STRUCT_TM_TM_ZONE)
DefineHFileIfAvailable(sys/time.h HAVE_SYS_TIME_H)
DefineFunctionIfAvailable(alarm HAVE_ALARM)
@@ -138,8 +153,9 @@ add_definitions(-D HAVE_FMOD)
DefineFunctionIfAvailable(isinf HAVE_ISINF)
DefineFunctionIfAvailable(ismod HAVE_ISMOD)
DefineFunctionIfAvailable(getgrent HAVE_GETGRENT)
-#add_definitions(-D HAVE_GETGROUPS)
-DefineTypeIfAvailable("pid_t" HAVE_PID_T)
+DefineFunctionIfAvailable(getgroups HAVE_GETGROUPS)
+add_definitions(-D GETGROUPS_T=gid_t)
+DefineTypeIfAvailable("pid_t" PID_T)
DefineFunctionIfAvailable(grantpt HAVE_GRANTPT)
DefineFunctionIfAvailable(isascii HAVE_ISASCII)
DefineFunctionIfAvailable(iswctype HAVE_ISWCTYPE)
@@ -172,10 +188,7 @@ DefineFunctionIfAvailable(wcrtomb HAVE_WCRTOMB)
DefineFunctionIfAvailable(wcscoll HAVE_WCSCOLL)
DefineFunctionIfAvailable(wctype HAVE_WCTYPE)
DefineFunctionIfAvailable(mbrtowc HAVE_MBRTOWC)
-add_definitions(-D HAVE_STRUCT_STAT_ST_BLKSIZE)
-add_definitions(-D HAVE_ST_BLKSIZE)
-add_definitions(-D HAVE_STRUCT_TM_TM_ZONE)
-add_definitions(-D HAVE_TM_ZONE)
+
add_definitions(-D HAVE_STRINGIZE)
add_definitions(-D _Noreturn=)