Skip to content

Commit

Permalink
Merge pull request #4 from qchateau/appveyor
Browse files Browse the repository at this point in the history
Appveyor, CMakeLists, License, Deployment
  • Loading branch information
qchateau authored Jan 5, 2019
2 parents e6f5262 + cbef4d9 commit 6f3762a
Show file tree
Hide file tree
Showing 13 changed files with 1,034 additions and 321 deletions.
12 changes: 8 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,19 @@ os: linux
dist: xenial
compiler: gcc
install:
- sudo apt-get install -qq qt5-default tree libeigen3-dev
- sudo apt-get install -qq qt5-default libeigen3-dev
script:
- "./scripts/compile_opencv.sh"
- "./scripts/compile_autopanorama.sh"
- "./scripts/linux_deploy.sh build/autopanorama/autopanorama"
- "mkdir -p build/autopanorama && cd build/autopanorama"
- "cmake ../../ -DCMAKE_BUILD_TYPE=Release"
- "make -j package"
- "mv autopanorama-*.deb ../../"
- "cd ../../"
- "dpkg -c *.deb"
deploy:
provider: releases
api_key:
secure: MaVyXkXrFJfY21xlVgbaWiLP9xzlw1q8nuPnZbXpBIntWZRxD/0U851HJOzQFRI2yl/c8d4XO1m+8XOqC4P0DpIAOqiBm55P5S+SeRp/sJ3diaiRYIKPWhVvyKIKIGHoNIa3WOZYNTH2k82h2jSt2wS9JS/yAXeDVSbir4Z/vbiU4LyRdPUtO8M3J2gDuGlzCzqCw0my7qptLfTuwfa9aRLjAZpFtz5z42u9r1EcKhfqG9/UU3jfwIoOoxxM0ARaOxF2WJZYK3iWmXRBPYWXwfV/UuFm/E09TMfhl6SWWVeG+HREZhF3MYj3uSMG4VkSfEOO4SrcxuALTP29kM0y+Ke1Gdr38bmJVXVMhKCdXrfbO/x/unOgWnkKCJfHrCg1xdGKuyxF5J2RALHBBNUCqfLhK9/TSQvtVDTUzSYu6zLJRnQLUzlCv2k6zqexPyan3jXFyfmOivvL6qyOeDxo8Nh5HseJkl3xHD+sc0BugXMrKJ53AQXTvLYdur8C79NGITDWdSLByuYj3i6ZEZ/pbsnKP6yxCRKosROcKpnRVe1kh6vQkjxL3wJLGK5XSIcJwkSHSlkeTxaVuC7JCe6yfrum8B3zEZvZ/h3dts4tkNSV+NyorE3oPqUa7NbQjlJCma6H0H0RLu2IiF52h5PQloEy0027tAwtCfDNImIpO7M=
secure: MYO3XLtpEgrb9cXmOM9CfKOxyJrsNVONDrz/1KLd0RE+aaRKtPN0MFaxUKJgRj6RbXYIoSA8EFfJojV3uDk2PnjKbYxzaTN8cVn8NocMXtdAt6vu6sB4KdyUZMfDTDUT0SOIB6V4+DpvcBfP9XXP1sV8tlFlsYTbfLHSW3sAkH0dHyEN3U6W0ArfZyX6SrQEpQjUHhc4/JsHGbYF/8Pv9Mbhha51rX6RugV0732fvibicToAJ/6hB2G/x3gLFK+fjvSeodpqNEnSaDwz0w/BH4ErCqx+YHGQGOfO+BuK76wcx1h+ObGOnDAH+WFlfvo19yP5+zvzff3DcXDeHMyjYPQl8NX2JXfYVyNJ2CWTZ4GdMtfrgsYN96OQUiFK26omBXIiuj5IsfPL+vP/mXtht5iagEsew5qy1dJeqMHv+oz+EztAqnRw1rwcAVLwO48rh42d5NvDvtBMb4xn0axpxLCZdr2BxWM8xfSDN7iAXYmpbGs6l0a2BOOyLbS35Qvyne+Le//glTq6pM2zZfv4BcJTXXDX7u7zE8Nqn/ZZty3FNEtfPqH97rAxPaBe6FJej38WHcsQwsfczTAMjIfnnfpVqhjpIQyukG+aZYcMS49lMKT4VU+iNNLOAHMUH4c1oQr2LvqVY+ferFbdI55IEJSwBoAzOjL/x4NEryNmQ0E=
file_glob: true
file: "*.deb"
skip_cleanup: true
Expand Down
118 changes: 0 additions & 118 deletions AutoPanorama.pro

This file was deleted.

252 changes: 252 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,252 @@
cmake_minimum_required(VERSION 3.1.0)
project(autopanorama VERSION 1.2.1)
set(TITLE_PROJECT_NAME "AutoPanorama")

# Find and use Qt
find_package(Qt5 COMPONENTS Widgets REQUIRED)
include_directories(${Qt5Widgets_INCLUDE_DIRS})
add_definitions(${Qt5Widgets_DEFINITIONS})
message(STATUS "Found Qt version ${Qt5Core_VERSION}")
message(STATUS "Found Qt headers: ${Qt5Widgets_INCLUDE_DIRS}")
message(STATUS "Using Qt libraries: ${Qt5Widgets_LIBRARIES}")
message(STATUS "Using Qt definitions: ${Qt5Widgets_DEFINITIONS}")

# Use auto-eveything for Qt
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

# Find and use OpenCV
set(OPENCV_INSTALL_PATH "${CMAKE_SOURCE_DIR}/install")
find_package(OpenCV REQUIRED HINTS ${OPENCV_INSTALL_PATH})
include_directories(${OpenCV_INCLUDE_DIRS})
message(STATUS "Found OpenCV version ${OpenCV_VERSION}")
message(STATUS "Found OpenCV headers: ${OpenCV_INCLUDE_DIRS}")
message(STATUS "Using OpenCV libraries: ${OpenCV_LIBRARIES}")

# Custom definition and flags
add_definitions(-DAPP_VERSION="${PROJECT_VERSION}")
set(CMAKE_CXX_STANDARD 11)

if(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Werror")
endif()

# Handle rpath before declaring executable
if(UNIX)
# Add rpath to our custom OpenCV library
set(AUTOPANORAMA_RPATH "$ORIGIN/../share/${PROJECT_NAME}/lib/")
list(APPEND CMAKE_INSTALL_RPATH "${AUTOPANORAMA_RPATH}")
message(STATUS "Setting RPATH: ${CMAKE_INSTALL_RPATH}")
endif()

# Files
set(MAIN_SOURCES
src/main.cpp
src/mainwindow.cpp
src/qfilewidget.cpp
src/videopreprocessor.cpp
src/panoramamaker.cpp
src/innercutfinder.cpp
)

set(ICO
res/autopanorama.ico
)

set(RC
res/application.qrc
)

if(WIN32)
set(RC
${RC}
res/autopanorama.rc
)
endif()

# Main binary
add_executable(${PROJECT_NAME}
WIN32
${MAIN_SOURCES}
${RC}
${MOC_SRCS}
${RES_SOURCES}
${UI_HEADERS}
)
target_link_libraries(${PROJECT_NAME}
${Qt5Widgets_LIBRARIES}
${OpenCV_LIBRARIES}
)

# Install tool function
if(UNIX)
set(SH_EXT "so")
set(SH_PREFIX "lib")
set(DESTINATION_BINARY "bin")
set(DESTINATION_SH "share/${PROJECT_NAME}/lib")
else()
set(SH_EXT "dll")
set(SH_PREFIX "")
set(DESTINATION_BINARY "bin")
set(DESTINATION_SH "bin")
endif()

# Install main binary
install(TARGETS
${PROJECT_NAME}
RUNTIME DESTINATION ${DESTINATION_BINARY}
)

# Install desktop file
if(UNIX)
install(FILES
res/autopanorama.desktop
DESTINATION share/applications
)
install(FILES
res/autopanorama.png
DESTINATION share/${PROJECT_NAME}
)
endif()

# Install dependencies
if(UNIX)
set(OPENCV_LIBRARIES_PATH "${OPENCV_INSTALL_PATH}/lib")

# Add libpng as it breaks between ubuntu 16 and 18
find_library(libpng_location png)
get_filename_component(libpng_location ${libpng_location} REALPATH)
if(NOT libpng_location)
message(SEND_ERROR "Not found: libpng")
else()
message(STATUS "Found libpng: ${all_locations}")
endif()

get_filename_component(libpng_name ${libpng_location} NAME)
file(COPY ${libpng_location} DESTINATION ${CMAKE_BINARY_DIR})
file(RENAME ${CMAKE_BINARY_DIR}/${libpng_name} ${CMAKE_BINARY_DIR}/libpng12.so.0)
list(APPEND REQUIRED_LIBS_PATHS ${CMAKE_BINARY_DIR}/libpng12.so.0)
else()
set(OPENCV_LIBRARIES_PATH "${OPENCV_INSTALL_PATH}/x64/vc15/bin/")

# Install some Qt libraries
set(QT_REQUIRED_LIBS_TARGET_NAMES
Qt5::Widgets
Qt5::Core
Qt5::Gui
)
foreach(target_name ${QT_REQUIRED_LIBS_TARGET_NAMES})
get_target_property(location ${target_name} LOCATION_Release)
get_filename_component(dir ${location} DIRECTORY)
get_filename_component(basename ${location} NAME_WE)
file(GLOB all_locations ${dir}/${basename}.${SH_EXT}*)

if(NOT all_locations)
message(SEND_ERROR "Not found: ${target_name}")
else()
message(STATUS "Found ${target_name}: ${all_locations}")
endif()
list(APPEND REQUIRED_LIBS_PATHS ${all_locations})
endforeach()

# Install required Qt plugins
get_filename_component(QT_ROOT ${Qt5_DIR}/../../.. ABSOLUTE)
set(QT_PLATFORMS ${QT_ROOT}/plugins/platforms)
set(QT_IMAGE_FORMATS ${QT_ROOT}/plugins/imageformats)

file(GLOB qjpeg_library "${QT_IMAGE_FORMATS}/${SH_PREFIX}qjpeg.${SH_EXT}")
if(NOT qjpeg_library)
message(SEND_ERROR "Not found: qjpeg in ${QT_IMAGE_FORMATS}")
else()
message(STATUS "Found qjpeg: ${qjpeg_library}")
endif()
install(FILES ${qjpeg_library} DESTINATION ${DESTINATION_SH}/imageformats)

file(GLOB qico_library "${QT_IMAGE_FORMATS}/${SH_PREFIX}qico.${SH_EXT}")
if(NOT qico_library)
message(SEND_ERROR "Not found: qico in ${QT_IMAGE_FORMATS}")
else()
message(STATUS "Found qico: ${qico_library}")
endif()
install(FILES ${qico_library} DESTINATION ${DESTINATION_SH}/imageformats)

file(GLOB qwindows_library "${QT_PLATFORMS}/${SH_PREFIX}qwindows.${SH_EXT}")
if(NOT qwindows_library)
message(SEND_ERROR "Not found: qwindows in ${QT_PLATFORMS}")
else()
message(STATUS "Found qjpeg: ${qwindows_library}")
endif()
install(FILES ${qwindows_library} DESTINATION ${DESTINATION_SH}/platforms)
endif()

# Select opencv libs to install
set(OPENCV_REQUIRED_LIBS_NAMES
opencv_stitching
opencv_features2d
opencv_calib3d
opencv_flann
opencv_videoio
opencv_imgcodecs
opencv_imgproc
opencv_core
)

# Install required OpenCV libraries
foreach(required_lib_name ${OPENCV_REQUIRED_LIBS_NAMES})
file(GLOB all_locations "${OPENCV_LIBRARIES_PATH}/${SH_PREFIX}${required_lib_name}*.${SH_EXT}*")
if(NOT all_locations)
message(SEND_ERROR "Not found: ${required_lib_name}")
else()
message(STATUS "Found ${required_lib_name}: ${all_locations}")
endif()
list(APPEND REQUIRED_LIBS_PATHS ${all_locations})
endforeach()

# Install all required libraries
install(FILES
${REQUIRED_LIBS_PATHS}
DESTINATION ${DESTINATION_SH}
)

# Package
set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Compose panoramas from multiple photos or movies")
set(CPACK_PACKAGE_CONTACT "Quentin Chateau ([email protected])")
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}")

if(UNIX)
set(CPACK_GENERATOR "DEB")
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5core5a, libqt5gui5, libqt5widgets5")
elseif(WIN32)
set(CPACK_GENERATOR "NSIS")

get_filename_component(ico_abspath ${ICO} REALPATH)
string(REPLACE "/" "\\\\" ico_abspath ${ico_abspath})

set(CPACK_PACKAGE_EXECUTABLES ${PROJECT_NAME} ${TITLE_PROJECT_NAME})
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${PROJECT_NAME}-${PROJECT_VERSION}")

set(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
CreateShortCut \\\"$DESKTOP\\\\${TITLE_PROJECT_NAME}.lnk\\\" \\\"$INSTDIR\\\\bin\\\\${PROJECT_NAME}.exe\\\"
")
set(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
Delete \\\"$DESKTOP\\\\${TITLE_PROJECT_NAME}.lnk\\\"
")

set(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\${PROJECT_NAME}.exe")
set(CPACK_NSIS_MUI_ICON ${ico_abspath})
set(CPACK_NSIS_MUI_UNIICON ${ico_abspath})
set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${TITLE_PROJECT_NAME})
set(CPACK_NSIS_DISPLAY_NAME ${TITLE_PROJECT_NAME})
set(CPACK_NSIS_PACKAGE_NAME ${TITLE_PROJECT_NAME})
set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/qchateau/AutoPanorama/")
set(CPACK_NSIS_HELP_LINK "https://github.com/qchateau/AutoPanorama/")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE.md")
else ()
message(FATAL_ERROR "Unsupported system")
endif()

include(CPack)
Loading

0 comments on commit 6f3762a

Please sign in to comment.