Browse Source

Generate version header when configuring project

The basic idea is we create a version header template at
"src/base/version.h.in" and the build systems are expected to replace
strings that are enclosed with @ symbols and generate
"src/base/version.h" for other source files to consume/include.
adaptive-webui-19844
Chocobo1 4 years ago
parent
commit
c669401767
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
  1. 1
      .gitignore
  2. 19
      CMakeLists.txt
  3. 20
      cmake/Modules/MacroQbtCommonConfig.cmake
  4. 1
      src/app/CMakeLists.txt
  5. 1
      src/app/application.cpp
  6. 1
      src/app/main.cpp
  7. 1
      src/app/stacktracedialog.cpp
  8. 2
      src/base/CMakeLists.txt
  9. 3
      src/base/base.pri
  10. 1
      src/base/bittorrent/session.cpp
  11. 1
      src/base/bittorrent/torrentcreatorthread.cpp
  12. 1
      src/base/net/dnsupdater.cpp
  13. 37
      src/base/version.h.in
  14. 1
      src/gui/aboutdialog.cpp
  15. 1
      src/gui/mainwindow.cpp
  16. 1
      src/gui/programupdater.cpp
  17. 1
      src/qbittorrent.rc
  18. 1
      src/webui/api/appcontroller.cpp
  19. 15
      version.pri

1
.gitignore vendored

@ -4,6 +4,7 @@ src/qbittorrent
src/qbittorrent-nox src/qbittorrent-nox
src/release src/release
src/debug src/debug
src/base/version.h
CMakeLists.txt.user* CMakeLists.txt.user*
qbittorrent.pro.user* qbittorrent.pro.user*
conf.pri conf.pri

19
CMakeLists.txt

@ -51,12 +51,27 @@ elseif (MSVC)
feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON) feature_option(MSVC_RUNTIME_DYNAMIC "Use MSVC dynamic runtime library (-MD) instead of static (-MT)" ON)
endif() endif()
set(QBT_VER_STATUS "alpha1" CACHE STRING "Project status version. Should be empty for release builds.")
include(GNUInstallDirs) include(GNUInstallDirs)
add_subdirectory(src) add_subdirectory(src)
add_subdirectory(dist) add_subdirectory(dist)
# Generate version header
set(QBT_VER_STATUS "alpha1" CACHE STRING "Project status version. Should be empty for release builds.")
set(QBT_PROJECT_VERSION "${qBittorrent_VERSION_MAJOR}.${qBittorrent_VERSION_MINOR}.${qBittorrent_VERSION_PATCH}")
if (NOT ${qBittorrent_VERSION_TWEAK} EQUAL 0)
set(QBT_PROJECT_VERSION "${QBT_PROJECT_VERSION}.${qBittorrent_VERSION_TWEAK}")
endif()
set(QBT_PROJECT_VERSION "${QBT_PROJECT_VERSION}${QBT_VER_STATUS}")
file(READ "src/base/version.h.in" versionHeader)
string(REPLACE "@VER_MAJOR@" ${qBittorrent_VERSION_MAJOR} versionHeader "${versionHeader}")
string(REPLACE "@VER_MINOR@" ${qBittorrent_VERSION_MINOR} versionHeader "${versionHeader}")
string(REPLACE "@VER_BUGFIX@" ${qBittorrent_VERSION_PATCH} versionHeader "${versionHeader}")
string(REPLACE "@VER_BUILD@" ${qBittorrent_VERSION_TWEAK} versionHeader "${versionHeader}")
string(REPLACE "@PROJECT_VERSION@" ${QBT_PROJECT_VERSION} versionHeader "${versionHeader}")
file(WRITE "src/base/version.h" "${versionHeader}")
if (VERBOSE_CONFIGURE) if (VERBOSE_CONFIGURE)
feature_summary(WHAT ALL) feature_summary(WHAT ALL)
else() else()

20
cmake/Modules/MacroQbtCommonConfig.cmake

@ -7,17 +7,6 @@ macro(qbt_common_config)
# treat value specified by the CXX_STANDARD target property as a requirement by default # treat value specified by the CXX_STANDARD target property as a requirement by default
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
# these definitions are only needed for calls to
# lt::generate_fingerprint and for the qbittorrent.rc file on Windows
add_library(qbt_version_definitions INTERFACE)
target_compile_definitions(qbt_version_definitions INTERFACE
QBT_VERSION_MAJOR=${qBittorrent_VERSION_MAJOR}
QBT_VERSION_MINOR=${qBittorrent_VERSION_MINOR}
QBT_VERSION_BUGFIX=${qBittorrent_VERSION_PATCH}
QBT_VERSION_BUILD=${qBittorrent_VERSION_TWEAK}
)
add_library(qbt_common_cfg INTERFACE) add_library(qbt_common_cfg INTERFACE)
# Full C++ 17 support is required # Full C++ 17 support is required
@ -27,16 +16,7 @@ macro(qbt_common_config)
cxx_std_17 cxx_std_17
) )
set(QBT_PROJECT_VERSION "${qBittorrent_VERSION_MAJOR}.${qBittorrent_VERSION_MINOR}.${qBittorrent_VERSION_PATCH}")
if (NOT ${qBittorrent_VERSION_TWEAK} EQUAL 0)
set(QBT_PROJECT_VERSION "${QBT_PROJECT_VERSION}.${qBittorrent_VERSION_TWEAK}")
endif()
set(QBT_FULL_VERSION "${QBT_PROJECT_VERSION}${QBT_VER_STATUS}")
target_compile_definitions(qbt_common_cfg INTERFACE target_compile_definitions(qbt_common_cfg INTERFACE
QBT_VERSION="v${QBT_FULL_VERSION}"
QBT_VERSION_2="${QBT_FULL_VERSION}"
QT_DEPRECATED_WARNINGS QT_DEPRECATED_WARNINGS
QT_NO_CAST_TO_ASCII QT_NO_CAST_TO_ASCII
QT_NO_CAST_FROM_BYTEARRAY QT_NO_CAST_FROM_BYTEARRAY

1
src/app/CMakeLists.txt

@ -61,7 +61,6 @@ target_sources(qbt_app PRIVATE
target_link_libraries(qbt_app PRIVATE target_link_libraries(qbt_app PRIVATE
qbt_base qbt_base
qbt_version_definitions
) )
set_target_properties(qbt_app PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}") set_target_properties(qbt_app PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")

1
src/app/application.cpp

@ -81,6 +81,7 @@
#include "base/utils/fs.h" #include "base/utils/fs.h"
#include "base/utils/misc.h" #include "base/utils/misc.h"
#include "base/utils/string.h" #include "base/utils/string.h"
#include "base/version.h"
#include "applicationinstancemanager.h" #include "applicationinstancemanager.h"
#include "filelogger.h" #include "filelogger.h"

1
src/app/main.cpp

@ -78,6 +78,7 @@ Q_IMPORT_PLUGIN(QICOPlugin)
#include "base/preferences.h" #include "base/preferences.h"
#include "base/profile.h" #include "base/profile.h"
#include "base/version.h"
#include "application.h" #include "application.h"
#include "cmdoptions.h" #include "cmdoptions.h"
#include "upgrade.h" #include "upgrade.h"

1
src/app/stacktracedialog.cpp

@ -32,6 +32,7 @@
#include <QString> #include <QString>
#include "base/utils/misc.h" #include "base/utils/misc.h"
#include "base/version.h"
#include "ui_stacktracedialog.h" #include "ui_stacktracedialog.h"
StacktraceDialog::StacktraceDialog(QWidget *parent) StacktraceDialog::StacktraceDialog(QWidget *parent)

2
src/base/CMakeLists.txt

@ -87,6 +87,7 @@ add_library(qbt_base STATIC
utils/random.h utils/random.h
utils/string.h utils/string.h
utils/version.h utils/version.h
version.h
# sources # sources
asyncfilestorage.cpp asyncfilestorage.cpp
@ -167,7 +168,6 @@ target_link_libraries(qbt_base
PRIVATE PRIVATE
OpenSSL::Crypto OpenSSL::SSL OpenSSL::Crypto OpenSSL::SSL
ZLIB::ZLIB ZLIB::ZLIB
qbt_version_definitions
PUBLIC PUBLIC
LibtorrentRasterbar::torrent-rasterbar LibtorrentRasterbar::torrent-rasterbar
Qt5::Core Qt5::Network Qt5::Xml Qt5::Core Qt5::Network Qt5::Xml

3
src/base/base.pri

@ -86,7 +86,8 @@ HEADERS += \
$$PWD/utils/password.h \ $$PWD/utils/password.h \
$$PWD/utils/random.h \ $$PWD/utils/random.h \
$$PWD/utils/string.h \ $$PWD/utils/string.h \
$$PWD/utils/version.h $$PWD/utils/version.h \
$$PWD/version.h
SOURCES += \ SOURCES += \
$$PWD/asyncfilestorage.cpp \ $$PWD/asyncfilestorage.cpp \

1
src/base/bittorrent/session.cpp

@ -85,6 +85,7 @@
#include "base/utils/misc.h" #include "base/utils/misc.h"
#include "base/utils/net.h" #include "base/utils/net.h"
#include "base/utils/random.h" #include "base/utils/random.h"
#include "base/version.h"
#include "bandwidthscheduler.h" #include "bandwidthscheduler.h"
#include "common.h" #include "common.h"
#include "customstorage.h" #include "customstorage.h"

1
src/base/bittorrent/torrentcreatorthread.cpp

@ -45,6 +45,7 @@
#include "base/utils/fs.h" #include "base/utils/fs.h"
#include "base/utils/io.h" #include "base/utils/io.h"
#include "base/utils/string.h" #include "base/utils/string.h"
#include "base/version.h"
#include "ltunderlyingtype.h" #include "ltunderlyingtype.h"
namespace namespace

1
src/base/net/dnsupdater.cpp

@ -34,6 +34,7 @@
#include "base/logger.h" #include "base/logger.h"
#include "base/net/downloadmanager.h" #include "base/net/downloadmanager.h"
#include "base/version.h"
using namespace Net; using namespace Net;

37
src/base/version.h.in

@ -0,0 +1,37 @@
/*
* Bittorrent Client using Qt and libtorrent.
* Copyright (C) 2021 Mike Tzou (Chocobo1)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* In addition, as a special exception, the copyright holders give permission to
* link this program with the OpenSSL project's "OpenSSL" library (or with
* modified versions of it that use the same license as the "OpenSSL" library),
* and distribute the linked executables. You must obey the GNU General Public
* License in all respects for all of the code used other than "OpenSSL". If you
* modify file(s), you may extend this exception to your version of the file(s),
* but you are not obligated to do so. If you do not wish to do so, delete this
* exception statement from your version.
*/
#pragma once
#define QBT_VERSION_MAJOR @VER_MAJOR@
#define QBT_VERSION_MINOR @VER_MINOR@
#define QBT_VERSION_BUGFIX @VER_BUGFIX@
#define QBT_VERSION_BUILD @VER_BUILD@
#define QBT_VERSION "v@PROJECT_VERSION@"
#define QBT_VERSION_2 "@PROJECT_VERSION@"

1
src/gui/aboutdialog.cpp

@ -32,6 +32,7 @@
#include "base/unicodestrings.h" #include "base/unicodestrings.h"
#include "base/utils/misc.h" #include "base/utils/misc.h"
#include "base/version.h"
#include "ui_aboutdialog.h" #include "ui_aboutdialog.h"
#include "uithememanager.h" #include "uithememanager.h"
#include "utils.h" #include "utils.h"

1
src/gui/mainwindow.cpp

@ -70,6 +70,7 @@
#include "base/utils/fs.h" #include "base/utils/fs.h"
#include "base/utils/misc.h" #include "base/utils/misc.h"
#include "base/utils/password.h" #include "base/utils/password.h"
#include "base/version.h"
#include "aboutdialog.h" #include "aboutdialog.h"
#include "addnewtorrentdialog.h" #include "addnewtorrentdialog.h"
#include "autoexpandabledialog.h" #include "autoexpandabledialog.h"

1
src/gui/programupdater.cpp

@ -44,6 +44,7 @@
#endif #endif
#include "base/net/downloadmanager.h" #include "base/net/downloadmanager.h"
#include "base/version.h"
namespace namespace
{ {

1
src/qbittorrent.rc

@ -4,6 +4,7 @@ IDI_ICON1 ICON "icons\qbittorrent.ico"
IDI_ICON2 ICON "icons\qbittorrent_file.ico" IDI_ICON2 ICON "icons\qbittorrent_file.ico"
#include <windows.h> #include <windows.h>
#include "base/version.h"
#define VER_FILEVERSION QBT_VERSION_MAJOR,QBT_VERSION_MINOR,QBT_VERSION_BUGFIX,QBT_VERSION_BUILD #define VER_FILEVERSION QBT_VERSION_MAJOR,QBT_VERSION_MINOR,QBT_VERSION_BUGFIX,QBT_VERSION_BUILD
#define VER_FILEVERSION_STR QBT_VERSION #define VER_FILEVERSION_STR QBT_VERSION

1
src/webui/api/appcontroller.cpp

@ -57,6 +57,7 @@
#include "base/utils/net.h" #include "base/utils/net.h"
#include "base/utils/password.h" #include "base/utils/password.h"
#include "base/utils/string.h" #include "base/utils/string.h"
#include "base/version.h"
#include "../webapplication.h" #include "../webapplication.h"
void AppController::webapiVersionAction() void AppController::webapiVersionAction()

15
version.pri

@ -17,10 +17,11 @@ PROJECT_VERSION = $${VER_MAJOR}.$${VER_MINOR}.$${VER_BUGFIX}
PROJECT_VERSION = $${PROJECT_VERSION}$${VER_STATUS} PROJECT_VERSION = $${PROJECT_VERSION}$${VER_STATUS}
DEFINES += QBT_VERSION_MAJOR=$${VER_MAJOR} # Generate version header
DEFINES += QBT_VERSION_MINOR=$${VER_MINOR} versionHeader = $$cat(src/base/version.h.in, blob)
DEFINES += QBT_VERSION_BUGFIX=$${VER_BUGFIX} versionHeader = $$replace(versionHeader, "@VER_MAJOR@", $$VER_MAJOR)
DEFINES += QBT_VERSION_BUILD=$${VER_BUILD} versionHeader = $$replace(versionHeader, "@VER_MINOR@", $$VER_MINOR)
versionHeader = $$replace(versionHeader, "@VER_BUGFIX@", $$VER_BUGFIX)
DEFINES += QBT_VERSION=\\\"v$${PROJECT_VERSION}\\\" versionHeader = $$replace(versionHeader, "@VER_BUILD@", $$VER_BUILD)
DEFINES += QBT_VERSION_2=\\\"$${PROJECT_VERSION}\\\" versionHeader = $$replace(versionHeader, "@PROJECT_VERSION@", $$PROJECT_VERSION)
write_file(src/base/version.h, versionHeader)

Loading…
Cancel
Save