瀏覽代碼

FIX: QtMobility: Fixed problems on Windows related to QtMobility

- Patching files on Windows regularly failed, so I changed the
  build system inside the tar ball. No patching needed anymore
  (on Windows).
- The installation script for QtMobility on Windows is buggy,
  so we install headers and lib files by a custom cmake script.
- The library names must be the same on all platforms in order
  to be found by QtMobilty. Hence adding a "lib" postfix by default.
- Deleted obsolete patch files for QtMobility Beta
Sascha Zelzer 15 年之前
父節點
當前提交
83fa42cde8

+ 8 - 2
Applications/ctkPluginBrowser/ctkPluginBrowser.cpp

@@ -44,7 +44,11 @@ ctkPluginBrowser::ctkPluginBrowser(ctkPluginFramework* framework)
   framework->getPluginContext()->connectFrameworkListener(this, SLOT(frameworkEvent(ctkPluginFrameworkEvent)));
 
   QStringList pluginDirs;
-  pluginDirs << qApp->applicationDirPath() + "/Plugins";
+#ifdef CMAKE_INTDIR
+  pluginDirs << qApp->applicationDirPath() + "/../plugins/" CMAKE_INTDIR "/";
+#else
+  pluginDirs << qApp->applicationDirPath() + "/plugins/";
+#endif
 
   QStringListIterator dirIt(pluginDirs);
   while (dirIt.hasNext())
@@ -52,7 +56,9 @@ ctkPluginBrowser::ctkPluginBrowser(ctkPluginFramework* framework)
     QApplication::addLibraryPath(dirIt.next());
   }
 
-  QDirIterator dirIter(pluginDirs.at(0), QDir::Files);
+  QStringList libFilter;
+  libFilter << "*.dll" << "*.so" << "*.dylib";
+  QDirIterator dirIter(pluginDirs.at(0), libFilter, QDir::Files);
   while(dirIter.hasNext())
   {
     try

+ 2 - 1
CMake/ctkMacroBuildPlugin.cmake

@@ -183,7 +183,8 @@ MACRO(ctkMacroBuildPlugin)
   # Apply properties to the library target.
   SET_TARGET_PROPERTIES(${lib_name} PROPERTIES
     COMPILE_FLAGS "-DQT_PLUGIN"
-    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/plugins"
+	RUNTIME_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/plugins"
+	PREFIX "lib"
     )
 
   # Note: The plugin may be installed in some other location ???

+ 17 - 5
CMakeExternals/QtMobility.cmake

@@ -22,9 +22,9 @@ IF(${add_project})
   SET(qtmobility_patch_dir ${CTK_SOURCE_DIR}/Utilities/QtMobility/)
   SET(qtmobility_configured_patch_dir ${CTK_BINARY_DIR}/Utilities/QtMobility/)
   SET(qtmobility_patchscript
-    ${CTK_BINARY_DIR}/Utilities/QtMobility/QtMobility-1.0.0-patch.cmake)
+    ${qtmobility_configured_patch_dir}/QtMobility-1.0.0-patch.cmake)
   CONFIGURE_FILE(
-    ${CTK_SOURCE_DIR}/Utilities/QtMobility/QtMobility-1.0.0-patch.cmake.in
+    ${qtmobility_patch_dir}/QtMobility-1.0.0-patch.cmake.in
     ${qtmobility_patchscript} @ONLY)
 
   # Define configure options
@@ -39,18 +39,30 @@ IF(${add_project})
   ENDIf()
   
   SET(qtmobility_make_cmd)
+  SET(qtmobility_install_cmd)
   IF(UNIX OR MINGW)
     SET(qtmobility_make_cmd make)
+	SET(qtmobility_config_args "-${qtmobility_build_type} -libdir ${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY} -no-docs -modules ${qtmobility_modules}")
+	SET(qtmobility_install_cmd ${qtmobility_make_cmd} install)
   ELSEIF(WIN32)
     SET(qtmobility_make_cmd nmake)
+	SET(qtmobility_win32_install_prefix ${ep_source_dir}/${proj}/install/)
+	FILE(TO_NATIVE_PATH ${qtmobility_win32_install_prefix} qtmobility_win32_native_install_prefix)
+	SET(qtmobility_config_args -${qtmobility_build_type} -qt ${QT_BINARY_DIR} -prefix ${qtmobility_win32_native_install_prefix} -no-docs -modules ${qtmobility_modules})
+	
+	CONFIGURE_FILE(${qtmobility_patch_dir}/QtMobility-1.0.0-install-win32.cmake.in
+	               ${qtmobility_configured_patch_dir}/QtMobility-1.0.0-install-win32.cmake @ONLY)
+				   
+    SET(qtmobility_install_cmd ${CMAKE_COMMAND} -D INTERMEDIATE_DIRECTORY:STRING=$(IntDir) -P ${qtmobility_configured_patch_dir}/QtMobility-1.0.0-install-win32.cmake)
   ENDIF()
-
+  
   ExternalProject_Add(${proj}
     URL ${CTK_SOURCE_DIR}/Utilities/QtMobility/qt-mobility-servicefw-opensource-src-1.0.0.tar.gz
     PATCH_COMMAND ${CMAKE_COMMAND} -P ${qtmobility_patchscript}
-    CONFIGURE_COMMAND <SOURCE_DIR>/configure -${qtmobility_build_type} -libdir ${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY} -no-docs -modules ${qtmobility_modules}
+    CONFIGURE_COMMAND <SOURCE_DIR>/configure ${qtmobility_config_args}
     BUILD_COMMAND ${qtmobility_make_cmd}
-    INSTALL_COMMAND ${qtmobility_make_cmd} install
+    INSTALL_COMMAND ${qtmobility_install_cmd}
     BUILD_IN_SOURCE 1
     )
+	
 ENDIF()

+ 8 - 5
Libs/PluginFramework/CMakeLists.txt

@@ -4,13 +4,16 @@ PROJECT(CTKPluginFramework)
 # 3rd party dependencies
 #
 
-
-# use the QtMobility SuperBuild paths for now
-# we should add a FindQtMobility later
-SET(QTMOBILITY_INCLUDE_DIRS 
+SET(_qtmob_config "${CTK_BINARY_DIR}/../Utilities/QtMobility/QtMobilityConfig.cmake")
+IF(EXISTS ${_qtmob_config})
+  INCLUDE(${_qtmob_config})
+ELSE()
+  SET(QTMOBILITY_LIBRARY_DIR "${CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+  SET(QTMOBILITY_INCLUDE_DIRS 
   "${CTK_BINARY_DIR}/../CMakeExternals/Source/QtMobility/install/include"
   )
-SET(QTMOBILITY_LIBRARY_DIR "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
+ENDIF()
+
 FIND_LIBRARY(QTMOBILITY_QTSERVICEFW_LIBRARY_DEBUG QtServiceFrameworkd
              PATHS ${QTMOBILITY_LIBRARY_DIR}
              )

+ 2 - 0
Libs/PluginFramework/ctkPluginDatabase.cpp

@@ -545,6 +545,7 @@ QString ctkPluginDatabase::getDatabasePath() const
       path = m_databasePath;
     }
 
+	qDebug() << "Using database:" << path;
     return path;
 }
 
@@ -679,6 +680,7 @@ bool ctkPluginDatabase::dropTables()
       }
     }
   }
+  return true;
 }
 
 

+ 25 - 0
Utilities/QtMobility/QtMobility-1.0.0-install-win32.cmake.in

@@ -0,0 +1,25 @@
+EXECUTE_PROCESS(COMMAND @qtmobility_make_cmd@ install
+                OUTPUT_VARIABLE _output)
+
+IF(_output)
+  MESSAGE(${_output})
+ENDIF()
+
+GET_FILENAME_COMPONENT(_int_dir ${INTERMEDIATE_DIRECTORY} NAME)
+
+FILE(GLOB _files "@qtmobility_win32_install_prefix@/lib/*")
+FOREACH(_file ${_files})
+  CONFIGURE_FILE(${_file} "@CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY@/${_int_dir}/" COPYONLY)
+  MESSAGE("Copying ${_file} to @CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY@/${_int_dir}/")
+ENDFOREACH()
+
+FILE(GLOB _files "@qtmobility_patch_dir@/include/*")
+FOREACH(_file ${_files})
+  CONFIGURE_FILE(${_file} "@qtmobility_win32_install_prefix@/include/" COPYONLY)
+  MESSAGE("Copying ${_file} to @qtmobility_win32_install_prefix@/include/")
+ENDFOREACH()
+
+SET(_qtmob_config "SET(QTMOBILITY_LIBRARY_DIR \"@CTK_CMAKE_LIBRARY_OUTPUT_DIRECTORY@/${_int_dir}/\")
+SET(QTMOBILITY_INCLUDE_DIRS \"@qtmobility_win32_install_prefix@/include/\")")
+
+FILE(WRITE "@qtmobility_configured_patch_dir@/QtMobilityConfig.cmake" ${_qtmob_config})

+ 4 - 13
Utilities/QtMobility/QtMobility-1.0.0-patch.cmake.in

@@ -13,20 +13,9 @@ SET(configured_patch_dir @qtmobility_configured_patch_dir@)
 # Variable required to properly configured the patch files
 SET(QT_BINARY_DIR @QT_BINARY_DIR@)
 
-CONFIGURE_FILE(${patch_dir}/QtMobility-1.0.0.patch.in
-  ${configured_patch_dir}/QtMobility-1.0.0.patch @ONLY)
-
 SET(patch_files
-  ${configured_patch_dir}/QtMobility-1.0.0.patch
-)
 
-IF(WIN32)
-  CONFIGURE_FILE(${patch_dir}/QtMobility-1.0.0-win32.patch.in
-    ${configured_patch_dir}/QtMobility-1.0.0-win32.patch @ONLY)
-  LIST(APPEND patch_files
-    ${configured_patch_dir}/QtMobility-1.0.0-win32.patch
-    )
-ENDIF()
+)
 
 IF(UNIX)
   IF(APPLE)
@@ -35,7 +24,9 @@ IF(UNIX)
 ENDIF()
 
 # Apply patches
-ctkFunctionApplyPatches("@CTK_PATCH_EXECUTABLE@" "@qtmobility_src_dir@" "${patch_files}")
+IF(patch_files)
+  ctkFunctionApplyPatches("@CTK_PATCH_EXECUTABLE@" "@qtmobility_src_dir@" "${patch_files}")
+ENDIF()
 
 IF(UNIX)
 

+ 0 - 37
Utilities/QtMobility/QtMobility-1.0.0-win32.patch.in

@@ -1,37 +0,0 @@
---- configure_orig.bat	Sun Apr 11 18:17:43 2010
-+++ @CMAKE_CURRENT_BINARY_DIR@/configure.bat	Sun Apr 11 21:19:33 2010
-@@ -60,7 +60,7 @@
- set MOBILITY_MODULES=bearer location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors
- set MOBILITY_MODULES_UNPARSED=
- set VC_TEMPLATE_OPTION=
--set QT_PATH=
-+set QT_PATH=@QT_BINARY_DIR@\
- set QMAKE_CACHE=%BUILD_PATH%\.qmake.cache
- 
- if exist "%QMAKE_CACHE%" del %QMAKE_CACHE%
-@@ -463,12 +463,19 @@
- echo.
- echo Start of compile tests
- REM compile tests go here.
--call :compileTest LBT lbt
--call :compileTest SNAP snap
--call :compileTest OCC occ
--call :compileTest SymbianContactSIM symbiancntsim
--call :compileTest S60_Sensor_API sensors_s60_31
--call :compileTest Symbian_Sensor_Framework sensors_symbian
-+REM for CTK the compile tests generate errors in Visual Studio -> just disabling them
-+REM call :compileTest LBT lbt
-+echo lbt_enabled = no >> %PROJECT_CONFIG%
-+REM call :compileTest SNAP snap
-+echo snap_enabled = no >> %PROJECT_CONFIG%
-+REM call :compileTest OCC occ
-+echo occ_enabled = no >> %PROJECT_CONFIG%
-+REM call :compileTest SymbianContactSIM symbiancntsim
-+echo symbiancntsim_enabled = no >> %PROJECT_CONFIG%
-+REM call :compileTest S60_Sensor_API sensors_s60_31
-+echo sensors_s60_31_enabled = no >> %PROJECT_CONFIG%
-+REM call :compileTest Symbian_Sensor_Framework sensors_symbian
-+echo sensors_symbian_enabled = no >> %PROJECT_CONFIG%
- echo End of compile tests
- echo.
- echo.

+ 0 - 10
Utilities/QtMobility/QtMobility-1.0.0.patch.in

@@ -1,10 +0,0 @@
---- qtmobility.pro	2010-04-21 16:17:35.000000000 +0200
-+++ @CMAKE_CURRENT_BINARY_DIR@/qtmobility.pro	2010-05-04 00:42:06.776482243 +0200
-@@ -100,7 +100,6 @@
-     SUBDIRS += tools
- }
- 
--SUBDIRS += plugins
- 
- #built documentation snippets, if enabled
- contains(build_docs, yes) {

+ 0 - 40
Utilities/QtMobility/QtMobilityBeta1-apple.patch

@@ -1,40 +0,0 @@
-*** ../qt-mobility-src-1.0.0-beta1/configure	2010-02-12 03:54:12.000000000 -0500
---- configure	2010-03-24 18:51:06.000000000 -0400
-***************
-*** 364,372 ****
-  }
-  
-  #compile tests
-! compileTest QMF qmf
-! compileTest NetworkManager networkmanager
-! compileTest "CoreWLAN (MacOS 10.6)" corewlan
-  
-  # Now module selection
-  # using 'expr match ....' should help a bit
---- 364,372 ----
-  }
-  
-  #compile tests
-! #compileTest QMF qmf
-! #compileTest NetworkManager networkmanager
-! #compileTest "CoreWLAN (MacOS 10.6)" corewlan
-  
-  # Now module selection
-  # using 'expr match ....' should help a bit
-***************
-*** 436,442 ****
-  mkdir -p "$shadowpath/features"
-  
-  echo "Running qmake..."
-! if qmake -recursive "$relpath/qtmobility.pro"; then
-      echo ""
-      echo "configure has finished. You may run make or gmake to build the project now."
-  else
---- 436,442 ----
-  mkdir -p "$shadowpath/features"
-  
-  echo "Running qmake..."
-! if qmake -spec macx-g++ -recursive "$relpath/qtmobility.pro"; then
-      echo ""
-      echo "configure has finished. You may run make or gmake to build the project now."
-  else

+ 0 - 32
Utilities/QtMobility/QtMobilityBeta1-patch.cmake.in

@@ -1,32 +0,0 @@
-INCLUDE(@CTK_SOURCE_DIR@/CMake/ctkFunctionLFtoCRLF.cmake)
-INCLUDE(@CTK_SOURCE_DIR@/CMake/ctkFunctionApplyPatches.cmake)
-
-SET(patch_dir @qtmobility_patch_dir@)
-SET(configured_patch_dir @qtmobility_configured_patch_dir@)
-
-# Variable required to properly configured the patch files
-SET(QT_BINARY_DIR @QT_BINARY_DIR@)
-
-SET(patch_files
-)
-
-IF(WIN32)
-  CONFIGURE_FILE(${patch_dir}/QtMobilityBeta1-win32.patch.in
-    ${configured_patch_dir}/QtMobilityBeta1-win32.patch @ONLY)
-  LIST(APPEND patch_files
-    ${configured_patch_dir}/QtMobilityBeta1-win32.patch
-    )
-ENDIF()
-
-IF(UNIX)
-  CONFIGURE_FILE(${patch_dir}/QtMobilityBeta1-unix.patch.in
-    ${configured_patch_dir}/QtMobilityBeta1-unix.patch @ONLY)
-  LIST(APPEND patch_files
-    ${configured_patch_dir}/QtMobilityBeta1-unix.patch)
-  IF(APPLE)
-    LIST(APPEND patch_files ${patch_dir}/QtMobilityBeta1-apple.patch)
-  ENDIF()
-ENDIF()
-
-# Apply patches
-ctkFunctionApplyPatches("@CTK_PATCH_EXECUTABLE@" "@qtmobility_src_dir@" "${patch_files}")

+ 0 - 28
Utilities/QtMobility/QtMobilityBeta1-unix.patch.in

@@ -1,28 +0,0 @@
-diff -crB ../qt-mobility-src-1.0.0-beta1/common.pri common.pri
-*** ./qt-mobility-src-1.0.0-beta1/common.pri	2010-02-12 03:54:11.000000000 -0500
---- common.pri	2010-03-11 16:04:39.000000000 -0500
-***************
-*** 104,109 ****
---- 104,111 ----
-      QMAKE_RPATHDIR += $$OUTPUT_DIR/lib
-  }
-  
-+ contains(TEMPLATE,.*lib):DEFINES += QT_SHARED
-+ 
-  maemo6 {
-      DEFINES+= Q_WS_MAEMO_6
-  }
-diff -crB ../qt-mobility-src-1.0.0-beta1/configure configure
-*** ./qt-mobility-src-1.0.0-beta1/configure	2010-02-12 03:54:12.000000000 -0500
---- configure	2010-03-18 13:19:38.000000000 -0400
-***************
-*** 40,45 ****
---- 40,47 ----
-  ##
-  #############################################################################
-  
-+ PATH=@QT_BINARY_DIR@:$PATH
-+ 
-  # the current directory (shadow build dir)
-  shadowpath=`/bin/pwd`
-  # the name of this script

+ 0 - 34
Utilities/QtMobility/QtMobilityBeta1-win32.patch.in

@@ -1,34 +0,0 @@
-diff -crB ../qt-mobility-src-1.0.0-beta1/common.pri common.pri
-*** ./qt-mobility-src-1.0.0-beta1/common.pri	2010-02-12 03:54:11.000000000 -0500
---- common.pri	2010-03-11 16:04:39.000000000 -0500
-***************
-*** 104,109 ****
---- 104,111 ----
-      QMAKE_RPATHDIR += $$OUTPUT_DIR/lib
-  }
-  
-+ contains(TEMPLATE,.*lib):DEFINES += QT_SHARED
-+ 
-  maemo6 {
-      DEFINES+= Q_WS_MAEMO_6
-  }
-diff -crB ../qt-mobility-src-1.0.0-beta1/configure.bat configure.bat
-*** ./qt-mobility-src-1.0.0-beta1/configure.bat	2010-02-12 03:54:12.000000000 -0500
---- configure.bat	2010-03-18 13:19:42.000000000 -0400
-***************
-*** 59,65 ****
-  set MOBILITY_MODULES=bearer location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors
-  set MOBILITY_MODULES_UNPARSED=
-  set VC_TEMPLATE_OPTION=
-! set QT_PATH=
-  set QMAKE_CACHE=%BUILD_PATH%\.qmake.cache
-  
-  if exist "%QMAKE_CACHE%" del %QMAKE_CACHE%
---- 59,65 ----
-  set MOBILITY_MODULES=bearer location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors
-  set MOBILITY_MODULES_UNPARSED=
-  set VC_TEMPLATE_OPTION=
-! set QT_PATH=@QT_BINARY_DIR@/
-  set QMAKE_CACHE=%BUILD_PATH%\.qmake.cache
-  
-  if exist "%QMAKE_CACHE%" del %QMAKE_CACHE%

+ 14 - 0
Utilities/QtMobility/README.txt

@@ -0,0 +1,14 @@
+This directory contains a stripped QtMobility 1.0.0 tar ball containing
+only the service framework sources. The following files are patched by
+CMake:
+
+- qtmobility.pro [ALL] (exclude the plugins directory)
+- configure.bat [WIN32] (skip compile tests)
+
+On Windows, Perl would be needed for a working install step (for
+generating the header file wrappers). To avoid having another
+dependency on an external tool, everything is installed in a
+common directory (prefix). The lib files are then copied to the
+CTK binary dir and the header file wrappers are copied by cmake
+into the install dir.
+

+ 1 - 0
Utilities/QtMobility/include/QAbstractSecuritySession

@@ -0,0 +1 @@
+#include "qabstractsecuritysession.h"

+ 1 - 0
Utilities/QtMobility/include/QServiceContext

@@ -0,0 +1 @@
+#include "qservicecontext.h"

+ 1 - 0
Utilities/QtMobility/include/QServiceFilter

@@ -0,0 +1 @@
+#include "qservicefilter.h"

+ 1 - 0
Utilities/QtMobility/include/QServiceInterfaceDescriptor

@@ -0,0 +1 @@
+#include "qserviceinterfacedescriptor.h"

+ 1 - 0
Utilities/QtMobility/include/QServiceManager

@@ -0,0 +1 @@
+#include "qservicemanager.h"

+ 1 - 0
Utilities/QtMobility/include/QServicePluginInterface

@@ -0,0 +1 @@
+#include "qserviceplugininterface.h"

二進制
Utilities/QtMobility/qt-mobility-servicefw-opensource-src-1.0.0.tar.gz