diff --git a/CMakeLists.txt b/CMakeLists.txt index 3e6e85963..319bc18e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1186,7 +1186,35 @@ if(WIN32) PRIVATE "-static" # stdc++, winpthread, gcc_s, etc. ) endif() - set(CMAKE_CXX_STANDARD 17) + set(CMAKE_CXX_STANDARD 17) +endif() +if(LINUX) + CHECK_INCLUDE_FILE("linux/videodev2.h" HAVE_LINUX_VIDEODEV2) + if(HAVE_LINUX_VIDEODEV2) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_LINUX_VIDEODEV2=1) + endif() + CHECK_INCLUDE_FILE("linux/wireless.h" HAVE_LINUX_WIRELESS) + if(HAVE_LINUX_WIRELESS) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_LINUX_WIRELESS=1) + endif() +endif() +if(NOT WIN32) + CHECK_INCLUDE_FILE("utmpx.h" HAVE_UTMPX) + if(HAVE_UTMPX) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_UTMPX=1) + endif() + CHECK_INCLUDE_FILE("wordexp.h" HAVE_WORDEXP) + if(HAVE_WORDEXP) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_WORDEXP=1) + endif() + CHECK_INCLUDE_FILE("pthread_np.h" HAVE_PTHREAD_NP) + if(HAVE_PTHREAD_NP) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_PTHREAD_NP=1) + endif() + check_function_exists("pthread_timedjoin_np" HAVE_TIMEDJOIN_NP) + if(HAVE_TIMEDJOIN_NP) + target_compile_definitions(libfastfetch PRIVATE FF_HAVE_TIMEDJOIN_NP=1) + endif() endif() ###################### diff --git a/src/common/init.c b/src/common/init.c index 13d6f4468..c9c80ed97 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -173,94 +173,94 @@ void ffDestroyInstance(void) void ffListFeatures(void) { fputs( - #ifdef FF_HAVE_THREADS + #if FF_HAVE_THREADS "threads\n" #endif - #ifdef FF_HAVE_VULKAN + #if FF_HAVE_VULKAN "vulkan\n" #endif - #ifdef FF_HAVE_WAYLAND + #if FF_HAVE_WAYLAND "wayland\n" #endif - #ifdef FF_HAVE_XCB_RANDR + #if FF_HAVE_XCB_RANDR "xcb-randr\n" #endif - #ifdef FF_HAVE_XCB + #if FF_HAVE_XCB "xcb\n" #endif - #ifdef FF_HAVE_XRANDR + #if FF_HAVE_XRANDR "xrandr\n" #endif - #ifdef FF_HAVE_X11 + #if FF_HAVE_X11 "x11\n" #endif - #ifdef FF_HAVE_DRM + #if FF_HAVE_DRM "drm\n" #endif - #ifdef FF_HAVE_GIO + #if FF_HAVE_GIO "gio\n" #endif - #ifdef FF_HAVE_DCONF + #if FF_HAVE_DCONF "dconf\n" #endif - #ifdef FF_HAVE_DBUS + #if FF_HAVE_DBUS "dbus\n" #endif - #ifdef FF_HAVE_IMAGEMAGICK7 + #if FF_HAVE_IMAGEMAGICK7 "imagemagick7\n" #endif - #ifdef FF_HAVE_IMAGEMAGICK6 + #if FF_HAVE_IMAGEMAGICK6 "imagemagick6\n" #endif - #ifdef FF_HAVE_CHAFA + #if FF_HAVE_CHAFA "chafa\n" #endif - #ifdef FF_HAVE_ZLIB + #if FF_HAVE_ZLIB "zlib\n" #endif - #ifdef FF_HAVE_XFCONF + #if FF_HAVE_XFCONF "xfconf\n" #endif - #ifdef FF_HAVE_SQLITE3 + #if FF_HAVE_SQLITE3 "sqlite3\n" #endif - #ifdef FF_HAVE_RPM + #if FF_HAVE_RPM "rpm\n" #endif - #ifdef FF_HAVE_EGL + #if FF_HAVE_EGL "egl\n" #endif - #ifdef FF_HAVE_GLX + #if FF_HAVE_GLX "glx\n" #endif - #ifdef FF_HAVE_OSMESA + #if FF_HAVE_OSMESA "osmesa\n" #endif - #ifdef FF_HAVE_OPENCL + #if FF_HAVE_OPENCL "opencl\n" #endif - #ifdef FF_HAVE_FREETYPE + #if FF_HAVE_FREETYPE "freetype\n" #endif - #ifdef FF_HAVE_PULSE + #if FF_HAVE_PULSE "libpulse\n" #endif - #ifdef FF_HAVE_LIBNM + #if FF_HAVE_LIBNM "libnm\n" #endif - #ifdef FF_HAVE_DDCUTIL + #if FF_HAVE_DDCUTIL "libddcutil\n" #endif - #ifdef FF_HAVE_DIRECTX_HEADERS + #if FF_HAVE_DIRECTX_HEADERS "Directx Headers\n" #endif - #ifdef FF_USE_SYSTEM_YYJSON + #if FF_USE_SYSTEM_YYJSON "System yyjson\n" #endif - #if __has_include() + #if FF_HAVE_LINUX_VIDEODEV2 "linux/videodev2\n" #endif - #if __has_include() + #if FF_HAVE_LINUX_WIRELESS "linux/wireless\n" #endif "" diff --git a/src/common/io/io_unix.c b/src/common/io/io_unix.c index 788d47a3f..870b773fa 100644 --- a/src/common/io/io_unix.c +++ b/src/common/io/io_unix.c @@ -8,8 +8,10 @@ #include #include -#if __has_include() -#include +#if FF_HAVE_WORDEXP + #include +#else + #warning " not available" #endif static void createSubfolders(const char* fileName) @@ -112,7 +114,7 @@ bool ffPathExpandEnv(FF_MAYBE_UNUSED const char* in, FF_MAYBE_UNUSED FFstrbuf* o { bool result = false; - #if __has_include() // https://github.com/termux/termux-packages/pull/7056 + #if FF_HAVE_WORDEXP // https://github.com/termux/termux-packages/pull/7056 wordexp_t exp; if(wordexp(in, &exp, 0) != 0) diff --git a/src/common/thread.h b/src/common/thread.h index 2fd328cf4..62c8cc056 100644 --- a/src/common/thread.h +++ b/src/common/thread.h @@ -33,7 +33,7 @@ #else #include #include - #if __has_include() + #if FF_HAVE_PTHREAD_NP #include #endif #define FF_THREAD_MUTEX_INITIALIZER PTHREAD_MUTEX_INITIALIZER @@ -51,7 +51,7 @@ static inline void ffThreadDetach(FFThreadType thread) { pthread_detach(thread); } static inline bool ffThreadJoin(FFThreadType thread, FF_MAYBE_UNUSED uint32_t timeout) { - #if (defined(__linux__) && !defined(__ANDROID__)) || __has_include() + #if HAVE_TIMEDJOIN_NP if (timeout > 0) { struct timespec ts; diff --git a/src/detection/camera/camera_linux.c b/src/detection/camera/camera_linux.c index 080a322a9..d7e2988e4 100644 --- a/src/detection/camera/camera_linux.c +++ b/src/detection/camera/camera_linux.c @@ -5,13 +5,13 @@ #include #include -#if __has_include() +#if FF_HAVE_LINUX_VIDEODEV2 #include #endif const char* ffDetectCamera(FFlist* result) { -#if __has_include() +#if FF_HAVE_LINUX_VIDEODEV2 char path[] = "/dev/videoN"; for (uint32_t i = 0; i <= 9; ++i) diff --git a/src/detection/gpu/gpu_linux.c b/src/detection/gpu/gpu_linux.c index 7b0fb5462..9281b13cb 100644 --- a/src/detection/gpu/gpu_linux.c +++ b/src/detection/gpu/gpu_linux.c @@ -7,29 +7,23 @@ #include "common/properties.h" #include "util/stringUtils.h" -#define FF_STR_INDIR(x) #x -#define FF_STR(x) FF_STR_INDIR(x) - #include -#if __has_include() - #include - #define FF_HAVE_DRM_H 1 -#elif __has_include() - #include - #define FF_HAVE_DRM_H 1 -#endif - -#if FF_HAVE_DRM_H - #include - #include - - #if __aarch64__ && __has_include() - #include +#if __aarch64__ + #if __has_include() + #include + #include + #include + #include #define FF_HAVE_ASAHI_DRM_H 1 + #else + #warning " not available" #endif #endif +#define FF_STR_INDIR(x) #x +#define FF_STR(x) FF_STR_INDIR(x) + static bool pciDetectDriver(FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf* buffer, FF_MAYBE_UNUSED const char* drmKey) { uint32_t pciDirLength = pciDir->length; diff --git a/src/detection/users/users_linux.c b/src/detection/users/users_linux.c index 86e69dbe4..30c38c2af 100644 --- a/src/detection/users/users_linux.c +++ b/src/detection/users/users_linux.c @@ -1,7 +1,7 @@ #include "fastfetch.h" #include "users.h" -#if __has_include() +#if FF_HAVE_UTMPX #include #else //for Android compatibility diff --git a/src/detection/wifi/wifi_linux.c b/src/detection/wifi/wifi_linux.c index 0392fb706..60e510791 100644 --- a/src/detection/wifi/wifi_linux.c +++ b/src/detection/wifi/wifi_linux.c @@ -212,7 +212,7 @@ static const char* detectWifiWithLibnm(FFlist* result) #endif -#if __has_include() +#if FF_HAVE_LINUX_WIRELESS #define FF_DETECT_WIFI_WITH_IOCTLS #include "common/io/io.h"