OSDN Git Service

check for sockaddr_ll and sockaddr_dl during build
authorIvailo Monev <xakepa10@gmail.com>
Tue, 20 Oct 2020 21:40:40 +0000 (00:40 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Tue, 20 Oct 2020 21:40:40 +0000 (00:40 +0300)
apparently illumos has sockaddr_ll much like Linux

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
CMakeLists.txt
cmake/modules/KatieBuildMacros.cmake
src/network/kernel/qnetworkinterface_unix.cpp

index 552832e..a30a4e3 100644 (file)
@@ -199,6 +199,9 @@ katie_check_function(fegetenv "fenv.h")
 katie_check_function(fesetenv "fenv.h")
 katie_check_function(feclearexcept "fenv.h")
 katie_check_function(feenableexcept "fenv.h")
+# none
+katie_check_struct(sockaddr_ll sll_addr "netpacket/packet.h")
+katie_check_struct(sockaddr_dl sdl_index "net/if_dl.h")
 
 # 64-bit offset alternatives, if any of the functions is not found it will set
 # QT_LARGEFILE_SUPPORT to FALSE. QT_LARGEFILE_SUPPORT is used in qconfig.h
index 8020a37..253164c 100644 (file)
@@ -9,6 +9,7 @@ set(KATIE_LRELEASE "lrelease")
 include(CMakePushCheckState)
 include(CheckSymbolExists)
 include(CheckFunctionExists)
+include(CheckStructHasMember)
 
 # a macro to print a dev warning but only when the build type is Debug
 macro(KATIE_WARNING MESSAGESTR)
@@ -73,6 +74,20 @@ function(KATIE_CHECK_FUNCTION64 FORFUNCTION FROMHEADER)
     endif()
 endfunction()
 
+# a macro to check for C struct member presence in header, if member is found a
+# definition is added.
+function(KATIE_CHECK_STRUCT FORSTRUCT FORMEMBER FROMHEADER)
+    cmake_reset_check_state()
+    set(CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${ARGN})
+    check_struct_has_member("struct ${FORSTRUCT}" "${FORMEMBER}" "${FROMHEADER}" HAVE_${FORSTRUCT}_${FORMEMBER})
+    cmake_pop_check_state()
+
+    if(HAVE_${FORSTRUCT}_${FORMEMBER})
+        string(TOUPPER "${FORSTRUCT}" upperstruct)
+        add_definitions(-DQT_HAVE_${upperstruct})
+    endif()
+endfunction()
+
 # a macro to write data to file, does nothing if the file exists and its
 # content is the same as the data to be written
 macro(KATIE_WRITE_FILE OUTFILE DATA)
index e43f928..5c4e9b1 100644 (file)
@@ -282,7 +282,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
 QT_END_INCLUDE_NAMESPACE
 # endif
 
-# if defined(Q_OS_LINUX) && defined(__GLIBC__)
+# if defined(QT_HAVE_SOCKADDR_LL)
 #  include <netpacket/packet.h>
 
 static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
@@ -326,7 +326,7 @@ static QList<QNetworkInterfacePrivate *> createInterfaces(ifaddrs *rawList)
     return interfaces;
 }
 
-# elif defined(Q_OS_BSD4)
+# elif defined(QT_HAVE_SOCKADDR_DL)
 QT_BEGIN_INCLUDE_NAMESPACE
 #  include <net/if_dl.h>
 QT_END_INCLUDE_NAMESPACE