瀏覽代碼

fix: hopefully fix running from arch's package

Almamu 2 年之前
父節點
當前提交
50d3bced8e
共有 4 個文件被更改,包括 32 次插入 和 9 次删除
  1. 15 6
      CMakeLists.txt
  2. 0 1
      main.cpp
  3. 3 1
      packaging/archlinux/PKGBUILD
  4. 14 1
      src/WallpaperEngine/Application/CWallpaperApplication.cpp

+ 15 - 6
CMakeLists.txt

@@ -1,6 +1,11 @@
 cmake_minimum_required(VERSION 3.12)
 project(linux-wallpaperengine)
 
+# prevent installing to /usr by default so we don't bork anything
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+    set(CMAKE_INSTALL_PREFIX "/opt/${PROJECT_NAME}" CACHE PATH "..." FORCE)
+endif()
+
 set_property(GLOBAL PROPERTY OS_FOLDERS ON)
 set(CMAKE_CXX_STANDARD 17)
 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
@@ -73,17 +78,17 @@ find_package(CEF REQUIRED)
 
 set(
     CMAKE_RUNTIME_OUTPUT_DIRECTORY
-    ${CMAKE_HOME_DIRECTORY}/build
+    ${CMAKE_CURRENT_BINARY_DIR}/build
     )
 	
 set(
     CMAKE_LIBRARY_OUTPUT_DIRECTORY
-    ${CMAKE_HOME_DIRECTORY}/lib
+    ${CMAKE_CURRENT_BINARY_DIR}/lib
     )
 	
 set(
     TARGET_OUTPUT_DIRECTORY
-    ${CMAKE_HOME_DIRECTORY}/build
+    ${CMAKE_CURRENT_BINARY_DIR}/build
     )
 
 add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)
@@ -467,8 +472,12 @@ if(X11_SUPPORT_FOUND)
     endif()
 endif()
 
-file(CREATE_LINK linux-wallpaperengine wallengine SYMBOLIC)
+if(NOT WAYLAND_SUPPORT_FOUND AND NOT X11_SUPPORT_FOUND)
+    message(WARNING "No window server detected at build time. You will only be able to preview backgrounds")
+endif()
 
 # set some install parameters if not in debug mode
-install(TARGETS linux-wallpaperengine)
-install(DIRECTORY share/ DESTINATION share/${PROJECT_NAME})
+install(DIRECTORY ${TARGET_OUTPUT_DIRECTORY}/ DESTINATION .)
+install(FILES ${TARGET_OUTPUT_DIRECTORY}/${PROJECT_NAME} PERMISSIONS OWNER_READ OWNER_WRITE WORLD_EXECUTE WORLD_READ GROUP_READ DESTINATION .)
+install(DIRECTORY share/ DESTINATION ./share)
+

+ 0 - 1
main.cpp

@@ -3,7 +3,6 @@
 
 #include "WallpaperEngine/Application/CApplicationContext.h"
 #include "WallpaperEngine/Application/CWallpaperApplication.h"
-#include "WallpaperEngine/Core/Wallpapers/CWeb.h"
 #include "WallpaperEngine/WebBrowser/CWebBrowserContext.h"
 #include "common.h"
 

+ 3 - 1
packaging/archlinux/PKGBUILD

@@ -27,11 +27,13 @@ pkgver() {
 build() {
     cmake -B build -S "$pkgname" \
         -DCMAKE_BUILD_TYPE='Release' \
-        -DCMAKE_INSTALL_PREFIX='/usr' \
+        -DCMAKE_INSTALL_PREFIX='/opt/linux-wallpaperengine' \
         -Wno-dev
     cmake --build build
 }
 
 package() {
     DESTDIR="$pkgdir" cmake --install build
+    # create forwarding script
+    echo "cd /opt/linux-wallpaperengine; ./linux-wallpaperengine \$*" > /usr/bin/linux-wallpaperengine
 }

+ 14 - 1
src/WallpaperEngine/Application/CWallpaperApplication.cpp

@@ -267,6 +267,16 @@ void CWallpaperApplication::show () {
             "Cannot read environment variable XDG_SESSION_TYPE, window server detection failed. Please ensure proper values are set");
     }
 
+    sLog.debug("Checking for window servers: ");
+
+#ifdef ENABLE_WAYLAND
+        sLog.debug("\twayland");
+#endif // ENABLE_WAYLAND
+
+#ifdef ENABLE_X11
+        sLog.debug("\tx11");
+#endif // ENABLE_X11
+
 #ifdef ENABLE_WAYLAND
     bool isWayland = strncmp ("wayland", XDG_SESSION_TYPE, strlen ("wayland")) == 0;
 #endif // ENABLE_WAYLAND
@@ -299,7 +309,10 @@ void CWallpaperApplication::show () {
                     this->m_context, *reinterpret_cast<Render::Drivers::CGLFWOpenGLDriver*> (m_videoDriver));
             }
 #endif // ENABLE_X11
-            else {
+#ifdef ENABLE_X11
+            else
+#endif // ENABLE_X11
+            {
                 sLog.exception (
                     "Cannot run in background mode, window server could not be detected. XDG_SESSION_TYPE must be wayland or x11");
             }