diff -r 8f75794f051f CMakeLists.txt --- a/CMakeLists.txt Fri Sep 18 19:47:00 2015 +0200 +++ b/CMakeLists.txt Sat Sep 26 10:32:03 2015 +0200 @@ -53,9 +53,9 @@ # IF(EXISTS ${PROJECT_SOURCE_DIR}/.hg) - FIND_PROGRAM(_hg hg) - IF(NOT ${_hg} MATCHES "-NOTFOUND") - EXECUTE_PROCESS(COMMAND ${_hg} summary WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" OUTPUT_VARIABLE _release OUTPUT_STRIP_TRAILING_WHITESPACE) + FIND_PACKAGE(Hg) + IF(HG_FOUND) + EXECUTE_PROCESS(COMMAND ${HG_EXECUTABLE} summary WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" OUTPUT_VARIABLE _release OUTPUT_STRIP_TRAILING_WHITESPACE) foreach(_v_l ${_release}) if(_v_l MATCHES "^.*: *[^0-9]*\([0-9]+\):\([a-z0-9]+\)") set(CPACK_PACKAGE_VERSION_PATCH ${CMAKE_MATCH_1}) @@ -69,6 +69,14 @@ SET(HUGIN_DEVELOPMENT_VERSION 1) FILE(WRITE ${PROJECT_SOURCE_DIR}/rev.txt "${HUGIN_WC_REVISION}") MESSAGE("-- Current HG revision is ${HUGIN_WC_REVISION}") + + # Update changelog + IF (UPDATE_CHANGELOG) + EXECUTE_PROCESS(COMMAND ${HG_EXECUTABLE} log --follow --style ${PROJECT_SOURCE_DIR}/Changelog.style + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + OUTPUT_FILE ${PROJECT_SOURCE_DIR}/ChangeLog) + MESSAGE("-- New ChangeLog generated") + ENDIF (UPDATE_CHANGELOG) ELSE() IF (EXISTS ${PROJECT_SOURCE_DIR}/.svn) # comment out the following line to compile an old version from the subversion repository @@ -83,19 +91,6 @@ SET(HUGIN_DEVELOPMENT_VERSION 0) ENDIF() -# -# Check for mercurial and update changelog -# -IF (EXISTS ${PROJECT_SOURCE_DIR}/.hg) - IF (UPDATE_CHANGELOG) - FIND_PROGRAM(_hg hg) - EXECUTE_PROCESS(COMMAND ${_hg} log --follow --style ${PROJECT_SOURCE_DIR}/Changelog.style - WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" - OUTPUT_FILE ${PROJECT_SOURCE_DIR}/ChangeLog) - MESSAGE("-- New ChangeLog generated") - ENDIF (UPDATE_CHANGELOG) -ENDIF (EXISTS ${PROJECT_SOURCE_DIR}/.hg) - # version to display IF (HUGIN_DEVELOPMENT_VERSION EQUAL 1) set(DISPLAY_VERSION "Pre-Release ${V_MAJOR}.${V_MINOR}.${V_PATCH}.${HUGIN_WC_REVISION}") @@ -122,6 +117,7 @@ check_function_exists(log2 HAVE_LOG2) # use messages only for debug - on Windows they are extremely intrusive # message("LOG2 ${HAVE_LOG2}") +check_function_exists(log1p HAVE_LOG1P) # # find dependencies @@ -157,7 +153,10 @@ SET( wxWidgets_ROOT_SUFFIX 2.8.10 CACHE STRING "version of wxWidgets." FORCE ) ENDIF(NOT wxWidgets_ROOT_SUFFIX) + IF (NOT wxWidgets_ROOT_DIR) + # wxWidgets_ROOT_DIR not specified at CMake's command line SET(wxWidgets_ROOT_DIR ${SOURCE_BASE_DIR}/wxWidgets-${wxWidgets_ROOT_SUFFIX}) + ENDIF(NOT wxWidgets_ROOT_DIR) ENDIF(WIN32) ## @@ -165,24 +164,43 @@ ## # This must come before FINDs for tiff, jpeg, png, zlib to enable # finding the wxWidgets distributions of those packages (Win32 only). -SET(wxWidgets_USE_LIBS base core aui xrc html xml adv gl net qa) +SET(wxWidgets_USE_LIBS aui xrc html xml adv gl net qa core base) FIND_PACKAGE(wxWidgets REQUIRED) # hugin requires wxwidgets 2.8.0 or above -IF (UNIX) - EXEC_PROGRAM(sh ARGS "${wxWidgets_CONFIG_EXECUTABLE} --version" OUTPUT_VARIABLE wxWidgets_VERSION) +IF (UNIX OR MSYS) + EXEC_PROGRAM(sh ARGS "${wxWidgets_CONFIG_EXECUTABLE} ${wxWidgets_CONFIG_OPTIONS} --version" + OUTPUT_VARIABLE wxWidgets_VERSION) STRING(REGEX REPLACE "^([0-9]+\\.[0-9]+)\\..*" "\\1" wxWidgets_VERSION ${wxWidgets_VERSION}) IF(wxWidgets_VERSION VERSION_LESS "2.8") SET(wxWidgets_FOUND FALSE) MESSAGE("At least wxWidgets 2.8 is required") ENDIF() +ENDIF(UNIX OR MSYS) + +IF (UNIX) # Ubuntu has 2 different devel packages, we need the GUI version - EXEC_PROGRAM(sh ARGS "${wxWidgets_CONFIG_EXECUTABLE} --query-toolkit" OUTPUT_VARIABLE wxWidgets_TOOLKIT) + EXEC_PROGRAM(sh ARGS "${wxWidgets_CONFIG_EXECUTABLE} ${wxWidgets_CONFIG_OPTIONS} --query-toolkit" + OUTPUT_VARIABLE wxWidgets_TOOLKIT) IF(wxWidgets_TOOLKIT STREQUAL "base") SET(wxWidgets_FOUND FALSE) - MESSAGE("wxWidgets is as non-GUI package configured. Check you wxWidgets installation (maybe wxgtkXX-devel is missing)") + MESSAGE("wxWidgets is configured as non-GUI package. Check your wxWidgets installation (maybe wxgtkXX-devel is missing)") ENDIF() -ENDIF (UNIX) +ENDIF(UNIX) + +IF (MSYS) + # A little hack for lower level CMakeLists. With MinGW we use "UNIX like" wxWidgets, i.e. having + # wx-config utility and different configuration names than wxWidgets for MSVC++. But somehow + # we have to tell lower level CMakeLists that we use Unicode configuration (or not). So we use + # wxWidgets_CONFIGURATION variable wchich is not set in FindwxWidgets.cmake when "UNIX like" + # search branch is used. + EXEC_PROGRAM(sh ARGS "${wxWidgets_CONFIG_EXECUTABLE} ${wxWidgets_CONFIG_OPTIONS} --selected-config" + OUTPUT_VARIABLE wxWidgets_CONFIGURATION) + STRING(REGEX MATCH "^msw-unicode" wxWidgets_CONFIGURATION ${wxWidgets_CONFIGURATION}) + IF (wxWidgets_CONFIGURATION STREQUAL "msw-unicode") + SET(wxWidgets_CONFIGURATION "mswu") + ENDIF() +ENDIF(MSYS) IF(NOT wxWidgets_FOUND) MESSAGE("wxWidgets was not found, GUI programs (hugin, nona_gui) disabled") @@ -200,6 +218,11 @@ FIND_PACKAGE(PNG REQUIRED) INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR}) INCLUDE_DIRECTORIES(${PNG_INCLUDE_DIR}) +IF (WIN32 AND HUGIN_SHARED) + # Note: DLL version of libtiff doesn't need something like -DUSE_TIFF_DLL, + # it exports symbols using .def file + ADD_DEFINITIONS(-DUSE_JPEG_DLL -DZLIB_WINAPI -DPNG_USE_DLL) +ENDIF() IF(WIN32 AND NOT HUGIN_SHARED) IF(NOT ${WX_jpeg} MATCHES ${JPEG_LIBRARIES_RELEASE}) @@ -226,6 +249,17 @@ FIND_PACKAGE(Exiv2 REQUIRED) INCLUDE_DIRECTORIES(${EXIV2_INCLUDE_DIR}) +IF (WIN32) + IF (HUGIN_SHARED) + # Note: DLL version of Vigra doesn't need -DVIGRA_DLL - this macro + # is necessary while building Vigra DLL; on the other hand, static + # version of Vigra requires -DVIGRA_STATIC_LIB + ADD_DEFINITIONS(-DOPENEXR_DLL -DVIGRA_DLL -DEXV_HAVE_DLL) + ELSE() + ADD_DEFINITIONS(-DVIGRA_STATIC_LIB) + ENDIF() +ENDIF() + ## OpenGL and GLEW FIND_PACKAGE(OpenGL REQUIRED) @@ -256,6 +290,9 @@ MESSAGE(SEND_ERROR "libpano13 required") ENDIF(PANO13_FOUND) INCLUDE_DIRECTORIES(${PANO_INCLUDE_DIR}) +IF (WIN32 AND HUGIN_SHARED) + ADD_DEFINITIONS(-DPANO13_DLL) +ENDIF() # Check CXX11 compiler @@ -305,11 +342,14 @@ ENDIF(${HUGIN_SHARED}) # If BOOST_ROOT was defined in the environment, use it. IF(NOT BOOST_ROOT AND NOT $ENV{BOOST_ROOT} STREQUAL "") - SET(BOOST_ROOT $ENV{BOOST_ROOT}) + SET(TMP_BOOST_ROOT $ENV{BOOST_ROOT}) ENDIF() IF(NOT BOOST_ROOT) - SET(BOOST_ROOT ${SOURCE_BASE_DIR}/boost${Boost_root_suffix}) + SET(TMP_BOOST_ROOT ${SOURCE_BASE_DIR}/boost${Boost_root_suffix}) + ELSE() + SET(TMP_BOOST_ROOT ${BOOST_ROOT}) ENDIF() + SET(BOOST_ROOT ${TMP_BOOST_ROOT} CACHE PATH "Boost root directory" FORCE) ENDIF(WIN32) IF(USE_CXX11_THREAD) @@ -332,10 +372,8 @@ # littleCMS 2 now FIND_PACKAGE(LCMS2 REQUIRED) INCLUDE_DIRECTORIES(${LCMS2_INCLUDE_DIR}) -IF(WIN32) - IF(${HUGIN_SHARED}) +IF (WIN32 AND HUGIN_SHARED) ADD_DEFINITIONS(-DCMS_DLL) - ENDIF() ENDIF() FIND_PACKAGE(flann) @@ -349,6 +387,9 @@ MESSAGE(STATUS "Found FFTW library. Activated support for FFT fast cross correlation used by fine-tune feature.") INCLUDE_DIRECTORIES(${FFTW_INCLUDE_DIR}) SET(HAVE_FFTW TRUE) + IF (WIN32 AND HUGIN_SHARED) + ADD_DEFINITIONS(-DFFTW_DLL) + ENDIF() ELSE() MESSAGE(STATUS "Not found FFTW library. Deactivating support for FFT fast cross correlation used by fine-tune feature.") ENDIF() @@ -357,7 +398,9 @@ FIND_PACKAGE(OpenMP) IF(OPENMP_FOUND) MESSAGE(STATUS "Compiler supports OpenMP. Activating support for it.") - ADD_DEFINITIONS(${OpenMP_CXX_FLAGS}) + # Definitions added using ADD_DEFINITIONS() are also passed to the windres which fails + # due to options it doesn't understand. ADD_COMPILE_OPTIONS() is the proper way. + ADD_COMPILE_OPTIONS(${OpenMP_CXX_FLAGS}) SET(HAVE_OPENMP TRUE) IF(OpenMP_CXX_FLAGS AND NOT MSVC) SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_CXX_FLAGS}") @@ -482,11 +525,17 @@ IF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") MESSAGE("Building in Debug mode, resulting programs will be SLOW") ADD_DEFINITIONS(-DDEBUG) - IF(UNIX) - ADD_DEFINITIONS(-Wall) - ENDIF(UNIX) + IF(UNIX OR MINGW) + ADD_COMPILE_OPTIONS(-Wall) + ENDIF(UNIX OR MINGW) ENDIF(${CMAKE_BUILD_TYPE} STREQUAL "Debug") +IF(MINGW) + # Strip binaries for "Release" build + SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -s") + SET(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} -s") +ENDIF() + # # define destination dirs (relative to prefix) # @@ -544,13 +593,8 @@ ELSE (UNIX) IF (${HUGIN_SHARED}) - ADD_DEFINITIONS(-DVIGRA_DLL) - ADD_DEFINITIONS(-DOPENEXR_DLL) ADD_DEFINITIONS(-DHugin_shared) - ADD_DEFINITIONS(-DPANO13_DLL) SET(HUGIN_SHARED_LIBS 1) - ELSE(${HUGIN_SHARED}) - ADD_DEFINITIONS(-DVIGRA_STATIC_LIB) ENDIF(${HUGIN_SHARED}) # Windows installer packaging related stuff diff -r 8f75794f051f CMakeModules/FindGLEW.cmake --- a/CMakeModules/FindGLEW.cmake Fri Sep 18 19:47:00 2015 +0200 +++ b/CMakeModules/FindGLEW.cmake Sat Sep 26 10:32:03 2015 +0200 @@ -5,16 +5,17 @@ IF(WIN32) FIND_PATH(GLEW_INCLUDE_DIR GL/glew.h PATHS ${SOURCE_BASE_DIR}/glew/include) - # for dynamic build, it's glew32.lib and the dll must be copied into hugin's bin folder + # for dynamic build, it's glew32.lib for VC++ (or libglew32.dll.a for MinGW gcc) + # and the dll must be copied into hugin's bin folder IF(${HUGIN_SHARED}) FIND_LIBRARY(GLEW_LIBRARIES - NAMES glew32.lib + NAMES glew32.lib libglew32.dll.a PATHS ${SOURCE_BASE_DIR}/glew/lib ) ELSE(${HUGIN_SHARED}) FIND_LIBRARY(GLEW_LIBRARIES - NAMES glew32s.lib + NAMES glew32s.lib libglew32.a PATHS ${SOURCE_BASE_DIR}/glew/lib ) diff -r 8f75794f051f CMakeModules/FindLibraryWithDebug.cmake --- a/CMakeModules/FindLibraryWithDebug.cmake Fri Sep 18 19:47:00 2015 +0200 +++ b/CMakeModules/FindLibraryWithDebug.cmake Sat Sep 26 10:32:03 2015 +0200 @@ -11,9 +11,10 @@ MACRO(FIND_LIBRARY_WITH_DEBUG var_name win32_dbg_postfix_name dgb_postfix libname) - IF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX") + IF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX" OR ${var_name}) - # no WIN32_DEBUG_POSTFIX -> simply pass all arguments to FIND_LIBRARY + # no WIN32_DEBUG_POSTFIX or var_name set at the command line -> simply pass + # all arguments to FIND_LIBRARY FIND_LIBRARY(${var_name} ${win32_dbg_postfix_name} ${dgb_postfix} @@ -21,7 +22,7 @@ ${ARGN} ) - ELSE(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX") + ELSE(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX" OR ${var_name}) IF(NOT WIN32) # on non-win32 we don't need to take care about WIN32_DEBUG_POSTFIX @@ -108,6 +109,6 @@ ENDIF(NOT WIN32) - ENDIF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX") + ENDIF(NOT "${win32_dbg_postfix_name}" STREQUAL "WIN32_DEBUG_POSTFIX" OR ${var_name}) ENDMACRO(FIND_LIBRARY_WITH_DEBUG) diff -r 8f75794f051f CMakeModules/FindTIFF.cmake --- a/CMakeModules/FindTIFF.cmake Fri Sep 18 19:47:00 2015 +0200 +++ b/CMakeModules/FindTIFF.cmake Sat Sep 26 10:32:03 2015 +0200 @@ -35,7 +35,7 @@ # on windows the libtiff library contains a static lib libtiff # and the import library libtiff_i for dynamic build find_library(TIFF_LIBRARIES - NAMES libtiff_i + NAMES libtiff_i libtiff PATHS ${SYSTEM_LIB_DIRS} ${SOURCE_BASE_DIR}/tiff-4.0.4/libtiff ${SOURCE_BASE_DIR}/tiff-4.0.3/libtiff diff -r 8f75794f051f CMakeModules/win_bundle.cmake --- a/CMakeModules/win_bundle.cmake Fri Sep 18 19:47:00 2015 +0200 +++ b/CMakeModules/win_bundle.cmake Sat Sep 26 10:32:03 2015 +0200 @@ -23,11 +23,19 @@ ${SOURCE_BASE_DIR}/libpano13/bin DOC "Location of pano13 executables" NO_DEFAULT_PATH) - FILE(GLOB PANO13_EXECUTABLES ${PANO13_EXE_DIR}/*.exe) + FILE(GLOB _panoexefiles_ ${PANO13_EXE_DIR}/*.exe) + FOREACH(_panoexe_ IN LISTS _panoexefiles_) + STRING(TOLOWER ${_panoexe_} _panoexe_lc_) + IF (_panoexe_lc_ MATCHES "(panoinfo|ptblender|ptcrop|ptinfo|ptmasker|ptmender|ptoptimizer|ptroller|pttiff2psd|pttiffdump|ptuncrop)") + LIST(APPEND PANO13_EXECUTABLES ${_panoexe_}) + ENDIF() + ENDFOREACH(_panoexe_) INSTALL(FILES ${PANO13_EXECUTABLES} DESTINATION ${BINDIR}) IF(${HUGIN_SHARED}) - FIND_FILE(PANO13_DLL pano13.dll - PATHS ${SOURCE_BASE_DIR}/libpano13/bin + FIND_FILE(PANO13_DLL pano13.dll libpano13.dll + PATHS + ${PANO13_EXE_DIR} + ${SOURCE_BASE_DIR}/libpano13/bin NO_SYSTEM_ENVIRONMENT_PATH ) INSTALL(FILES ${PANO13_DLL} DESTINATION ${BINDIR}) @@ -93,7 +101,7 @@ NO_SYSTEM_ENVIRONMENT_PATH ) FIND_FILE(JPEG_DLL - NAMES jpeg.dll + NAMES jpeg.dll libjpeg.dll PATHS ${SOURCE_BASE_DIR}/jpeg-9a/lib ${SOURCE_BASE_DIR}/jpeg-9a/x64/Release @@ -106,45 +114,60 @@ NO_SYSTEM_ENVIRONMENT_PATH ) FIND_FILE(PNG_DLL - NAMES libpng16.dll libpng15.dll libpng14.dll + NAMES libpng16.dll libpng15.dll libpng14.dll libpng.dll PATHS ${SOURCE_BASE_DIR}/libpng/bin ${SOURCE_BASE_DIR}/lpng142/lib ${SOURCE_BASE_DIR}/lpng141/lib ${SOURCE_BASE_DIR}/lpng140/lib NO_SYSTEM_ENVIRONMENT_PATH ) FIND_FILE(ZLIB_DLL - NAMES zlib1.dll zlib.dll + NAMES zlib1.dll zlib.dll libz.dll PATHS ${SOURCE_BASE_DIR}/zlib ${SOURCE_BASE_DIR}/zlib/bin NO_SYSTEM_ENVIRONMENT_PATH ) FIND_PATH(OPENEXR_BIN_DIR - NAMES Half.dll + NAMES Half.dll libHalf.dll PATHS ${SOURCE_BASE_DIR}/Deploy/lib ${SOURCE_BASE_DIR}/Deploy/bin ${SOURCE_BASE_DIR}/Deploy/lib/Release ${SOURCE_BASE_DIR}/Deploy/bin/Release DOC "Location of OpenEXR libraries" NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH ) - FILE(GLOB OPENEXR_DLL ${OPENEXR_BIN_DIR}/*.dll) + FILE(GLOB _oexrlibs_ ${OPENEXR_BIN_DIR}/*.dll) + FOREACH(_oexrdll_ IN LISTS _oexrlibs_) + STRING(TOLOWER ${_oexrdll_} _oexrdll_lc_) + IF (_oexrdll_lc_ MATCHES "(lib)?(half|iex|iexmath|ilmthread|imath|ilmimf|ilmimfutil)") + LIST(APPEND OPENEXR_DLL ${_oexrdll_}) + ENDIF() + ENDFOREACH(_oexrdll_) FIND_FILE(VIGRA_DLL - NAMES vigraimpex.dll + NAMES vigraimpex.dll libvigraimpex.dll PATHS ${SOURCE_BASE_DIR}/vigra/bin NO_SYSTEM_ENVIRONMENT_PATH ) - FILE(GLOB BOOST_SYSTEM_DLL ${Boost_LIBRARY_DIRS}/boost_system*.dll) - FILE(GLOB BOOST_FILESYSTEM_DLL ${Boost_LIBRARY_DIRS}/boost_filesystem*.dll) + FILE(GLOB BOOST_SYSTEM_DLL ${Boost_LIBRARY_DIRS}/*boost_system*.dll) + FILE(GLOB BOOST_FILESYSTEM_DLL ${Boost_LIBRARY_DIRS}/*boost_filesystem*.dll) LIST(APPEND BOOST_DLLs ${BOOST_SYSTEM_DLL} ${BOOST_FILESYSTEM_DLL}) IF(NOT CXX11_THREAD) - FILE(GLOB BOOST_THREAD_DLL ${Boost_LIBRARY_DIRS}/boost_thread*.dll) - FILE(GLOB BOOST_DATE_TIME_DLL ${Boost_LIBRARY_DIRS}/boost_date_time*.dll) - FILE(GLOB BOOST_CHRONO_DLL ${Boost_LIBRARY_DIRS}/boost_chrono*.dll) + FILE(GLOB BOOST_THREAD_DLL ${Boost_LIBRARY_DIRS}/*boost_thread*.dll) + FILE(GLOB BOOST_DATE_TIME_DLL ${Boost_LIBRARY_DIRS}/*boost_date_time*.dll) + FILE(GLOB BOOST_CHRONO_DLL ${Boost_LIBRARY_DIRS}/*boost_chrono*.dll) LIST(APPEND BOOST_DLLs ${BOOST_THREAD_DLL} ${BOOST_DATE_TIME_DLL}) IF(NOT "${BOOST_CHRONO_DLL}" MATCHES "-NOTFOUND") LIST(APPEND BOOST_DLLs ${BOOST_CHRONO_DLL}) ENDIF() ENDIF() FIND_FILE(EXIV2_DLL - NAMES exiv2.dll + NAMES exiv2.dll libexiv2.dll PATHS ${SOURCE_BASE_DIR}/exiv2/bin ${SOURCE_BASE_DIR}/exiv2/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.25/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.24/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.23/msvc64/bin/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.23/msvc64/bin/Win32/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.22/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.21.1/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.20/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.19/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.18.2/msvc/bin/ReleaseDLL NO_SYSTEM_ENVIRONMENT_PATH ) + IF(MINGW) + # My libexiv2.dll depends on libiconv.dll + FIND_FILE(ICONV_DLL + NAMES iconv.dll libiconv.dll + PATHS ${SOURCE_BASE_DIR}/libiconv-1.14/bin + NO_SYSTEM_ENVIRONMENT_PATH + ) + INSTALL(FILES ${ICONV_DLL} DESTINATION ${BINDIR}) + ENDIF(MINGW) FIND_FILE(LIBEXPAT_DLL NAMES libexpat.dll expat.dll PATHS ${SOURCE_BASE_DIR}/expat/bin ${SOURCE_BASE_DIR}/exiv2/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.25/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.24/msvc2012/exiv2lib/x64/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.23/msvc64/bin/Win32/ReleaseDLL ${SOURCE_BASE_DIR}/expat-2.0.1/win32/bin/Release ${SOURCE_BASE_DIR}/exiv2-0.22/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.21.1/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.20/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.19/msvc/bin/ReleaseDLL ${SOURCE_BASE_DIR}/exiv2-0.18.2/msvc/bin/ReleaseDLL @@ -156,48 +179,91 @@ NO_SYSTEM_ENVIRONMENT_PATH ) FIND_FILE(LCMS2_DLL - NAMES lcms2.dll + NAMES lcms2.dll liblcms2-2.dll PATHS ${LCMS2_ROOT_DIR}/bin NO_SYSTEM_ENVIRONMENT_PATH ) + IF (MSVC) + IF (MSVC10) + SET(_wx_suffix_ vc100) # Visual C++ 2010 (known also as Visual C++ 10.0) + ELSEIF (MSVC11) + SET(_wx_suffix_ vc110) # Visual C++ 2012 (known also as Visual C++ 11.0) + ELSEIF (MSVC12) + SET(_wx_suffix_ vc120) # Visual C++ 2013 (known also as Visual C++ 12.0) + ELSEIF (MSVC14) + SET(_wx_suffix_ vc140) # Visual C++ 2015 (known also as Visual C++ 14.0) + ELSE() + MESSAGE(FATAL_ERROR "Unknown Visual C++ version. Update win_bundle.cmake in order to support it.") + ENDIF() + ELSEIF (MINGW) + SET(_wx_suffix_ "gcc-${CMAKE_CXX_COMPILER_VERSION}") + ELSE() + MESSAGE(FATAL_ERROR "Unknown C++ compiler. Update win_bundle.cmake in order to support it.") + ENDIF() # hand tuned dll, so that only necesarry dll are install and not all wxWidgets DLL to save space - FIND_FILE(WXWIDGETS_DLL1 - NAMES wxbase310u_vc_custom.dll wxbase30u_vc_custom.dll wxbase295u_vc_custom.dll wxbase294u_vc_custom.dll wxbase293u_vc_custom.dll wxbase292u_vc_custom.dll wxbase291u_vc_custom.dll wxbase28u_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL2 - NAMES wxmsw310u_core_vc_custom.dll wxmsw30u_core_vc_custom.dll wxmsw295u_core_vc_custom.dll wxmsw294u_core_vc_custom.dll wxmsw293u_core_vc_custom.dll wxmsw292u_core_vc_custom.dll wxmsw291u_core_vc_custom.dll wxmsw28u_core_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL3 - NAMES wxmsw310u_xrc_vc_custom.dll wxmsw30u_xrc_vc_custom.dll wxmsw295u_xrc_vc_custom.dll wxmsw294u_xrc_vc_custom.dll wxmsw293u_xrc_vc_custom.dll wxmsw292u_xrc_vc_custom.dll wxmsw291u_xrc_vc_custom.dll wxmsw28u_xrc_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL4 - NAMES wxmsw310u_adv_vc_custom.dll wxmsw30u_adv_vc_custom.dll wxmsw295u_adv_vc_custom.dll wxmsw294u_adv_vc_custom.dll wxmsw293u_adv_vc_custom.dll wxmsw292u_adv_vc_custom.dll wxmsw291u_adv_vc_custom.dll wxmsw28u_adv_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL5 - NAMES wxmsw310u_gl_vc_custom.dll wxmsw30u_gl_vc_custom.dll wxmsw295u_gl_vc_custom.dll wxmsw294u_gl_vc_custom.dll wxmsw293u_gl_vc_custom.dll wxmsw292u_gl_vc_custom.dll wxmsw291u_gl_vc_custom.dll wxmsw28u_gl_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL6 - NAMES wxmsw310u_html_vc_custom.dll wxmsw30u_html_vc_custom.dll wxmsw295u_html_vc_custom.dll wxmsw294u_html_vc_custom.dll wxmsw293u_html_vc_custom.dll wxmsw292u_html_vc_custom.dll wxmsw291u_html_vc_custom.dll wxmsw28u_html_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL7 - NAMES wxbase310u_xml_vc_custom.dll wxbase30u_xml_vc_custom.dll wxbase295u_xml_vc_custom.dll wxbase294u_xml_vc_custom.dll wxbase293u_xml_vc_custom.dll wxbase292u_xml_vc_custom.dll wxbase291u_xml_vc_custom.dll wxbase28u_xml_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL8 - NAMES wxmsw310u_aui_vc_custom.dll wxmsw30u_aui_vc_custom.dll wxmsw295u_aui_vc_custom.dll wxmsw294u_aui_vc_custom.dll wxmsw293u_aui_vc_custom.dll wxmsw292u_aui_vc_custom.dll wxmsw291u_aui_vc_custom.dll wxmsw28u_aui_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) - FIND_FILE(WXWIDGETS_DLL9 - NAMES wxmsw310u_qa_vc_custom.dll wxmsw30u_qa_vc_custom.dll wxmsw295u_qa_vc_custom.dll wxmsw294u_qa_vc_custom.dll wxmsw293u_qa_vc_custom.dll wxmsw292u_qa_vc_custom.dll wxmsw291u_qa_vc_custom.dll wxmsw28u_qa_vc_custom.dll - PATHS ${wxWidgets_LIB_DIR} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL1 NAMES + wxbase310u_${_wx_suffix_}.dll wxbase30u_${_wx_suffix_}.dll + wxbase295u_${_wx_suffix_}.dll wxbase294u_${_wx_suffix_}.dll + wxbase293u_${_wx_suffix_}.dll wxbase292u_${_wx_suffix_}.dll + wxbase291u_${_wx_suffix_}.dll wxbase28u_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL2 NAMES + wxmsw310u_core_${_wx_suffix_}.dll wxmsw30u_core_${_wx_suffix_}.dll + wxmsw295u_core_${_wx_suffix_}.dll wxmsw294u_core_${_wx_suffix_}.dll + wxmsw293u_core_${_wx_suffix_}.dll wxmsw292u_core_${_wx_suffix_}.dll + wxmsw291u_core_${_wx_suffix_}.dll wxmsw28u_core_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL3 NAMES + wxmsw310u_xrc_${_wx_suffix_}.dll wxmsw30u_xrc_${_wx_suffix_}.dll + wxmsw295u_xrc_${_wx_suffix_}.dll wxmsw294u_xrc_${_wx_suffix_}.dll + wxmsw293u_xrc_${_wx_suffix_}.dll wxmsw292u_xrc_${_wx_suffix_}.dll + wxmsw291u_xrc_${_wx_suffix_}.dll wxmsw28u_xrc_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL4 NAMES + wxmsw310u_adv_${_wx_suffix_}.dll wxmsw30u_adv_${_wx_suffix_}.dll + wxmsw295u_adv_${_wx_suffix_}.dll wxmsw294u_adv_${_wx_suffix_}.dll + wxmsw293u_adv_${_wx_suffix_}.dll wxmsw292u_adv_${_wx_suffix_}.dll + wxmsw291u_adv_${_wx_suffix_}.dll wxmsw28u_adv_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL5 NAMES + wxmsw310u_gl_${_wx_suffix_}.dll wxmsw30u_gl_${_wx_suffix_}.dll + wxmsw295u_gl_${_wx_suffix_}.dll wxmsw294u_gl_${_wx_suffix_}.dll + wxmsw293u_gl_${_wx_suffix_}.dll wxmsw292u_gl_${_wx_suffix_}.dll + wxmsw291u_gl_${_wx_suffix_}.dll wxmsw28u_gl_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL6 NAMES + wxmsw310u_html_${_wx_suffix_}.dll wxmsw30u_html_${_wx_suffix_}.dll + wxmsw295u_html_${_wx_suffix_}.dll wxmsw294u_html_${_wx_suffix_}.dll + wxmsw293u_html_${_wx_suffix_}.dll wxmsw292u_html_${_wx_suffix_}.dll + wxmsw291u_html_${_wx_suffix_}.dll wxmsw28u_html_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL7 NAMES + wxbase310u_xml_${_wx_suffix_}.dll wxbase30u_xml_${_wx_suffix_}.dll + wxbase295u_xml_${_wx_suffix_}.dll wxbase294u_xml_${_wx_suffix_}.dll + wxbase293u_xml_${_wx_suffix_}.dll wxbase292u_xml_${_wx_suffix_}.dll + wxbase291u_xml_${_wx_suffix_}.dll wxbase28u_xml_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL8 NAMES + wxmsw310u_aui_${_wx_suffix_}.dll wxmsw30u_aui_${_wx_suffix_}.dll + wxmsw295u_aui_${_wx_suffix_}.dll wxmsw294u_aui_${_wx_suffix_}.dll + wxmsw293u_aui_${_wx_suffix_}.dll wxmsw292u_aui_${_wx_suffix_}.dll + wxmsw291u_aui_${_wx_suffix_}.dll wxmsw28u_aui_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(WXWIDGETS_DLL9 NAMES + wxmsw310u_qa_${_wx_suffix_}.dll wxmsw30u_qa_${_wx_suffix_}.dll + wxmsw295u_qa_${_wx_suffix_}.dll wxmsw294u_qa_${_wx_suffix_}.dll + wxmsw293u_qa_${_wx_suffix_}.dll wxmsw292u_qa_${_wx_suffix_}.dll + wxmsw291u_qa_${_wx_suffix_}.dll wxmsw28u_qa_${_wx_suffix_}.dll + PATHS ${wxWidgets_LIB_DIR} ${wxWidgets_LIBRARY_DIRS} NO_SYSTEM_ENVIRONMENT_PATH) INSTALL(FILES ${TIFF_DLL} ${JPEG_DLL} ${PNG_DLL} ${ZLIB_DLL} ${OPENEXR_DLL} ${VIGRA_DLL} ${BOOST_DLLs} ${EXIV2_DLL} ${LIBEXPAT_DLL} ${GLEW_DLL} ${LCMS2_DLL} - ${WXWIDGETS_DLL1} ${WXWIDGETS_DLL2} ${WXWIDGETS_DLL2} ${WXWIDGETS_DLL3} - ${WXWIDGETS_DLL3} ${WXWIDGETS_DLL4} ${WXWIDGETS_DLL5} ${WXWIDGETS_DLL6} - ${WXWIDGETS_DLL7} ${WXWIDGETS_DLL8} ${WXWIDGETS_DLL9} + ${WXWIDGETS_DLL1} ${WXWIDGETS_DLL2} ${WXWIDGETS_DLL3} ${WXWIDGETS_DLL4} ${WXWIDGETS_DLL5} ${WXWIDGETS_DLL6} ${WXWIDGETS_DLL7} ${WXWIDGETS_DLL8} ${WXWIDGETS_DLL9} DESTINATION ${BINDIR} ) - FIND_FILE(SQLITE3_DLL NAMES sqlite3.dll PATHS ${SOURCE_BASE_DIR}/sqlite3 NO_SYSTEM_ENVIRONMENT_PATH) + FIND_FILE(SQLITE3_DLL NAMES sqlite3.dll libsqlite3-0.dll + PATHS ${SOURCE_BASE_DIR}/sqlite3 NO_SYSTEM_ENVIRONMENT_PATH) INSTALL(FILES ${SQLITE3_DLL} DESTINATION ${BINDIR}) IF(HAVE_FFTW) @@ -212,6 +278,41 @@ INSTALL(FILES ${FFTW3_DLL} DESTINATION ${BINDIR}) ENDIF() + IF(ENABLE_LAPACK) + FIND_PATH(LAPACK_DLL_DIR libblas.dll + DOC "Location of LAPACK shared libraries" + NO_DEFAULT_PATH) + INSTALL(FILES ${LAPACK_DLL_DIR}/libblas.dll + ${LAPACK_DLL_DIR}/liblapack.dll + DESTINATION ${BINDIR}) + + FIND_PATH(GCC_BIN_DIR gcc.exe DOC "Location of gcc" NO_DEFAULT_PATH) + FILE(GLOB LIBGCC_DLL ${GCC_BIN_DIR}/libgcc_s_*.dll) + # Runtime libraries needed by LAPACK's DLL's built using gcc + IF(NOT MINGW) + INSTALL(FILES ${LIBGCC_DLL} + ${GCC_BIN_DIR}/libwinpthread-1.dll + ${GCC_BIN_DIR}/libquadmath-0.dll + ${GCC_BIN_DIR}/libgfortran-3.dll + DESTINATION ${BINDIR}) + ELSE(NOT MINGW) + INSTALL(FILES ${GCC_BIN_DIR}/libquadmath-0.dll + ${GCC_BIN_DIR}/libgfortran-3.dll + DESTINATION ${BINDIR}) + ENDIF(NOT MINGW) + ENDIF(ENABLE_LAPACK) + + IF(MINGW) + IF(NOT ENABLE_LAPACK) + FIND_PATH(GCC_BIN_DIR gcc.exe DOC "Location of gcc" NO_DEFAULT_PATH) + FILE(GLOB LIBGCC_DLL ${GCC_BIN_DIR}/libgcc_s_*.dll) + ENDIF(NOT ENABLE_LAPACK) + INSTALL(FILES ${LIBGCC_DLL} + ${GCC_BIN_DIR}/libstdc++-6.dll + ${GCC_BIN_DIR}/libgomp-1.dll + ${GCC_BIN_DIR}/libwinpthread-1.dll + DESTINATION ${BINDIR}) + ENDIF(MINGW) ENDIF(${HUGIN_SHARED}) ENDIF(WIN32) diff -r 8f75794f051f src/CMakeLists.txt --- a/src/CMakeLists.txt Fri Sep 18 19:47:00 2015 +0200 +++ b/src/CMakeLists.txt Sat Sep 26 10:32:03 2015 +0200 @@ -38,6 +38,10 @@ add_subdirectory(hugin_script_interface) ENDIF() +# The following line must be before wxWidgets_USE_FILE include otherwise +# wxWidgets related definitions and options will be passed to hugin_cpfind. +add_subdirectory(hugin_cpfind) + # build gui only if wxWidgets was found IF(wxWidgets_FOUND) INCLUDE(${wxWidgets_USE_FILE}) @@ -47,10 +51,9 @@ # do we need to define _UNICODE on windows? IF(WIN32) IF ("${wxWidgets_CONFIGURATION}" STREQUAL "mswu") - ADD_DEFINITIONS("-D_UNICODE") + ADD_DEFINITIONS("-D_UNICODE -DUNICODE") ENDIF("${wxWidgets_CONFIGURATION}" STREQUAL "mswu") ENDIF(WIN32) ENDIF(wxWidgets_FOUND) -add_subdirectory(hugin_cpfind) add_subdirectory(translations) diff -r 8f75794f051f src/foreign/levmar/CMakeLists.txt --- a/src/foreign/levmar/CMakeLists.txt Fri Sep 18 19:47:00 2015 +0200 +++ b/src/foreign/levmar/CMakeLists.txt Sat Sep 26 10:32:03 2015 +0200 @@ -12,10 +12,10 @@ ADD_LIBRARY(huginlevmar STATIC ${LEVMAR_SOURCE} ${LEVMAR_HEADER}) -IF (NOT MSVC) +IF (NOT MSVC AND NOT MINGW) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") SET_TARGET_PROPERTIES(huginlevmar PROPERTIES COMPILE_FLAGS -fPIC) -ENDIF (NOT MSVC) +ENDIF (NOT MSVC AND NOT MINGW) IF(LAPACK_FOUND) ADD_DEFINITIONS(-DHAVE_LAPACK) diff -r 8f75794f051f src/hugin1/CMakeLists.txt --- a/src/hugin1/CMakeLists.txt Fri Sep 18 19:47:00 2015 +0200 +++ b/src/hugin1/CMakeLists.txt Sat Sep 26 10:32:03 2015 +0200 @@ -8,7 +8,7 @@ # do we need to define _UNICODE on windows? IF(WIN32) IF ("${wxWidgets_CONFIGURATION}" STREQUAL "mswu") - ADD_DEFINITIONS("-D_UNICODE") + ADD_DEFINITIONS("-D_UNICODE -DUNICODE") ENDIF("${wxWidgets_CONFIGURATION}" STREQUAL "mswu") ENDIF(WIN32) diff -r 8f75794f051f src/hugin1/ptbatcher/CMakeLists.txt --- a/src/hugin1/ptbatcher/CMakeLists.txt Fri Sep 18 19:47:00 2015 +0200 +++ b/src/hugin1/ptbatcher/CMakeLists.txt Sat Sep 26 10:32:03 2015 +0200 @@ -6,6 +6,10 @@ BatchTrayIcon.h ProgressStatusBar.h PTBatcherGUI_rc.rc) IF (WIN32) add_executable(PTBatcherGUI WIN32 ${PTBATCHERGUI_SOURCE} ${PTBATCHERGUI_HEADER}) + IF (MINGW) + # MinGW doesn't support #pragma comment(lib, "PowrProf.lib") + target_link_libraries(PTBatcherGUI -lpowrprof) + ENDIF(MINGW) ELSEIF(APPLE) set( PROGNAME PTBatcherGUI ) set( MACOSX_BUNDLE_EXTENSION pto)