Mercurial > minori
comparison dep/animia/CMakeLists.txt @ 202:71832ffe425a
animia: re-add kvm fd source
this is all being merged from my wildly out-of-date laptop. SORRY!
in other news, I edited the CI file to install the wayland client
as well, so the linux CI build might finally get wayland stuff.
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Tue, 02 Jan 2024 06:05:06 -0500 |
| parents | 8f6f8dd2eb23 9f3534f6b8c4 |
| children | 8a482049b968 |
comparison
equal
deleted
inserted
replaced
| 201:8f6f8dd2eb23 | 202:71832ffe425a |
|---|---|
| 26 | 26 |
| 27 include(CheckIncludeFile) | 27 include(CheckIncludeFile) |
| 28 check_include_file("CoreFoundation/CoreFoundation.h" HAVE_COREFOUNDATION) | 28 check_include_file("CoreFoundation/CoreFoundation.h" HAVE_COREFOUNDATION) |
| 29 # If you're building on OS X, you most likely do have this file, but we | 29 # If you're building on OS X, you most likely do have this file, but we |
| 30 # check anyway. | 30 # check anyway. |
| 31 if (HAVE_COREFOUNDATION) | 31 if(HAVE_COREFOUNDATION) |
| 32 list(APPEND DEFINES HAVE_COREFOUNDATION) | 32 list(APPEND DEFINES HAVE_COREFOUNDATION) |
| 33 endif() | 33 find_library(OBJC_LIBRARY objc) |
| 34 | 34 |
| 35 check_language(OBJCXX) | 35 if(NOT OBJC_LIBRARY) |
| 36 if(CMAKE_OBJCXX_COMPILER) | 36 message(STATUS "Found CoreFoundation/CoreFoundation.h, but not the Objective-C runtime. How?") |
| 37 enable_language(OBJCXX) | 37 endif() |
| 38 list(APPEND SRC_FILES | 38 |
| 39 src/win/quartz.mm | 39 list(APPEND SRC_FILES src/win/quartz.cc) |
| 40 ) | 40 |
| 41 find_library(FOUNDATION_LIBRARY Foundation) | 41 find_library(FOUNDATION_LIBRARY Foundation) |
| 42 find_library(COREGRAPHICS_LIBRARY CoreGraphics) | 42 find_library(COREGRAPHICS_LIBRARY CoreGraphics) |
| 43 find_library(APPKIT_LIBRARY AppKit) | 43 find_library(APPKIT_LIBRARY AppKit) |
| 44 list(APPEND LIBRARIES ${FOUNDATION_LIBRARY} ${COREGRAPHICS_LIBRARY} ${APPKIT_LIBRARY}) | 44 list(APPEND LIBRARIES ${FOUNDATION_LIBRARY} ${COREGRAPHICS_LIBRARY} ${APPKIT_LIBRARY} ${OBJC_LIBRARY}) |
| 45 else() # NOT CMAKE_OBJCXX_COMPILER | 45 else() # NOT HAVE_COREFOUNDATION |
| 46 message(WARNING "An Objective-C++ compiler couldn't be found! Window enumeration support will not be compiled.") | 46 message(STATUS "You don't have Core Foundation. How? What kind of voodoo magic did you do to cause this?") |
| 47 endif() # CMAKE_OBJCXX_COMPILER | 47 message(WARNING "LaunchServices support will not be compiled.") |
| 48 endif() # HAVE_COREFOUNDATION | |
| 48 elseif(WIN32) | 49 elseif(WIN32) |
| 49 list(APPEND DEFINES WIN32) | 50 list(APPEND DEFINES WIN32) |
| 50 list(APPEND SRC_FILES | 51 list(APPEND SRC_FILES |
| 51 # win32 | 52 # win32 |
| 52 src/fd/win32.cc | 53 src/fd/win32.cc |
| 57 find_library(LIBUTIL_LIBRARY util) | 58 find_library(LIBUTIL_LIBRARY util) |
| 58 find_library(LIBKVM_LIBRARY kvm) | 59 find_library(LIBKVM_LIBRARY kvm) |
| 59 | 60 |
| 60 if(LINUX) | 61 if(LINUX) |
| 61 list(APPEND DEFINES LINUX) | 62 list(APPEND DEFINES LINUX) |
| 62 list(APPEND SRC_FILES | 63 list(APPEND SRC_FILES src/fd/proc.cc) |
| 63 src/fd/proc.cc | |
| 64 ) | |
| 65 elseif(LIBUTIL_LIBRARY) # FreeBSD's libutil | 64 elseif(LIBUTIL_LIBRARY) # FreeBSD's libutil |
| 66 get_filename_component(LIBUTIL_DIR ${LIBUTIL_LIBRARY} DIRECTORY) | 65 get_filename_component(LIBUTIL_DIR ${LIBUTIL_LIBRARY} DIRECTORY) |
| 67 | 66 |
| 68 include(CheckLibraryExists) | 67 include(CheckLibraryExists) |
| 69 check_library_exists(util kinfo_getfile ${LIBUTIL_DIR} LIBUTIL_GOOD) | 68 check_library_exists(util kinfo_getfile ${LIBUTIL_DIR} LIBUTIL_GOOD) |
| 72 list(APPEND LIBRARIES ${LIBUTIL_LIBRARY}) | 71 list(APPEND LIBRARIES ${LIBUTIL_LIBRARY}) |
| 73 list(APPEND DEFINES LIBUTIL) | 72 list(APPEND DEFINES LIBUTIL) |
| 74 list(APPEND SRC_FILES src/fd/libutil.cc) | 73 list(APPEND SRC_FILES src/fd/libutil.cc) |
| 75 endif() # LIBUTIL_GOOD | 74 endif() # LIBUTIL_GOOD |
| 76 elseif(LIBKVM_LIBRARY) # OpenBSD kvm | 75 elseif(LIBKVM_LIBRARY) # OpenBSD kvm |
| 77 include(CheckSymbolExists) | 76 list(APPEND LIBRARIES ${LIBKVM_LIBRARY}) |
| 78 # Check if we can get open files by PID | 77 list(APPEND DEFINES LIBKVM) |
| 79 check_symbol_exists(KERN_FILE_BYPID "kvm.h" HAVE_BYPID) | 78 list(APPEND SRC_FILES src/fd/kvm.cc) |
| 80 | 79 |
| 81 if(HAVE_BYPID) | 80 get_filename_component(LIBKVM_DIR ${LIBKVM_LIBRARY} DIRECTORY) |
| 82 list(APPEND LIBRARIES ${LIBKVM_LIBRARY}) | 81 |
| 83 list(APPEND DEFINES LIBKVM) | 82 include(CheckLibraryExists) |
| 84 list(APPEND SRC_FILES src/fd/kvm.cc) | 83 check_library_exists(kvm kvm_getfiles ${LIBKVM_DIR} LIBKVM_HAS_GETFILES) |
| 85 endif() # LIBUTIL_GOOD | 84 |
| 85 if(LIBKVM_HAS_GETFILES) | |
| 86 list(APPEND DEFINES HAVE_KVM_GETFILES) | |
| 87 endif() # LIBKVM_HAS_GETFILES | |
| 86 endif() # LINUX | 88 endif() # LINUX |
| 87 | 89 |
| 88 # X11 | 90 # X11 |
| 89 find_package(X11 COMPONENTS X11) | 91 find_package(X11 COMPONENTS X11 XRes) |
| 92 | |
| 90 if(X11_FOUND) | 93 if(X11_FOUND) |
| 94 # Getting PIDs from windows... | |
| 95 if (X11_XRes_FOUND) | |
| 96 list(APPEND DEFINES HAVE_XRES) | |
| 97 else() # NOT X11_XRes_FOUND | |
| 98 message(WARNING "libXRes could not be found! Finding PIDs in X11 windows may not work correctly!") | |
| 99 endif() # X11_XRes_FOUND | |
| 100 | |
| 91 list(APPEND DEFINES X11) | 101 list(APPEND DEFINES X11) |
| 92 list(APPEND SRC_FILES | 102 list(APPEND SRC_FILES src/win/x11.cc) |
| 93 src/win/x11.cc | 103 list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS}) |
| 94 ) | 104 list(APPEND LIBRARIES ${X11_LIBRARIES}) # This will include Xres, I think.. |
| 95 list(APPEND INCLUDE_DIRS | |
| 96 ${X11_INCLUDE_DIRS} | |
| 97 ) | |
| 98 list(APPEND LIBRARIES | |
| 99 ${X11_LIBRARIES} | |
| 100 ) | |
| 101 else() # NOT X11_FOUND | 105 else() # NOT X11_FOUND |
| 102 # For some systems, i.e. Debian, FindX11 fails to find X11, so we have | 106 # For some systems, i.e. Debian, FindX11 fails to find X11, so we have |
| 103 # to use pkg_config as a fallback | 107 # to use pkg_config as a fallback |
| 104 find_package(PkgConfig) | 108 find_package(PkgConfig) |
| 105 if(PKG_CONFIG_FOUND) | 109 if(PKG_CONFIG_FOUND) |
| 106 pkg_check_modules(X11 x11) | 110 pkg_check_modules(X11 x11) |
| 107 if(X11_FOUND) | 111 if(X11_FOUND) |
| 112 # Check for XRes the hard way | |
| 113 find_path(X11_XRes_HEADER "X11/extensions/XRes.h" PATHS ${X11_INCLUDE_DIRS}) | |
| 114 find_library(X11_XRes_LIB XRes PATHS ${X11_LIBRARY_DIRS}) | |
| 115 | |
| 116 if(X11_XRes_HEADER AND X11_XRes_LIB) | |
| 117 # TODO: We should REALLY check for XResQueryClientIds here... | |
| 118 list(APPEND DEFINES HAVE_XRES) | |
| 119 list(APPEND LIBRARIES ${X11_XRes_LIB}) | |
| 120 else() | |
| 121 message(WARNING "libXRes could not be found! Finding PIDs in X11 windows may not work correctly!") | |
| 122 endif() | |
| 123 | |
| 108 list(APPEND DEFINES X11) | 124 list(APPEND DEFINES X11) |
| 109 list(APPEND SRC_FILES | 125 list(APPEND SRC_FILES src/win/x11.cc) |
| 110 src/win/x11.cc | 126 list(APPEND INCLUDE_DIRS ${X11_INCLUDE_DIRS}) |
| 111 ) | 127 list(APPEND LIBRARIES ${X11_LINK_LIBRARIES}) |
| 112 list(APPEND INCLUDE_DIRS | |
| 113 ${X11_INCLUDE_DIRS} | |
| 114 ) | |
| 115 list(APPEND LIBRARIES | |
| 116 ${X11_LINK_LIBRARIES} | |
| 117 ) | |
| 118 endif() # X11_FOUND | 128 endif() # X11_FOUND |
| 119 endif() # PKG_CONFIG_FOUND | 129 endif() # PKG_CONFIG_FOUND |
| 120 endif() # X11_FOUND | 130 endif() # X11_FOUND |
| 131 | |
| 132 find_package(PkgConfig) | |
| 133 if(PKG_CONFIG_FOUND) | |
| 134 pkg_check_modules(WAYLAND wayland-client) | |
| 135 if(WAYLAND_FOUND) | |
| 136 enable_language(C) | |
| 137 list(APPEND DEFINES WAYLAND) | |
| 138 list(APPEND SRC_FILES | |
| 139 src/win/wayland.cc | |
| 140 src/win/wayland/ext-foreign-toplevel-list-v1.c | |
| 141 ) | |
| 142 list(APPEND INCLUDE_DIRS ${WAYLAND_INCLUDE_DIRS}) | |
| 143 list(APPEND LIBRARIES ${WAYLAND_LINK_LIBRARIES}) | |
| 144 endif() # WAYLAND_FOUND | |
| 145 endif() # PKG_CONFIG_FOUND | |
| 121 endif() # WIN32 AND APPLE | 146 endif() # WIN32 AND APPLE |
| 122 | 147 |
| 123 add_library(animia SHARED ${SRC_FILES}) | 148 add_library(animia SHARED ${SRC_FILES}) |
| 124 set_target_properties(animia PROPERTIES | 149 set_target_properties(animia PROPERTIES |
| 125 PUBLIC_HEADER include/animia.h | 150 PUBLIC_HEADER include/animia.h |
| 126 CXX_STANDARD 17 | 151 CXX_STANDARD 17 |
| 127 ) | 152 ) |
| 128 | 153 |
| 129 target_compile_definitions(animia PUBLIC ${DEFINES}) | 154 target_compile_definitions(animia PRIVATE ${DEFINES}) |
| 130 target_include_directories(animia PUBLIC include PRIVATE ${INCLUDE_DIRS}) | 155 target_include_directories(animia PUBLIC include PRIVATE ${INCLUDE_DIRS}) |
| 131 target_link_libraries(animia PUBLIC ${LIBRARIES}) | 156 target_link_libraries(animia PUBLIC ${LIBRARIES}) |
