summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDon Bright <hugh.m.bright@gmail.com>2012-01-03 02:44:50 (GMT)
committerDon Bright <hugh.m.bright@gmail.com>2012-01-03 02:44:50 (GMT)
commitb9c027a69987f29019f947029050defa2898575b (patch)
tree4ea5e5cc9e75b865e819de6ab3b7758f09eb1ce5
parent0acf0fee5b60c5fd5ae28767849270b8c2e729c0 (diff)
use pkg-config to find QT libraries in mingw-cross-env, not FindQt4.cmake
-rw-r--r--doc/testing.txt18
-rw-r--r--tests/CMakeLists.txt29
-rw-r--r--tests/CMingw-cross-env.cmake146
-rw-r--r--tests/CMingw-env-cross.cmake119
4 files changed, 167 insertions, 145 deletions
diff --git a/doc/testing.txt b/doc/testing.txt
index 331b485..f690939 100644
--- a/doc/testing.txt
+++ b/doc/testing.txt
@@ -22,23 +22,9 @@ Then, from the QT command prompt:
> cmake .
> nmake -f Makefile
-Cross compiling Linux->Windows:
+Cross compiling Linux->Win32:
-Additional prerequisities: wine, mingw-cross-env
-
-Note: CTest harness will only run under Wine under *nix, not under Win32.
-
-Follow the instructions for installing the mingw-env cross build system at
-http://en.wikibooks.org/wiki/OpenSCAD_User_Manual , especially the part
-about including the cross-compiler in your PATH. If you do cross-builds,
-it's recommended to use out-of-source builds (mkdir buildx; cd buildx; cmake ..)
-in order to keep your native *nix build separate from your cross-build.
-
-$ cd tests
-$ mkdir build-mingw32
-$ cd build-mingw32
-$ cmake .. -DMINGW_CROSS_ENV_DIR=<mingw-env-dir> -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake
-$ make
+Please see openscad/tests/CMingw-cross-env.cmake for instructions.
B) Running tests
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index e803146..65becc4 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -72,10 +72,10 @@ endif()
#
function(inclusion user_set_path found_paths)
- # This function exists as a wrapper for INCLUDE_DIRECTORIES
- # to deal with systems in which some libraries are found
- # in the system paths, (/usr) but others are found in customized
- # paths set in environment variables (CGAL_DIR).
+ # If user_set_path indicates an env. variable was specifically
+ # set by the user, then found_paths become an include priority (prepend);
+ # otherwise found_paths are stuck on the end of the include flags (append).
+
# message(STATUS "inclusion ${user_set_path} ${found_paths}")
# message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}")
set( inclusion_match 0 )
@@ -95,6 +95,10 @@ function(inclusion user_set_path found_paths)
endfunction()
# Boost
+#
+# FindBoost.cmake has been included from Cmake's GIT circa the end of 2011
+# because most existing installs of cmake had a buggy older version.
+#
# Update this if FindBoost.cmake gets out of sync with the current boost release
# set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0")
@@ -139,8 +143,17 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON)
find_package(OpenGL REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
-include(${QT_USE_FILE})
+
+if (MINGW_CROSS_ENV_DIR)
+ mingw_cross_env_find_qt()
+ mingw_cross_env_info()
+ include_directories( ${QT_INCLUDE_DIRS} )
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${QT_CFLAGS_OTHER}")
+else()
+ find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED)
+ include(${QT_USE_FILE})
+endif()
+
set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF)
# Eigen2
@@ -429,10 +442,6 @@ add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/Op
set_target_properties(throwntogethertest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")
target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENCSG_LIBRARY} ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES})
-if (MINGW_CROSS_ENV_DIR)
- mingw_cross_env_add_missing_libs()
-endif()
-
#
# Tags tests as disabled. This is more convenient than removing them manually
# from the lists of filenames
diff --git a/tests/CMingw-cross-env.cmake b/tests/CMingw-cross-env.cmake
new file mode 100644
index 0000000..469223d
--- /dev/null
+++ b/tests/CMingw-cross-env.cmake
@@ -0,0 +1,146 @@
+#
+# CMake Toolchain file for cross compiling OpenSCAD tests linux->mingw-win32
+# --------------------------------------------------------------------------
+#
+# Prerequisites: mingw-cross-env, ImageMagick 6.5.9.3 or newer, wine
+#
+# Usage:
+#
+# - follow Brad Pitcher's mingw-cross-env for OpenSCAD setup:
+# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X
+# - cross-compile openscad.exe, to verify your installation works properly.
+# - cd openscad/tests && mkdir build-mingw32 && cd build-mingw32
+# - cmake .. -DCMAKE_TOOLCHAIN_FILE=CMingw-cross-env.cmake \
+# -DMINGW_CROSS_ENV_DIR=<where mingw-cross-env is installed>
+# - make should proceed as normal.
+# - now run 'ctest' on your *nix machine.
+# The test .exe programs should run under Wine.
+#
+# See also:
+#
+# http://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/threads.html#00078
+# (thread "Qt with Cmake")
+# http://lists.gnu.org/archive/html/mingw-cross-env-list/2011-01/threads.html#00012
+# (thread "Qt: pkg-config files?")
+# http://mingw-cross-env.nongnu.org/#requirements
+# http://www.vtk.org/Wiki/CMake_Cross_Compiling
+# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch
+# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake
+# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html
+# Makefile.Release generated by qmake
+# cmake's FindQt4.cmake & Qt4ConfigDependentSettings.cmake files
+# mingw-cross-env's qmake.conf and *.prl files
+# mingw-cross-env's pkg-config files in usr/i686-pc-mingw32/lib/pkgconfig
+# http://www.vtk.org/Wiki/CMake:How_To_Find_Libraries
+#
+
+#
+# Notes:
+#
+# To debug the build process run "make VERBOSE=1". 'strace -f' is also useful.
+#
+# This file is actually called multiple times by cmake, so various 'if NOT set'
+# guards are used to keep programs from running twice.
+#
+# The test will not currently run under win32 because the ctest harness
+# is created by cmake on the machine that it is called on, not on the
+# machine it is targeting.
+#
+
+#
+# Part 1. Find *nix-ImageMagick
+#
+# The tests run under Wine under *nix. Therefore we need to find the
+# ImageMagick comparison program on the *nix machine. It must be
+# searched before the 'cross-compile' environment is setup.
+#
+
+if (NOT imagemagick_cross_set)
+ find_package(ImageMagick COMPONENTS convert REQUIRED)
+ message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE})
+ set( SKIP_IMAGEMAGICK TRUE )
+ set( imagemagick_cross_set )
+endif()
+
+#
+# Part 2. cross-compiler setup
+#
+
+set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR})
+
+set(BUILD_SHARED_LIBS OFF)
+set(CMAKE_SYSTEM_NAME Windows)
+set(MSYS 1)
+set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32)
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+
+set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc)
+set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++)
+set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres)
+set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config)
+set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake)
+set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix")
+# set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel")
+
+#
+# Part 3. library settings for mingw-cross-env
+#
+
+set( Boost_USE_STATIC_LIBS ON )
+set( Boost_USE_MULTITHREADED ON )
+set( Boost_COMPILER "_win32" )
+# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself
+
+set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} )
+set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} )
+set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL )
+set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} )
+
+#
+# Qt4
+#
+# To workaround problems with CMake's FindQt4.cmake when combined with
+# mingw-cross-env (circa early 2012), we here instead use pkg-config. To
+# workaround Cmake's insertion of -bdynamic, we stick 'static' on the
+# end of QT_LIBRARIES
+#
+
+set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake)
+set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc)
+set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic)
+
+function(mingw_cross_env_find_qt)
+ # called from CMakeLists.txt
+ find_package( PkgConfig )
+ pkg_check_modules( QTCORE QtCore )
+ pkg_check_modules( QTGUI QtGui )
+ pkg_check_modules( QTOPENGL QtOpenGL )
+
+ set(QT_INCLUDE_DIRS ${QTCORE_INCLUDE_DIRS} ${QTGUI_INCLUDE_DIRS} ${QTOPENGL_INCLUDE_DIRS})
+ set(QT_CFLAGS_OTHER "${QTCORE_CFLAGS_OTHER} ${QTGUI_CFLAGS_OTHER} ${QTOPENGL_CFLAGS_OTHER}")
+ set(QT_LIBRARIES "${QTCORE_STATIC_LDFLAGS} ${QTGUI_STATIC_LDFLAGS} ${QTOPENGL_STATIC_LDFLAGS};-static")
+
+ set(QT_INCLUDE_DIRS ${QT_INCLUDE_DIRS} PARENT_SCOPE)
+ set(QT_CFLAGS_OTHER ${QT_CFLAGS_OTHER} PARENT_SCOPE)
+ set(QT_LIBRARIES ${QT_LIBRARIES} PARENT_SCOPE)
+endfunction()
+
+function(mingw_cross_env_info)
+ message(STATUS "QT INCLUDE_DIRS: ${QT_INCLUDE_DIRS}")
+ message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}")
+ message(STATUS "QT_CFLAGS_OTHER: ${QT_CFLAGS_OTHER}")
+endfunction()
+
+#
+# Part 4. -D definitions
+#
+
+if( NOT cross_defs_set )
+ add_definitions( -DGLEW_STATIC ) # FindGLEW.cmake needs this
+ add_definitions( -DBOOST_STATIC )
+ add_definitions( -DBOOST_THREAD_USE_LIB )
+ add_definitions( -DUNICODE ) # because qmake does it
+ set(cross_defs_set 1)
+endif()
diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake
deleted file mode 100644
index 8b802fc..0000000
--- a/tests/CMingw-env-cross.cmake
+++ /dev/null
@@ -1,119 +0,0 @@
-# Toolchain file for cross compiling OpenSCAD linux->mingw-win32.
-#
-# usage:
-# 1. get Brad Pitcher's toolchain for OpenSCAD qmake setup:
-# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X
-# 2. export MINGW_CROSS_ENV_DIR=where-you-installed-mingw
-# 2. cmake . -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake
-# 3. make should proceed as normal.
-#
-# see also
-#
-# http://mingw-cross-env.nongnu.org/#requirements
-# http://www.vtk.org/Wiki/CMake_Cross_Compiling
-# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch
-# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake
-# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html
-# output of qmake
-#
-
-
-#
-# cross-compiler
-#
-
-set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR})
-
-set(BUILD_SHARED_LIBS OFF)
-set(CMAKE_SYSTEM_NAME Windows)
-set(MSYS 1)
-set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32)
-set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
-set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
-
-set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc)
-set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++)
-set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres)
-set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config)
-set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake)
-set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix")
-set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel")
-
-#
-# libraries
-#
-
-set( Boost_USE_STATIC_LIBS ON )
-set( Boost_USE_MULTITHREADED ON )
-set( Boost_COMPILER "_win32" )
-# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself
-
-set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} )
-set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} )
-set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL )
-set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} )
-set( SKIP_IMAGEMAGICK TRUE )
-set( ImageMagick_convert_EXECUTABLE /usr/bin/convert )
-
-#
-# QT
-#
-
-set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake)
-set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc)
-set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic)
-
-#
-# There are various problems introduced to cmake's linking by the large
-# number of libraries needed by OpenSCAD and the complicated build system.
-#
-# Here we copy the flags and libraries from from looking at
-# "qmake && make VERBOSE=1" as well as examining
-# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & using google
-# Another good resource are the files under usr/i686-pc-mingw32/mkspecs
-#
-
-if (NOT MINGW_CROSS_FLAGS_SET)
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UQT_DLL -frtti -fexceptions -mthreads -Wall -DQT_LARGEFILE_SUPPORT")
- set(MINGW_CROSS_FLAGS_SET 1)
-endif()
-
-function(mingw_cross_env_info)
- message(STATUS "QT USE FILE: ${QT_USE_FILE}")
- message(STATUS "QT INCLUDES: ${QT_INCLUDES}")
- message(STATUS "QT LIBRARY_DIR: ${QT_LIBRARY_DIR}")
- message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}")
-endfunction()
-
-function(mingw_cross_env_add_missing_libs)
- # mingw_cross_env_info()
- set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z lzma)
- target_link_libraries(opencsgtest ${mingw_cross_libs})
- target_link_libraries(csgtermtest ${mingw_cross_libs})
- target_link_libraries(csgtexttest ${mingw_cross_libs})
- target_link_libraries(dumptest ${mingw_cross_libs})
- target_link_libraries(echotest ${mingw_cross_libs})
- target_link_libraries(cgalpngtest ${mingw_cross_libs})
- target_link_libraries(throwntogethertest ${mingw_cross_libs})
- target_link_libraries(cgaltest ${mingw_cross_libs})
- target_link_libraries(cgalstlsanitytest ${mingw_cross_libs})
-endfunction()
-
-#
-# -D definitions
-#
-
-if( NOT CROSS_DEFS_SET )
- add_definitions( -DQT_THREAD_SUPPORT )
- add_definitions( -DGLEW_STATIC )
- add_definitions( -DBOOST_STATIC )
- add_definitions( -DBOOST_THREAD_USE_LIB )
- add_definitions( -DUNICODE )
-
- set(CROSS_DEFS_SET 1)
-
-endif()
-
-
-
contact: Jan Huwald // Impressum