Quellcode durchsuchen

Compile nextcoud gui as separate library

Compiling nextcoud gui as a separate library. This is needed to more
easily write tests. The whole nextcloud application can now be linked
against the tests.

Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
Felix Weilbach vor 5 Jahren
Ursprung
Commit
73a41d8e34
5 geänderte Dateien mit 79 neuen und 99 gelöschten Zeilen
  1. 53 28
      src/gui/CMakeLists.txt
  2. 9 7
      src/libsync/CMakeLists.txt
  3. 5 59
      test/CMakeLists.txt
  4. 2 2
      test/csync/CMakeLists.txt
  5. 10 3
      test/nextcloud_add_test.cmake

+ 53 - 28
src/gui/CMakeLists.txt

@@ -1,8 +1,5 @@
 project(gui)
 find_package(Qt5 REQUIRED COMPONENTS Widgets Svg Qml Quick QuickControls2)
-set(CMAKE_AUTOMOC TRUE)
-set(CMAKE_AUTOUIC TRUE)
-set(CMAKE_AUTORCC TRUE)
 
 if(CMAKE_BUILD_TYPE MATCHES Debug)
     add_definitions(-DQT_QML_DEBUG)
@@ -262,6 +259,39 @@ if(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
   set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L/usr/local/lib")
 endif()
 
+add_library(nextcloudCore STATIC ${final_src})
+
+target_link_libraries(nextcloudCore
+  PUBLIC
+  Qt5::Widgets
+  Qt5::GuiPrivate
+  Qt5::Svg
+  Qt5::Network
+  Qt5::Xml
+  Qt5::Qml
+  Qt5::Quick
+  Qt5::QuickControls2
+  Qt5::WebEngineWidgets
+  ${synclib_NAME}
+)
+
+set_target_properties(nextcloudCore
+  PROPERTIES
+  AUTOUIC ON
+  AUTORCC ON
+  AUTOMOC ON
+)
+
+target_include_directories(nextcloudCore
+  PUBLIC
+  ${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator
+  ${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
+  ${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
+  ${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget
+  ${CMAKE_CURRENT_BINARY_DIR}
+  ${CMAKE_CURRENT_SOURCE_DIR}
+)
+
 if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
     if(NOT WIN32)
         file(GLOB _icons "${theme_dir}/colored/*-${APPLICATION_ICON_NAME}-icon.png")
@@ -279,15 +309,13 @@ if(NOT BUILD_OWNCLOUD_OSX_BUNDLE)
     endif()
 
     # we may not add MACOSX_BUNDLE here, if not building one
-
-    # add_executable( ${APPLICATION_EXECUTABLE} main.cpp ${final_src})
-    add_executable( ${APPLICATION_EXECUTABLE} WIN32 main.cpp ${final_src})
+    add_executable(${APPLICATION_EXECUTABLE} WIN32 main.cpp)
 else()
     # set(CMAKE_INSTALL_PREFIX ".") # Examples use /Applications. hurmpf.
     set(MACOSX_BUNDLE_ICON_FILE "${APPLICATION_ICON_NAME}.icns")
 
     # we must add MACOSX_BUNDLE only if building a bundle
-    add_executable( ${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp ${final_src})
+    add_executable(${APPLICATION_EXECUTABLE} WIN32 MACOSX_BUNDLE main.cpp)
 
     set (QM_DIR ${OWNCLOUD_OSX_BUNDLE}/Contents/Resources/Translations)
     install(FILES ${client_I18N} DESTINATION ${QM_DIR})
@@ -314,12 +342,14 @@ set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES
         RUNTIME_OUTPUT_DIRECTORY  ${BIN_OUTPUT_DIRECTORY}
 )
 
-target_link_libraries( ${APPLICATION_EXECUTABLE} Qt5::Widgets Qt5::GuiPrivate Qt5::Svg Qt5::Network Qt5::Xml Qt5::Qml Qt5::Quick Qt5::QuickControls2 Qt5::WebEngineWidgets)
-target_link_libraries( ${APPLICATION_EXECUTABLE} ${synclib_NAME} )
+target_link_libraries(${APPLICATION_EXECUTABLE} nextcloudCore)
+
 IF(BUILD_UPDATER)
-    target_link_libraries( ${APPLICATION_EXECUTABLE} updater )
+  target_link_libraries(nextcloudCore PUBLIC updater)
 endif()
-target_link_libraries( ${APPLICATION_EXECUTABLE} ${OS_SPECIFIC_LINK_LIBRARIES} )
+
+target_link_libraries(nextcloudCore PUBLIC ${OS_SPECIFIC_LINK_LIBRARIES})
+
 IF( LIBCLOUDPROVIDERS_FOUND )
     string(TOLOWER "${APPLICATION_VENDOR}" DBUS_VENDOR)
     string(REGEX REPLACE "[^A-z0-9]" "" DBUS_VENDOR "${DBUS_VENDOR}")
@@ -331,42 +361,37 @@ IF( LIBCLOUDPROVIDERS_FOUND )
     set(LIBCLOUDPROVIDERS_DBUS_OBJECT_PATH "/${DBUS_PREFIX}/${DBUS_VENDOR}/${DBUS_APPLICATION_NAME}")
 
     configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cloudproviders/cloudproviderconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/cloudproviderconfig.h)
-    target_link_libraries( ${APPLICATION_EXECUTABLE} ${GLib2_LDFLAGS} ${GIO_LDFLAGS} ${LIBCLOUDPROVIDERS_LIBRARY} )
+    target_link_libraries(nextcloudCore
+      PUBLIC
+      ${GLib2_LDFLAGS}
+      ${GIO_LDFLAGS}
+      ${LIBCLOUDPROVIDERS_LIBRARY}
+    )
 ENDIF()
 
-
-target_include_directories(${APPLICATION_EXECUTABLE} PRIVATE
-    ${CMAKE_SOURCE_DIR}/src/3rdparty/QProgressIndicator
-    ${CMAKE_SOURCE_DIR}/src/3rdparty/qtlockedfile
-    ${CMAKE_SOURCE_DIR}/src/3rdparty/qtsingleapplication
-    ${CMAKE_SOURCE_DIR}/src/3rdparty/kmessagewidget
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${CMAKE_CURRENT_SOURCE_DIR}
-)
-
 ## handle DBUS for Fdo notifications
 if( UNIX AND NOT APPLE )
     find_package(Qt5 COMPONENTS DBus)
-    target_link_libraries( ${APPLICATION_EXECUTABLE} Qt5::DBus)
-    target_compile_definitions(${APPLICATION_EXECUTABLE} PRIVATE "USE_FDO_NOTIFICATIONS")
+    target_link_libraries(nextcloudCore PUBLIC Qt5::DBus)
+    target_compile_definitions(nextcloudCore PUBLIC "USE_FDO_NOTIFICATIONS")
 endif()
 
 if (APPLE)
     find_package(Qt5 COMPONENTS MacExtras)
-    target_link_libraries( ${APPLICATION_EXECUTABLE} Qt5::MacExtras)
+    target_link_libraries(nextcloudCore PUBLIC Qt5::MacExtras)
 endif()
 
 if(WITH_CRASHREPORTER)
-    target_link_libraries(${APPLICATION_EXECUTABLE} crashreporter-handler)
+    target_link_libraries(nextcloudCore PUBLIC crashreporter-handler)
 
     if(UNIX AND NOT MAC)
         find_package(Threads REQUIRED)
-        target_link_libraries( ${APPLICATION_EXECUTABLE} ${CMAKE_THREAD_LIBS_INIT})
+        target_link_libraries(nextcloudCore PUBLIC ${CMAKE_THREAD_LIBS_INIT})
     endif()
 endif()
 
 # application.cpp still uses QDesktopServices::storageLocation
-target_compile_definitions(${APPLICATION_EXECUTABLE} PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0")
+target_compile_definitions(nextcloudCore PRIVATE "QT_DISABLE_DEPRECATED_BEFORE=0")
 
 
 install(TARGETS ${APPLICATION_EXECUTABLE}

+ 9 - 7
src/libsync/CMakeLists.txt

@@ -120,17 +120,19 @@ ENDIF(NOT APPLE)
 find_package(Qt5 REQUIRED COMPONENTS WebSockets)
 add_library(${synclib_NAME} SHARED ${libsync_SRCS})
 target_link_libraries(${synclib_NAME}
-    "${csync_NAME}"
-    OpenSSL::Crypto
-    OpenSSL::SSL
-    ${OS_SPECIFIC_LINK_LIBRARIES}
-    Qt5::Core Qt5::Network
-    Qt5::WebSockets
+  PUBLIC
+  "${csync_NAME}"
+  OpenSSL::Crypto
+  OpenSSL::SSL
+  ${OS_SPECIFIC_LINK_LIBRARIES}
+  Qt5::Core
+  Qt5::Network
+  Qt5::WebSockets
 )
 
 if (NOT TOKEN_AUTH_ONLY)
     find_package(Qt5 REQUIRED COMPONENTS Widgets Svg)
-    target_link_libraries(${synclib_NAME} Qt5::Widgets Qt5::Svg qt5keychain)
+    target_link_libraries(${synclib_NAME} PUBLIC Qt5::Widgets Qt5::Svg qt5keychain)
 endif()
 
 if(INOTIFY_FOUND)

+ 5 - 59
test/CMakeLists.txt

@@ -1,23 +1,13 @@
 include(DefinePlatformDefaults)
 find_package(SQLite3 3.8.0 REQUIRED)
-include_directories(${CMAKE_SOURCE_DIR}/src
-                    ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer
-                    ${CMAKE_SOURCE_DIR}/src/csync
-                    ${CMAKE_SOURCE_DIR}/src/csync/std
-                    ${CMAKE_SOURCE_DIR}/src/gui
-                    ${CMAKE_SOURCE_DIR}/src/libsync
-                    ${CMAKE_BINARY_DIR}/src/csync
-                    ${CMAKE_BINARY_DIR}/src/libsync
-                    ${CMAKE_CURRENT_SOURCE_DIR}
-                    ${CMAKE_CURRENT_BINARY_DIR}
-                    ${SQLITE3_INCLUDE_DIR}
-                   )
 
 include(nextcloud_add_test.cmake)
 
 set(CMAKE_AUTOMOC TRUE)
+
 add_library(syncenginetestutils STATIC syncenginetestutils.cpp)
 target_link_libraries(syncenginetestutils PUBLIC ${APPLICATION_EXECUTABLE}sync Qt5::Test)
+target_include_directories(syncenginetestutils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
 
 nextcloud_add_test(NextcloudPropagator "")
 
@@ -25,18 +15,6 @@ IF(BUILD_UPDATER)
     nextcloud_add_test(Updater "")
 endif()
 
-SET(FolderWatcher_SRC ../src/gui/folderwatcher.cpp)
-
-IF( NOT WIN32 AND NOT APPLE )
-list(APPEND FolderWatcher_SRC  ../src/gui/folderwatcher_linux.cpp)
-ENDIF()
-IF( WIN32 )
-list(APPEND  FolderWatcher_SRC ../src/gui/folderwatcher_win.cpp)
-ENDIF()
-IF( APPLE )
-list(APPEND FolderWatcher_SRC ../src/gui/folderwatcher_mac.cpp)
-list(APPEND FolderWatcher_SRC ../src/gui/socketapisocket_mac.mm)
-ENDIF()
 nextcloud_add_test(NetrcParser ../src/cmd/netrcparser.cpp)
 nextcloud_add_test(OwnSql "")
 nextcloud_add_test(SyncJournalDB "")
@@ -68,7 +46,7 @@ nextcloud_add_test(Permissions "")
 nextcloud_add_test(SelectiveSync "")
 nextcloud_add_test(DatabaseError "")
 nextcloud_add_test(LockedFiles "../src/gui/lockwatcher.cpp")
-nextcloud_add_test(FolderWatcher "${FolderWatcher_SRC}")
+nextcloud_add_test(FolderWatcher "")
 nextcloud_add_test(Capabilities "")
 nextcloud_add_test(PushNotifications "pushnotificationstestutils.cpp")
 
@@ -85,40 +63,8 @@ endif()
 
 nextcloud_add_benchmark(LargeSync "")
 
-SET(FolderMan_SRC ../src/gui/folderman.cpp)
-list(APPEND FolderMan_SRC ../src/gui/folder.cpp )
-list(APPEND FolderMan_SRC ../src/gui/conflictsolver.cpp )
-list(APPEND FolderMan_SRC ../src/gui/socketapi.cpp )
-list(APPEND FolderMan_SRC ../src/gui/syncrunfilelog.cpp )
-list(APPEND FolderMan_SRC ../src/gui/lockwatcher.cpp )
-list(APPEND FolderMan_SRC ../src/gui/guiutility.cpp )
-list(APPEND FolderMan_SRC ../src/gui/navigationpanehelper.cpp )
-list(APPEND FolderMan_SRC ../src/gui/userinfo.cpp )
-list(APPEND FolderMan_SRC ../src/gui/connectionvalidator.cpp )
-list(APPEND FolderMan_SRC ../src/gui/ocsjob.cpp )
-list(APPEND FolderMan_SRC ../src/gui/ocsnavigationappsjob.cpp )
-list(APPEND FolderMan_SRC ../src/gui/accountstate.cpp )
-list(APPEND FolderMan_SRC ../src/gui/remotewipe.cpp )
-list(APPEND FolderMan_SRC ${FolderWatcher_SRC})
-list(APPEND FolderMan_SRC stubfolderman.cpp )
-nextcloud_add_test(FolderMan "${FolderMan_SRC}")
-
-SET(RemoteWipe_SRC ../src/gui/remotewipe.cpp)
-list(APPEND RemoteWipe_SRC ../src/gui/guiutility.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/userinfo.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/connectionvalidator.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/ocsjob.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/ocsnavigationappsjob.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/accountstate.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/conflictsolver.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/socketapi.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/folder.cpp )
-list(APPEND RemoteWipe_SRC ../src/gui/syncrunfilelog.cpp )
-list(APPEND RemoteWipe_SRC ${FolderWatcher_SRC} )
-list(APPEND RemoteWipe_SRC ../src/gui/folderwatcher.cpp )
-list(APPEND RemoteWipe_SRC ${RemoteWipe_SRC})
-list(APPEND RemoteWipe_SRC stubremotewipe.cpp )
-nextcloud_add_test(RemoteWipe "${RemoteWipe_SRC}")
+nextcloud_add_test(FolderMan "")
+nextcloud_add_test(RemoteWipe "")
 
 nextcloud_add_test(OAuth "../src/gui/creds/oauth.cpp")
 

+ 2 - 2
test/csync/CMakeLists.txt

@@ -6,9 +6,10 @@ include_directories(
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${CMAKE_BINARY_DIR}
   ${CMOCKA_INCLUDE_DIR}
+  ${CHECK_INCLUDE_DIRS}
+  ${CMAKE_BINARY_DIR}/src/csync
 )
 
-include_directories(${CHECK_INCLUDE_DIRS})
 # create test library
 add_library(${TORTURE_LIBRARY} STATIC torture.c cmdline.c)
 target_link_libraries(${TORTURE_LIBRARY} ${CMOCKA_LIBRARIES})
@@ -23,4 +24,3 @@ add_cmocka_test(check_std_c_jhash std_tests/check_std_c_jhash.c ${TEST_TARGET_LI
 
 # vio
 add_cmocka_test(check_vio_ext vio_tests/check_vio_ext.cpp ${TEST_TARGET_LIBRARIES})
-

+ 10 - 3
test/nextcloud_add_test.cmake

@@ -9,8 +9,11 @@ macro(nextcloud_add_test test_class additional_cpp)
     set_target_properties(${OWNCLOUD_TEST_CLASS}Test PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BIN_OUTPUT_DIRECTORY})
 
     target_link_libraries(${OWNCLOUD_TEST_CLASS}Test
-        ${APPLICATION_EXECUTABLE}sync syncenginetestutils
-        Qt5::Core Qt5::Test Qt5::Xml Qt5::Network Qt5::Qml Qt5::Quick
+      ${APPLICATION_EXECUTABLE}sync
+      syncenginetestutils
+      nextcloudCore
+      Qt5::Test
+      Qt5::Quick
     )
 
     IF(BUILD_UPDATER)
@@ -25,7 +28,11 @@ macro(nextcloud_add_test test_class additional_cpp)
         COMMAND ${OWNCLOUD_TEST_CLASS}Test
         WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
 
-    target_include_directories(${OWNCLOUD_TEST_CLASS}Test PRIVATE "${CMAKE_SOURCE_DIR}/test/")
+      target_include_directories(${OWNCLOUD_TEST_CLASS}Test
+        PRIVATE
+        "${CMAKE_SOURCE_DIR}/test/"
+        ${CMAKE_SOURCE_DIR}/src/3rdparty/qtokenizer
+        )
 endmacro()
 
 macro(nextcloud_add_benchmark test_class additional_cpp)