diff options
-rw-r--r-- | CMakeLists.txt | 16 | ||||
-rw-r--r-- | OWNCLOUD.cmake | 6 | ||||
-rw-r--r-- | cmake/modules/GetGitRevisionDescription.cmake | 123 | ||||
-rw-r--r-- | cmake/modules/GetGitRevisionDescription.cmake.in | 38 | ||||
-rw-r--r-- | config.h.in | 2 | ||||
-rw-r--r-- | src/mirall/application.cpp | 34 |
6 files changed, 214 insertions, 5 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index c5cb95568..32ec69ee0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,6 +15,22 @@ configure_file( ${CMAKE_SOURCE_DIR}/src/mirall/version.h.in "${CMAKE_CURRENT_BIN include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}/src/mirall/") include(GNUInstallDirs) + +include(GetGitRevisionDescription) +get_git_head_revision(GIT_REFSPEC GIT_SHA1) + +# if we cannot get it from git, directly try .tag (packages) +# this will work if the tar balls have been properly created +# via git-archive. +if (${GIT_SHA1} STREQUAL "GITDIR-NOTFOUND") + file(READ ${CMAKE_SOURCE_DIR}/.tag sha1_candidate) + string(REPLACE "\n" "" sha1_candidate ${sha1_candidate}) + if (NOT ${sha1_candidate} STREQUAL "$Format:%H$") + message("${sha1_candidate}") + set (GIT_SHA1 "${sha1_candidate}") + endif() +endif() + ## stupid, we should upstream this if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT CMAKE_INSTALL_SYSCONFDIR) set(CMAKE_INSTALL_SYSCONFDIR "/etc") diff --git a/OWNCLOUD.cmake b/OWNCLOUD.cmake index 8650a1f85..8e28f0524 100644 --- a/OWNCLOUD.cmake +++ b/OWNCLOUD.cmake @@ -1,7 +1,7 @@ set( APPLICATION_SHORTNAME "owncloud" ) set( APPLICATION_NAME "ownCloud" ) set( APPLICATION_EXECUTABLE "owncloud" ) -set( APPLICATION_DOMAIN "owncloud.org" ) -set( APPLICATION_VENDOR "ownCloud.org" ) +set( APPLICATION_DOMAIN "owncloud.com" ) +set( APPLICATION_VENDOR "ownCloud, Inc" ) set( THEME_CLASS "ownCloudTheme" ) -set( APPLICATION_REV_DOMAIN "org.owncloud.desktopclient" ) +set( APPLICATION_REV_DOMAIN "com.owncloud.desktopclient" ) diff --git a/cmake/modules/GetGitRevisionDescription.cmake b/cmake/modules/GetGitRevisionDescription.cmake new file mode 100644 index 000000000..1bf023008 --- /dev/null +++ b/cmake/modules/GetGitRevisionDescription.cmake @@ -0,0 +1,123 @@ +# - Returns a version string from Git +# +# These functions force a re-configure on each git commit so that you can +# trust the values of the variables in your build system. +# +# get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...]) +# +# Returns the refspec and sha hash of the current head revision +# +# git_describe(<var> [<additional arguments to git describe> ...]) +# +# Returns the results of git describe on the source tree, and adjusting +# the output so that it tests false if an error occurs. +# +# git_get_exact_tag(<var> [<additional arguments to git describe> ...]) +# +# Returns the results of git describe --exact-match on the source tree, +# and adjusting the output so that it tests false if there was no exact +# matching tag. +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +if(__get_git_revision_description) + return() +endif() +set(__get_git_revision_description YES) + +# We must run the following at "include" time, not at function call time, +# to find the path to this module rather than the path to a calling list file +get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) + +function(get_git_head_revision _refspecvar _hashvar) + set(GIT_PARENT_DIR "${CMAKE_SOURCE_DIR}") + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories + set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") + get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) + if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) + # We have reached the root directory, we are not in git + set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) + return() + endif() + set(GIT_DIR "${GIT_PARENT_DIR}/.git") + endwhile() + set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") + if(NOT EXISTS "${GIT_DATA}") + file(MAKE_DIRECTORY "${GIT_DATA}") + endif() + + if(NOT EXISTS "${GIT_DIR}/HEAD") + return() + endif() + set(HEAD_FILE "${GIT_DATA}/HEAD") + configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) + + configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" + "${GIT_DATA}/grabRef.cmake" + @ONLY) + include("${GIT_DATA}/grabRef.cmake") + + set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) + set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) +endfunction() + +function(git_describe _var) + if(NOT GIT_FOUND) + find_package(Git QUIET) + endif() + get_git_head_revision(refspec hash) + if(NOT GIT_FOUND) + set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) + return() + endif() + if(NOT hash) + set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) + return() + endif() + + # TODO sanitize + #if((${ARGN}" MATCHES "&&") OR + # (ARGN MATCHES "||") OR + # (ARGN MATCHES "\\;")) + # message("Please report the following error to the project!") + # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") + #endif() + + #message(STATUS "Arguments to execute_process: ${ARGN}") + + execute_process(COMMAND + "${GIT_EXECUTABLE}" + describe + ${hash} + ${ARGN} + WORKING_DIRECTORY + "${CMAKE_SOURCE_DIR}" + RESULT_VARIABLE + res + OUTPUT_VARIABLE + out + ERROR_QUIET + OUTPUT_STRIP_TRAILING_WHITESPACE) + if(NOT res EQUAL 0) + set(out "${out}-${res}-NOTFOUND") + endif() + + set(${_var} "${out}" PARENT_SCOPE) +endfunction() + +function(git_get_exact_tag _var) + git_describe(out --exact-match ${ARGN}) + set(${_var} "${out}" PARENT_SCOPE) +endfunction() diff --git a/cmake/modules/GetGitRevisionDescription.cmake.in b/cmake/modules/GetGitRevisionDescription.cmake.in new file mode 100644 index 000000000..888ce13aa --- /dev/null +++ b/cmake/modules/GetGitRevisionDescription.cmake.in @@ -0,0 +1,38 @@ +# +# Internal file for GetGitRevisionDescription.cmake +# +# Requires CMake 2.6 or newer (uses the 'function' command) +# +# Original Author: +# 2009-2010 Ryan Pavlik <rpavlik@iastate.edu> <abiryan@ryand.net> +# http://academic.cleardefinition.com +# Iowa State University HCI Graduate Program/VRAC +# +# Copyright Iowa State University 2009-2010. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +set(HEAD_HASH) + +file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) + +string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) +if(HEAD_CONTENTS MATCHES "ref") + # named branch + string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") + if(EXISTS "@GIT_DIR@/${HEAD_REF}") + configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) + elseif(EXISTS "@GIT_DIR@/logs/${HEAD_REF}") + configure_file("@GIT_DIR@/logs/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) + set(HEAD_HASH "${HEAD_REF}") + endif() +else() + # detached HEAD + configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) +endif() + +if(NOT HEAD_HASH) + file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) + string(STRIP "${HEAD_HASH}" HEAD_HASH) +endif() diff --git a/config.h.in b/config.h.in index ff40ddfba..c166bcec4 100644 --- a/config.h.in +++ b/config.h.in @@ -5,5 +5,7 @@ #cmakedefine WITH_CSYNC 1 #cmakedefine WITH_QTKEYCHAIN 1 +#cmakedefine GIT_SHA1 "@GIT_SHA1@" +#cmakedefine APPLICATION_DOMAIN @APPLICATION_DOMAIN@ #cmakedefine THEME_CLASS @THEME_CLASS@ #endif diff --git a/src/mirall/application.cpp b/src/mirall/application.cpp index a631a8d56..b441d3d24 100644 --- a/src/mirall/application.cpp +++ b/src/mirall/application.cpp @@ -33,6 +33,10 @@ #include "mirall/credentialstore.h" #include "mirall/logger.h" +// for version information +#include "config.h" +#include <csync.h> + #ifdef WITH_CSYNC #include "mirall/csyncfolder.h" #endif @@ -726,10 +730,36 @@ void Application::slotOpenLogBrowser() void Application::slotAbout() { + QString devString; +#ifdef GIT_SHA1 + const QString githubPrefix(QLatin1String( + "https://github.com/owncloud/mirall/commit/")); + const QString gitSha1(QLatin1String(GIT_SHA1)); + devString = tr("<p><small>Built from Git revision <a href=\"%1\">%2</a>" + " on %3, %4<br>using OCsync %5 and Qt %6.</small><p>") + .arg(githubPrefix+gitSha1).arg(gitSha1.left(6)) + .arg(__DATE__).arg(__TIME__) + .arg(MIRALL_STRINGIFY(LIBCSYNC_VERSION)) + .arg(QT_VERSION_STR); +#endif QMessageBox::about(0, tr("About %1").arg(_theme->appName()), - tr("%1 client, version %2\n\nCopyright 2012, the ownCloud developers.") + tr("<p><b>%1 Client Version %2</b></p>" + "<p><b>Authors</b>" + "<br><a href=\"mailto:danimo@owncloud.com\">" + "Daniel Molkentin</a>, ownCloud, Inc." + "<br><a href=\"mailto:freitag@owncloud.com\">" + "Klaas Freitag</a>, ownCloud, Inc." + "<br><br>Based on Mirall by Duncan Mac-Vicar P.</p>" + "<p>For more information visit <a href=\"%3\">%4</a>.</p>" + "%7" + ) .arg(_theme->appName()) - .arg(MIRALL_STRINGIFY(MIRALL_VERSION))); + .arg(MIRALL_STRINGIFY(MIRALL_VERSION)) + .arg("http://" MIRALL_STRINGIFY(APPLICATION_DOMAIN)) + .arg(MIRALL_STRINGIFY(APPLICATION_DOMAIN)) + .arg(devString) + ); + } /* |