diff --git a/CHANGELOG.md b/CHANGELOG.md index 564c5f74..dd5ae8d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ History of user-visible changes. +## [v1.4.1](https://github.com/openconnect/openconnect-gui/tree/v1.4/1) (unreleased) +- Flushing Route Breaks OpenConnect-GUI (#113) +- building from source code snapshots fixed (i.e. without cloning the repo) + +[Full Changelog](https://github.com/openconnect/openconnect-gui/compare/v1.4.0...v1.4.1) + + ## [v1.4.0](https://github.com/openconnect/openconnect-gui/tree/v1.4.0) (2016-08-10) - updated gnutls(3.4.14), stoken (0.90), gmp(6.1.0), nettle(3.2), p11-kit(0.23.2), zlib (1.2.8), libxml2 (2.9.3) - updated TAP-windows(9.21.2), Qt(5.6) diff --git a/CMake/Includes/git_revision_generate.cmake b/CMake/Includes/git_revision_generate.cmake new file mode 100644 index 00000000..070e8d79 --- /dev/null +++ b/CMake/Includes/git_revision_generate.cmake @@ -0,0 +1,73 @@ +#create a pretty commit id using git +#uses 'git describe --tags', so tags are required in the repo +#create a tag with 'git tag ' and 'git push --tags' + +if(IS_DIRECTORY ${GIT_ROOT_DIR}/.git) + execute_process( + COMMAND ${GIT_EXECUTABLE} describe --tags --dirty + WORKING_DIRECTORY ${GIT_ROOT_DIR} + RESULT_VARIABLE res_var + OUTPUT_VARIABLE GIT_COM_ID + ) + if(NOT ${res_var} EQUAL 0) + set(GIT_COMMIT_ID "?.?.?-unknown") + message(WARNING "Git failed (not a repo, or no tags). Build will not contain git revision info.") + endif() + string(REGEX REPLACE "\n$" "" GIT_COMMIT_ID ${GIT_COM_ID}) + string(REGEX REPLACE "^v" "" GIT_COMMIT_ID ${GIT_COMMIT_ID}) + + # check number of digits in version string + string(REPLACE "." ";" GIT_COMMIT_ID_VLIST ${GIT_COMMIT_ID}) + list(LENGTH GIT_COMMIT_ID_VLIST GIT_COMMIT_ID_VLIST_COUNT) + + # no.: major + string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_COMMIT_ID}") + # no.: minor + string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_COMMIT_ID}") + + if(${GIT_COMMIT_ID_VLIST_COUNT} STREQUAL "2") + # no. patch + set(VERSION_PATCH "0") + # SHA1 string + git 'dirty' flag + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_SHA1 "${GIT_COMMIT_ID}") + else() + # no. patch + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_COMMIT_ID}") + # SHA1 string + git 'dirty' flag + string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_SHA1 "${GIT_COMMIT_ID}") + endif() + + set(PROJECT_VERSION "${GIT_COMMIT_ID}") + #string(APPEND PROJECT_VERSION " (git)") + message(STATUS "Version: ${PROJECT_VERSION} [git]") +else() + message(STATUS "Version: ${PROJECT_VERSION} [cmake]") +endif() + +if(NOT APPLE) + if(PROJ_UAC_ON) + set(UAC_FLAG "") + else() + set(UAC_FLAG "//") + endif() + + message(STATUS "Processing resource file...") + file(READ ${INPUT_DIR}/${PROJECT_NAME}.rc.in rc_temporary) + string(CONFIGURE ${rc_temporary} rc_updated) + file(WRITE ${OUTPUT_DIR}/${PROJECT_NAME}.rc.tmp ${rc_updated}) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${OUTPUT_DIR}/${PROJECT_NAME}.rc.tmp ${OUTPUT_DIR}/${PROJECT_NAME}.rc + ) +else() + message(FATAL_ERROR " === ERROR ===") +endif() + +message(STATUS "Processing app info file...") +file(READ ${INPUT_DIR}/${PROJECT_NAME}.cpp.in cpp_temporary) +string(CONFIGURE "${cpp_temporary}" cpp_updated @ONLY) +file(WRITE ${OUTPUT_DIR}/${PROJECT_NAME}.cpp.tmp "${cpp_updated}") +execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + ${OUTPUT_DIR}/${PROJECT_NAME}.cpp.tmp ${OUTPUT_DIR}/${PROJECT_NAME}.cpp +) diff --git a/CMake/Includes/git_revision_main.cmake b/CMake/Includes/git_revision_main.cmake new file mode 100644 index 00000000..276f8b31 --- /dev/null +++ b/CMake/Includes/git_revision_main.cmake @@ -0,0 +1,39 @@ +# Generate version string via Git description + +if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/.git) + find_package(Git 2.7 REQUIRED) +endif() + +add_custom_target(git_revision ALL) +add_custom_command( + TARGET git_revision + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/src + + COMMAND ${CMAKE_COMMAND} + -DGIT_ROOT_DIR=${CMAKE_SOURCE_DIR} + -DGIT_EXECUTABLE=${GIT_EXECUTABLE} + + -DINPUT_DIR=${CMAKE_CURRENT_SOURCE_DIR}/src + -DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR}/src + + -DPROJECT_NAME=${PROJECT_NAME} + -DPROJECT_VERSION=${PROJECT_VERSION} + -DPROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} + -DPROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} + -DPROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} + -DPROJECT_VERSION_TWEAK=${PROJECT_VERSION_TWEAK} + + -DPRODUCT_NAME_COMPANY=${PRODUCT_NAME_COMPANY} + -DPRODUCT_NAME_SHORT=${PRODUCT_NAME_SHORT} + -DPRODUCT_NAME_LONG=${PRODUCT_NAME_LONG} + -DPRODUCT_NAME_COPYRIGHT=${PRODUCT_NAME_COPYRIGHT} + -DPRODUCT_NAME_COMPANY_DOMAIN=${PRODUCT_NAME_COMPANY_DOMAIN} + + -DPROJ_UAC_ON=${PROJ_UAC_ON} + + -DAPPLE=${APPLE} + -P ${CMAKE_SOURCE_DIR}/CMake/Includes/git_revision_generate.cmake + COMMENT "Analyzing Git revision/tag changes..." VERBATIM +) + +add_dependencies(${PROJECT_NAME} git_revision) diff --git a/CMake/Includes/scm-generate_resource.cmake b/CMake/Includes/scm-generate_resource.cmake deleted file mode 100644 index 7608e44f..00000000 --- a/CMake/Includes/scm-generate_resource.cmake +++ /dev/null @@ -1,16 +0,0 @@ -list(APPEND CMAKE_MODULE_PATH "${SOURCE_DIR}") -include(scm_version) - -#if(WIN32 AND MINGW) - if(PROJ_UAC_ON) - set(UAC_FLAG "") - else() - set(UAC_FLAG "//") - endif() - - configure_file( - ${SOURCE_DIR}/${PROJECT_NAME}.rc.in - ${BINARY_DIR}/${PROJECT_NAME}.rc - @ONLY - ) -#endif() diff --git a/CMake/Includes/scm-generate_source.cmake b/CMake/Includes/scm-generate_source.cmake deleted file mode 100644 index ce224529..00000000 --- a/CMake/Includes/scm-generate_source.cmake +++ /dev/null @@ -1,8 +0,0 @@ -list(APPEND CMAKE_MODULE_PATH "${SOURCE_DIR}") -include(scm_version) - -configure_file( - ${SOURCE_DIR}/${PROJECT_NAME}.cpp.in - ${PROJECT_NAME}.cpp - @ONLY -) diff --git a/CMake/Includes/scm-generate_version.cmake b/CMake/Includes/scm-generate_version.cmake deleted file mode 100644 index dded1fc7..00000000 --- a/CMake/Includes/scm-generate_version.cmake +++ /dev/null @@ -1,41 +0,0 @@ -#create a pretty commit id using git -#uses 'git describe --tags --dirty', so tags are required in the repo -#create a tag with 'git tag ' and 'git push --tags' - -execute_process( - COMMAND ${GIT_EXECUTABLE} describe --tags --dirty - WORKING_DIRECTORY ${GIT_ROOT_DIR} - RESULT_VARIABLE res_var - OUTPUT_VARIABLE GIT_COM_ID -) -string(REPLACE "\n" "" GIT_COMMIT_ID ${GIT_COM_ID}) - -# check number of digits in version string -string(REPLACE "." ";" GIT_COMMIT_ID_VLIST ${GIT_COMMIT_ID}) -list(LENGTH GIT_COMMIT_ID_VLIST GIT_COMMIT_ID_VLIST_COUNT) - -# no.: major -string(REGEX REPLACE "^v([0-9]+)\\..*" "\\1" VERSION_MAJOR "${GIT_COMMIT_ID}") -# no.: minor -string(REGEX REPLACE "^v[0-9]+\\.([0-9]+).*" "\\1" VERSION_MINOR "${GIT_COMMIT_ID}") - -if(${GIT_COMMIT_ID_VLIST_COUNT} STREQUAL "2") - # no. patch - set(VERSION_PATCH "0") - # SHA1 string + git 'dirty' flag - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_SHA1 "${GIT_COMMIT_ID}") -else() - # no. patch - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.([0-9]+).*" "\\1" VERSION_PATCH "${GIT_COMMIT_ID}") - # SHA1 string + git 'dirty' flag - string(REGEX REPLACE "^v[0-9]+\\.[0-9]+\\.[0-9]+(.*)" "\\1" VERSION_SHA1 "${GIT_COMMIT_ID}") -endif() - -set(VERSION "${GIT_COMMIT_ID}") -message(STATUS "Version: ${GIT_COMMIT_ID}") - -configure_file( - ${SOURCE_DIR}/scm_version.cmake.in - ${SOURCE_DIR}/scm_version.cmake - @ONLY -) diff --git a/CMake/Includes/scm.cmake b/CMake/Includes/scm.cmake deleted file mode 100644 index caacac1d..00000000 --- a/CMake/Includes/scm.cmake +++ /dev/null @@ -1,63 +0,0 @@ -if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/.git) - add_custom_command( - OUTPUT scm_version.cmake - COMMAND ${CMAKE_COMMAND} - -D GIT_EXECUTABLE=${GIT_EXECUTABLE} - -D GIT_ROOT_DIR=${PROJECT_SOURCE_DIR} - -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} - -D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} - -P ${PROJECT_SOURCE_DIR}/CMake/Includes/scm-generate_version.cmake - COMMENT "Automatic version strings assembling" - VERBATIM - ) -endif() - -add_custom_command( - OUTPUT ${PROJECT_NAME}.cpp - DEPENDS scm_version.cmake - COMMAND ${CMAKE_COMMAND} - -D PROJECT_NAME=${PROJECT_NAME} - -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} - -D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} - - -D PRODUCT_NAME_SHORT=${PRODUCT_NAME_SHORT} - -D PRODUCT_NAME_LONG=${PRODUCT_NAME_LONG} - -D PRODUCT_NAME_COMPANY=${PRODUCT_NAME_COMPANY} - -D PRODUCT_NAME_COMPANY_DOMAIN=${PRODUCT_NAME_COMPANY_DOMAIN} - -D PRODUCT_NAME_COPYRIGHT=${PRODUCT_NAME_COPYRIGHT} - - -P ${PROJECT_SOURCE_DIR}/CMake/Includes/scm-generate_source.cmake - COMMENT "Automatic source code generation" - VERBATIM -) -#if(WIN32 AND MINGW) - add_custom_command( - OUTPUT ${PROJECT_NAME}.rc - DEPENDS scm_version.cmake - COMMAND ${CMAKE_COMMAND} - -D PROJECT_NAME=${PROJECT_NAME} - -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} - -D BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR} - - -D PRODUCT_NAME_SHORT=${PRODUCT_NAME_SHORT} - -D PRODUCT_NAME_LONG=${PRODUCT_NAME_LONG} - -D PRODUCT_NAME_COMPANY=${PRODUCT_NAME_COMPANY} - -D PRODUCT_NAME_COMPANY_DOMAIN=${PRODUCT_NAME_COMPANY_DOMAIN} - -D PRODUCT_NAME_COPYRIGHT=${PRODUCT_NAME_COPYRIGHT} - - -D PROJ_UAC_ON=${PROJ_UAC_ON} - - -P ${PROJECT_SOURCE_DIR}/CMake/Includes/scm-generate_resource.cmake - COMMENT "Automatic resource files generation" - VERBATIM - ) -#endif() - -## ??? -#add_custom_target(generate_cmake ALL -# DEPENDS ${PROJECT_NAME}.cpp ${PROJECT_NAME}.rc -# #DEPENDS scm_version.cmake -## DEPENDS version.cmake config.h config.cpp #openconnect-gui.rc -# COMMENT "generate '*'" -# VERBATIM -#) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2bd8a734..a7cbb557 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,11 @@ cmake_minimum_required(VERSION 3.5 FATAL_ERROR) project(openconnect-gui + VERSION 1.4.1 LANGUAGES CXX ) +message(STATUS "Building ${PROJECT_NAME} v${PROJECT_VERSION} [cmake]") + set(PRODUCT_NAME_SHORT "OpenConnect") set(PRODUCT_NAME_LONG "OpenConnect VPN client") set(PRODUCT_NAME_COMPANY "Red Hat") @@ -42,11 +45,10 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMake/Includes/") list(APPEND CMAKE_MODULE_PATH "${CMAKE_BINARY_DIR}/src/") find_package(Qt5 5.6 REQUIRED COMPONENTS Core Gui Widgets Network) -get_target_property(_qwindows_dll Qt5::QWindowsIntegrationPlugin LOCATION) - -if(IS_DIRECTORY ${PROJECT_SOURCE_DIR}/.git) - find_package(Git 2.0 REQUIRED) +if(WIN32 AND MINGW) + get_target_property(_qwindows_dll Qt5::QWindowsIntegrationPlugin LOCATION) endif() + include(clang-format) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) @@ -67,131 +69,126 @@ else() endif() add_subdirectory(src) +if(WIN32 AND MINGW) + add_subdirectory(nsis) +endif() -if(EXISTS ${CMAKE_SOURCE_DIR}/src/scm_version.cmake) - message(STATUS "Setting package...") - include(${CMAKE_SOURCE_DIR}/src/scm_version.cmake) - - message(STATUS "Version: ${PROJECT_VERSION}") - - if(WIN32 AND MINGW) - add_subdirectory(nsis) - endif() - - include(InstallRequiredSystemLibraries) - - # common CPacke variables - set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) - set(CPACK_PACKAGE_VENDOR ${PRODUCT_NAME_COMPANY}) - set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) - set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) - set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) - #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README) - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PRODUCT_NAME_LONG}) - #set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}) - set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PRODUCT_NAME_SHORT} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") - if(APPLE) - set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/src/images/mono_lock.icns) - endif() - set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) - #set(CPACK_RESOURCE_FILE_README ...) - #set(CPACK_RESOURCE_FILE_WELCOME ...) - if(WIN32 AND MINGW) - set(CPACK_GENERATOR "NSIS") - - set(CPACK_NSIS_INSTALLED_ICON_NAME "${PROJECT_NAME}.exe") - set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") - set(CPACK_NSIS_HELP_LINK "https:\\\\\\\\github.com\\\\openconnect\\\\openconnect-gui\\\\wiki\\\\FAQ") - set(CPACK_NSIS_URL_INFO_ABOUT "https:\\\\\\\\openconnect.github.io\\\\openconnect-gui") - set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") - set(CPACK_NSIS_MODIFY_PATH ON) - set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL OFF) - - set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\src\\\\${PROJECT_NAME}.ico") - set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\src\\\\${PROJECT_NAME}.ico") - - set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\header-openconnect.bmp) - set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\install-openconnect.bmp) - set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\install-openconnect.bmp) - - set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") - set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${PROJECT_NAME}.exe") - - set(CPACK_NSIS_MENU_LINKS - "https://openconnect.github.io/openconnect-gui/" "Homepage" - "https://github.com/openconnect/openconnect-gui/issues" "Issues" - "https://github.com/openconnect/openconnect-gui/wiki/FAQ" "FAQ" - ) - - # NSIS'es list of all components - set(CPACK_COMPONENTS_ALL App App_Console vpnc_script TAP_drivers VcRedist_libs) - - set(CPACK_COMPONENT_APP_REQUIRED on) - set(CPACK_COMPONENT_APP_DISPLAY_NAME "${PRODUCT_NAME_SHORT}") - set(CPACK_COMPONENT_APP_DESCRIPTION "${PRODUCT_NAME_LONG} GUI") - set(CPACK_COMPONENT_APP_GROUP "Application") - set(CPACK_COMPONENT_APP_INSTALL_TYPES Full AppOnly Standard) - - set(CPACK_COMPONENT_VPNC_SCRIPT_REQUIRED on) - set(CPACK_COMPONENT_VPNC_SCRIPT_DISPLAY_NAME "vpnc-script.js") - set(CPACK_COMPONENT_VPNC_SCRIPT_DESCRIPTION "vpnc helper script to set the routing and name service up") - set(CPACK_COMPONENT_VPNC_SCRIPT_GROUP "Application") - set(CPACK_COMPONENT_VPNC_SCRIPT_INSTALL_TYPES Full AppOnly Standard) - - set(CPACK_COMPONENT_TAP_DRIVERS_REQUIRED off) - set(CPACK_COMPONENT_TAP_DRIVERS_DISPLAY_NAME "TAP driver") - set(CPACK_COMPONENT_TAP_DRIVERS_DESCRIPTION "NDIS 6 driver for Windows (in case you're installing on Windows XP, \ - disable this option and install NDIS 5 drivers manually from https://openvpn.net)") - set(CPACK_COMPONENT_TAP_DRIVERS_GROUP "Drivers") - set(CPACK_COMPONENT_TAP_DRIVERS_INSTALL_TYPES Full Standard) - - set(CPACK_COMPONENT_VCREDIST_LIBS_REQUIRED off) - set(CPACK_COMPONENT_VCREDIST_LIBS_DISPLAY_NAME "vcredist") - set(CPACK_COMPONENT_VCREDIST_LIBS_DESCRIPTION "Visual C++ Redistributable Package for Visual Studio 2013") - set(CPACK_COMPONENT_VCREDIST_LIBS_GROUP "Drivers") - set(CPACK_COMPONENT_VCREDIST_LIBS_INSTALL_TYPES Full Standard) - - set(CPACK_COMPONENT_APP_CONSOLE_DISABLED on) - set(CPACK_COMPONENT_APP_CONSOLE_REQUIRED off) - set(CPACK_COMPONENT_APP_CONSOLE_DISPLAY_NAME "${PRODUCT_NAME_SHORT}") - set(CPACK_COMPONENT_APP_CONSOLE_DESCRIPTION "${PRODUCT_NAME_LONG} (console)") - set(CPACK_COMPONENT_APP_CONSOLE_GROUP "Application") - set(CPACK_COMPONENT_APP_CONSOLE_INSTALL_TYPES Full) - - # custom install command to populate vcredist & NDIS drivers - # vcredis: http://asawicki.info/news_1597_installing_visual_c_redistributable_package_from_command_line.html - list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait '\\\"$INSTDIR\\\\Drivers\\\\vcredist_x86.exe\\\" /install /quiet /norestart'") - list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait '\\\"$INSTDIR\\\\Drivers\\\\tap-windows.exe\\\" /S /norestart'") - string(REPLACE ";" "\n" CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}") - - # NSIS'es Runtime-group - set(CPACK_COMPONENT_GROUP_APPLICATION_DESCRIPTION "Main application and network configuration script") - set(CPACK_COMPONENT_GROUP_APPLICATION_EXPANDED on) - set(CPACK_COMPONENT_GROUP_DRIVERS_DESCRIPTION "Drivers") - set(CPACK_COMPONENT_GROUP_DRIVERS_EXPANDED on) - - # NSIS'es install types lists - set(CPACK_ALL_INSTALL_TYPES Full) - set(CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Full installation") - set(CPACK_INSTALL_TYPE_APPONLY_DISPLAY_NAME "Application only") - set(CPACK_INSTALL_TYPE_STANDARD_DISPLAY_NAME "Standard installation") - - # source code packaging - set(CPACK_SOURCE_GENERATOR "7Z") - set(CPACK_SOURCE_IGNORE_FILES "build-release/;/\.git/;\.swp$;\.gitignore$") - else() - set(CPACK_GENERATOR "DragNDrop") - - #set(CPACK_DMG_VOLUME_NAME ...) - #set(CPACK_DMG_FORMAT ...) - #set(CPACK_DMG_DS_STORE ...) - #set(CPACK_DMG_DS_STORE_SETUP_SCRIPT ...) - #set(CPACK_DMG_BACKGROUND_IMAGE ...) - #set(CPACK_DMG_SLA_DIR ...) - #set(CPACK_DMG_SLA_LANGUAGES ...) - endif() - set(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PRODUCT_NAME_LONG}") - set(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}") - - include(CPack) +include(git_revision_main) + +include(InstallRequiredSystemLibraries) + +# common CPacke variables +set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) +set(CPACK_PACKAGE_VENDOR ${PRODUCT_NAME_COMPANY}) +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) +#set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_SOURCE_DIR}/README) +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY ${PRODUCT_NAME_LONG}) +#set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}) +set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PRODUCT_NAME_SHORT} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") +if(APPLE) + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}/src/images/mono_lock.icns) endif() +set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt) +#set(CPACK_RESOURCE_FILE_README ...) +#set(CPACK_RESOURCE_FILE_WELCOME ...) +if(WIN32 AND MINGW) + set(CPACK_GENERATOR "NSIS") + + set(CPACK_NSIS_INSTALLED_ICON_NAME "${PROJECT_NAME}.exe") + set(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}") + set(CPACK_NSIS_HELP_LINK "https:\\\\\\\\github.com\\\\openconnect\\\\openconnect-gui\\\\wiki\\\\FAQ") + set(CPACK_NSIS_URL_INFO_ABOUT "https:\\\\\\\\openconnect.github.io\\\\openconnect-gui") + set(CPACK_NSIS_COMPRESSOR "/SOLID lzma") + set(CPACK_NSIS_MODIFY_PATH ON) + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL OFF) + + set(CPACK_NSIS_MUI_ICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\src\\\\${PROJECT_NAME}.ico") + set(CPACK_NSIS_MUI_UNIICON "${CMAKE_CURRENT_SOURCE_DIR}\\\\src\\\\${PROJECT_NAME}.ico") + + set(CPACK_PACKAGE_ICON ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\header-openconnect.bmp) + set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\install-openconnect.bmp) + set(CPACK_NSIS_MUI_UNWELCOMEFINISHPAGE_BITMAP ${CMAKE_CURRENT_SOURCE_DIR}\\\\nsis\\\\images\\\\install-openconnect.bmp) + + set(CPACK_NSIS_EXECUTABLES_DIRECTORY ".") + set(CPACK_NSIS_MUI_FINISHPAGE_RUN "${PROJECT_NAME}.exe") + + set(CPACK_NSIS_MENU_LINKS + "https://openconnect.github.io/openconnect-gui/" "Homepage" + "https://github.com/openconnect/openconnect-gui/issues" "Issues" + "https://github.com/openconnect/openconnect-gui/wiki/FAQ" "FAQ" + ) + + # NSIS'es list of all components + set(CPACK_COMPONENTS_ALL App App_Console vpnc_script TAP_drivers VcRedist_libs) + + set(CPACK_COMPONENT_APP_REQUIRED on) + set(CPACK_COMPONENT_APP_DISPLAY_NAME "${PRODUCT_NAME_SHORT}") + set(CPACK_COMPONENT_APP_DESCRIPTION "${PRODUCT_NAME_LONG} GUI") + set(CPACK_COMPONENT_APP_GROUP "Application") + set(CPACK_COMPONENT_APP_INSTALL_TYPES Full AppOnly Standard) + + set(CPACK_COMPONENT_VPNC_SCRIPT_REQUIRED on) + set(CPACK_COMPONENT_VPNC_SCRIPT_DISPLAY_NAME "vpnc-script.js") + set(CPACK_COMPONENT_VPNC_SCRIPT_DESCRIPTION "vpnc helper script to set the routing and name service up") + set(CPACK_COMPONENT_VPNC_SCRIPT_GROUP "Application") + set(CPACK_COMPONENT_VPNC_SCRIPT_INSTALL_TYPES Full AppOnly Standard) + + set(CPACK_COMPONENT_TAP_DRIVERS_REQUIRED off) + set(CPACK_COMPONENT_TAP_DRIVERS_DISPLAY_NAME "TAP driver") + set(CPACK_COMPONENT_TAP_DRIVERS_DESCRIPTION "NDIS 6 driver for Windows (in case you're installing on Windows XP, \ + disable this option and install NDIS 5 drivers manually from https://openvpn.net)") + set(CPACK_COMPONENT_TAP_DRIVERS_GROUP "Drivers") + set(CPACK_COMPONENT_TAP_DRIVERS_INSTALL_TYPES Full Standard) + + set(CPACK_COMPONENT_VCREDIST_LIBS_REQUIRED off) + set(CPACK_COMPONENT_VCREDIST_LIBS_DISPLAY_NAME "vcredist") + set(CPACK_COMPONENT_VCREDIST_LIBS_DESCRIPTION "Visual C++ Redistributable Package for Visual Studio 2013") + set(CPACK_COMPONENT_VCREDIST_LIBS_GROUP "Drivers") + set(CPACK_COMPONENT_VCREDIST_LIBS_INSTALL_TYPES Full Standard) + + set(CPACK_COMPONENT_APP_CONSOLE_DISABLED on) + set(CPACK_COMPONENT_APP_CONSOLE_REQUIRED off) + set(CPACK_COMPONENT_APP_CONSOLE_DISPLAY_NAME "${PRODUCT_NAME_SHORT}") + set(CPACK_COMPONENT_APP_CONSOLE_DESCRIPTION "${PRODUCT_NAME_LONG} (console)") + set(CPACK_COMPONENT_APP_CONSOLE_GROUP "Application") + set(CPACK_COMPONENT_APP_CONSOLE_INSTALL_TYPES Full) + + # custom install command to populate vcredist & NDIS drivers + # vcredis: http://asawicki.info/news_1597_installing_visual_c_redistributable_package_from_command_line.html + list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait '\\\"$INSTDIR\\\\Drivers\\\\vcredist_x86.exe\\\" /install /quiet /norestart'") + list(APPEND CPACK_NSIS_EXTRA_INSTALL_COMMANDS " ExecWait '\\\"$INSTDIR\\\\Drivers\\\\tap-windows.exe\\\" /S /norestart'") + string(REPLACE ";" "\n" CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}") + + # NSIS'es Runtime-group + set(CPACK_COMPONENT_GROUP_APPLICATION_DESCRIPTION "Main application and network configuration script") + set(CPACK_COMPONENT_GROUP_APPLICATION_EXPANDED on) + set(CPACK_COMPONENT_GROUP_DRIVERS_DESCRIPTION "Drivers") + set(CPACK_COMPONENT_GROUP_DRIVERS_EXPANDED on) + + # NSIS'es install types lists + set(CPACK_ALL_INSTALL_TYPES Full) + set(CPACK_INSTALL_TYPE_FULL_DISPLAY_NAME "Full installation") + set(CPACK_INSTALL_TYPE_APPONLY_DISPLAY_NAME "Application only") + set(CPACK_INSTALL_TYPE_STANDARD_DISPLAY_NAME "Standard installation") + + # source code packaging + #set(CPACK_SOURCE_PACKAGE_FILE_NAME ) + set(CPACK_SOURCE_GENERATOR "7Z") + set(CPACK_SOURCE_IGNORE_FILES "build-release/;/\.git/;\.swp$;\.gitignore$") +else() + set(CPACK_GENERATOR "DragNDrop") + + #set(CPACK_DMG_VOLUME_NAME ...) + #set(CPACK_DMG_FORMAT ...) + #set(CPACK_DMG_DS_STORE ...) + #set(CPACK_DMG_DS_STORE_SETUP_SCRIPT ...) + #set(CPACK_DMG_BACKGROUND_IMAGE ...) + #set(CPACK_DMG_SLA_DIR ...) + #set(CPACK_DMG_SLA_LANGUAGES ...) +endif() +set(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PRODUCT_NAME_LONG}") +set(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}") + +include(CPack) diff --git a/README.md b/README.md index 6e0cff9a..6f6986b9 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,17 @@ Look to [OpenConnect-GUI](http://openconnect.github.io/openconnect-gui/) project Newer or older versions may work... feel free tweak main CMakeLists.txt as you need. #### Fedora 24 -TODO... +Minimum of required packages to build this GUI should be installed by following commands: + + sudo dnf install cmake + sudo dnf install qt5-qtbase-devel + sudo dnf install gnutls-devel openconnect-devel + +##### Fedora 24 (MinGW) +Just try install following packages: + + sudo dnf install cmake + sudo dnf install mingw32-qt5-qtbase ### Compilation & package preparation Hints related to command line compilation and release package preparation @@ -74,6 +84,7 @@ The 'openconnect' binary and libraries incl. dependent libraries used in this pr sudo dnf install mingw32-gnutls mingw32-libxml2 sudo dnf install gcc libtool + sudo dnf install git p7zip mkdir work && cd work @@ -159,6 +170,9 @@ and package to deploy on windows development machine via these commands: 7za a pkg_"$(date)".7z pkg + cd stoken/build32 + sudo mingw32-make uninstall + echo "List of system-wide used packages versions:" rpm -qv \ mingw32-gnutls \ diff --git a/build_mingw@win.cmd b/build_mingw@win.cmd index f87c2d4e..143a44a4 100644 --- a/build_mingw@win.cmd +++ b/build_mingw@win.cmd @@ -20,7 +20,7 @@ echo Setting up environment for 'mingw32' usage... set PATH=C:\Dev\Qt\Tools\mingw492_32\bin;%PATH% echo Setting up environment for CMake usage... -set PATH="C:\Program Files (x86)\CMake\bin";%PATH% +set PATH="C:\Program Files\CMake\bin";%PATH% echo Setting up environment for 7Z usage... set PATH="C:\Program Files\7-Zip\";%PATH% diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 13ca8717..cce9eb89 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,3 @@ -include(scm) set(${PROJECT_NAME}_SRCS ${PROJECT_NAME}.cpp @@ -38,6 +37,22 @@ set(${PROJECT_NAME}_SRCS vpninfo.cpp vpninfo.h ) +set_source_files_properties( + ${PROJECT_NAME}.cpp + PROPERTIES + GENERATED true +) +set_source_files_properties( + build_timestamp.h + PROPERTIES + GENERATED true + HEADER_FILE_ONLY true +) +set_source_files_properties( + ${PROJECT_NAME}.rc + PROPERTIES + GENERATED true +) configure_file( config.h.in @@ -109,8 +124,8 @@ if(WIN32 AND MINGW) libz.dll.a ) endif() -if(APPLE) - target_link_libraries (${PROJECT_NAME} +if(UNIX) + target_link_libraries(${PROJECT_NAME} ${OPENCONNECT_LIBRARIES} ${GNUTLS_LIBRARY} ) diff --git a/src/dialog/mainwindow.cpp b/src/dialog/mainwindow.cpp index b52ae1f3..a4789a04 100644 --- a/src/dialog/mainwindow.cpp +++ b/src/dialog/mainwindow.cpp @@ -626,11 +626,12 @@ void MainWindow::on_connectClicked() query.setUrl(turl); /* ss is now deallocated by vpninfo */ - vpninfo = new VpnInfo(QString("%1 %2").arg(qApp->applicationName()).arg(qApp->applicationVersion()), ss, this); - if (vpninfo == nullptr) { + try { + vpninfo = new VpnInfo(QString("%1 %2").arg(qApp->applicationName()).arg(qApp->applicationVersion()), ss, this); + } catch (std::exception& ex) { QMessageBox::information(this, - qApp->applicationName(), - tr("There was an issue initializing the VPN.")); + qApp->applicationName(), + tr("There was an issue initializing the VPN ") + "(" + ex.what() + ")."); goto fail; } diff --git a/src/scm_version.cmake.in b/src/scm_version.cmake.in deleted file mode 100644 index 523993a2..00000000 --- a/src/scm_version.cmake.in +++ /dev/null @@ -1,6 +0,0 @@ -set(PROJECT_VERSION_MAJOR "@VERSION_MAJOR@") -set(PROJECT_VERSION_MINOR "@VERSION_MINOR@") -set(PROJECT_VERSION_PATCH "@VERSION_PATCH@") -#set(PROJECT_VERSION_TWEAK "@VERSION_TWEAK@") - -set(PROJECT_VERSION "@VERSION@") diff --git a/src/vpninfo.cpp b/src/vpninfo.cpp index 216c15b8..411a38a2 100644 --- a/src/vpninfo.cpp +++ b/src/vpninfo.cpp @@ -356,13 +356,13 @@ VpnInfo::VpnInfo(QString name, StoredServer* ss, MainWindow* m) this->vpninfo = openconnect_vpninfo_new(name.toLatin1().data(), validate_peer_cert, nullptr, process_auth_form, progress_vfn, this); if (this->vpninfo == nullptr) { - throw; + throw std::runtime_error("initial setup fails"); } this->cmd_fd = openconnect_setup_cmd_pipe(vpninfo); if (this->cmd_fd == INVALID_SOCKET) { m->updateProgressBar(QObject::tr("invalid socket")); - throw; + throw std::runtime_error("pipe setup fails"); } set_sock_block(this->cmd_fd); @@ -421,7 +421,16 @@ int VpnInfo::connect() openconnect_set_cafile(vpninfo, ca_file.toLatin1().data()); } - openconnect_set_reported_os(vpninfo, "win"); +#ifdef Q_OS_WIN32 + const QString osName{"win"}; +#elif Q_OS_OSX + const QString osName{"mac-intel"}; +#elif defined Q_OS_LINUX + const QString osName = QString("linux%1").arg(QSysInfo::buildCpuArchitecture() == "i386" ? "" : "-64").toStdString().c_str(); +#else +#error Define OS string of other platforms... +#endif + openconnect_set_reported_os(vpninfo, osName.toStdString().c_str()); ret = openconnect_obtain_cookie(vpninfo); if (ret != 0) { diff --git a/src/vpninfo.h b/src/vpninfo.h index 4d9f0003..1a49ea3c 100644 --- a/src/vpninfo.h +++ b/src/vpninfo.h @@ -23,6 +23,9 @@ #ifdef _WIN32 #include #endif +#ifdef __linux__ +#define SOCKET int +#endif class MainWindow; class StoredServer;