GODT-1675: Pass app name and vendor from topmost Makefile.

This commit is contained in:
Jakub
2022-08-19 10:58:46 +02:00
parent 264c2b2f90
commit 35d2cc9be7
12 changed files with 84 additions and 29 deletions

View File

@ -13,6 +13,8 @@ ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
# Keep version hardcoded so app build works also without Git repository. # Keep version hardcoded so app build works also without Git repository.
BRIDGE_APP_VERSION?=2.3.0+git BRIDGE_APP_VERSION?=2.3.0+git
APP_VERSION:=${BRIDGE_APP_VERSION} APP_VERSION:=${BRIDGE_APP_VERSION}
APP_FULL_NAME:=Proton Bridge
APP_VENDOR:=Proton AG
SRC_ICO:=bridge.ico SRC_ICO:=bridge.ico
SRC_ICNS:=Bridge.icns SRC_ICNS:=Bridge.icns
SRC_SVG:=bridge.svg SRC_SVG:=bridge.svg
@ -23,7 +25,8 @@ BUILD_TIME:=$(shell date +%FT%T%z)
BUILD_FLAGS:=-tags='${BUILD_TAGS}' BUILD_FLAGS:=-tags='${BUILD_TAGS}'
BUILD_FLAGS_LAUNCHER:=${BUILD_FLAGS} BUILD_FLAGS_LAUNCHER:=${BUILD_FLAGS}
BUILD_FLAGS_GUI:=-tags='${BUILD_TAGS} build_qt' BUILD_FLAGS_GUI:=-tags='${BUILD_TAGS} build_qt'
GO_LDFLAGS:=$(addprefix -X github.com/ProtonMail/proton-bridge/v2/internal/constants.,Version=${APP_VERSION} Revision=${REVISION} BuildTime=${BUILD_TIME}) GO_LDFLAGS:=$(addprefix -X github.com/ProtonMail/proton-bridge/v2/internal/constants., Version=${APP_VERSION} Revision=${REVISION} BuildTime=${BUILD_TIME})
GO_LDFLAGS+=-X "github.com/ProtonMail/proton-bridge/v2/internal/constants.FullAppName=${APP_FULL_NAME}"
ifneq "${BUILD_LDFLAGS}" "" ifneq "${BUILD_LDFLAGS}" ""
GO_LDFLAGS+=${BUILD_LDFLAGS} GO_LDFLAGS+=${BUILD_LDFLAGS}
endif endif
@ -33,7 +36,7 @@ ifeq "${TARGET_OS}" "windows"
endif endif
BUILD_FLAGS+=-ldflags '${GO_LDFLAGS}' BUILD_FLAGS+=-ldflags '${GO_LDFLAGS}'
BUILD_FLAGS_GUI+=-ldflags '${GO_LDFLAGS}' BUILD_FLAGS_GUI+=-ldflags "${GO_LDFLAGS}"
BUILD_FLAGS_LAUNCHER+=-ldflags '${GO_LDFLAGS_LAUNCHER}' BUILD_FLAGS_LAUNCHER+=-ldflags '${GO_LDFLAGS_LAUNCHER}'
DEPLOY_DIR:=cmd/${TARGET_CMD}/deploy DEPLOY_DIR:=cmd/${TARGET_CMD}/deploy
@ -128,6 +131,8 @@ ${DEPLOY_DIR}/windows: ${EXE_TARGET} build-launcher
${EXE_TARGET}: check-build-essentials ${EXE_NAME} ${EXE_TARGET}: check-build-essentials ${EXE_NAME}
# TODO: resource.syso for windows # TODO: resource.syso for windows
cd internal/frontend/bridge-gui/bridge-gui && \ cd internal/frontend/bridge-gui/bridge-gui && \
BRIDGE_APP_FULL_NAME="${APP_FULL_NAME}" \
BRIDGE_VENDOR="${APP_VENDOR}" \
BRIDGE_APP_VERSION=${APP_VERSION} \ BRIDGE_APP_VERSION=${APP_VERSION} \
BRIDGE_REVISION=${REVISION} \ BRIDGE_REVISION=${REVISION} \
BRIDGE_BUILD_TIME=${BUILD_TIME} \ BRIDGE_BUILD_TIME=${BUILD_TIME} \

View File

@ -39,11 +39,11 @@ import (
"github.com/ProtonMail/proton-bridge/v2/internal/app/base" "github.com/ProtonMail/proton-bridge/v2/internal/app/base"
"github.com/ProtonMail/proton-bridge/v2/internal/app/bridge" "github.com/ProtonMail/proton-bridge/v2/internal/app/bridge"
"github.com/ProtonMail/proton-bridge/v2/internal/constants"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
const ( const (
appName = "Proton Mail Bridge"
appUsage = "Proton Mail IMAP and SMTP Bridge" appUsage = "Proton Mail IMAP and SMTP Bridge"
configName = "bridge" configName = "bridge"
updateURLName = "bridge" updateURLName = "bridge"
@ -53,7 +53,7 @@ const (
func main() { func main() {
base, err := base.New( base, err := base.New(
appName, constants.FullAppName,
appUsage, appUsage,
configName, configName,
updateURLName, updateURLName,

View File

@ -24,6 +24,9 @@ const VendorName = "protonmail"
//nolint:gochecknoglobals //nolint:gochecknoglobals
var ( var (
// Version of the build.
FullAppName = ""
// Version of the build. // Version of the build.
Version = "" Version = ""

View File

@ -28,6 +28,20 @@ include(../BridgeSetup.cmake)
project(bridge-gui LANGUAGES CXX) project(bridge-gui LANGUAGES CXX)
if (NOT DEFINED BRIDGE_APP_FULL_NAME)
message(FATAL_ERROR "BRIDGE_APP_FULL_NAME is not defined.")
else()
message(STATUS "App name is ${BRIDGE_APP_FULL_NAME}")
endif()
if (NOT DEFINED BRIDGE_VENDOR)
message(FATAL_ERROR "BRIDGE_VENDOR is not defined.")
else()
message(STATUS "App vendor is ${BRIDGE_VENDOR}")
endif()
if (NOT DEFINED BRIDGE_APP_VERSION) if (NOT DEFINED BRIDGE_APP_VERSION)
message(FATAL_ERROR "BRIDGE_APP_VERSION is not defined.") message(FATAL_ERROR "BRIDGE_APP_VERSION is not defined.")
else() else()

View File

@ -21,6 +21,7 @@
#include "DockIcon/DockIcon.h" #include "DockIcon/DockIcon.h"
#include "Version.h"
#include "UserList.h" #include "UserList.h"
#include <bridgepp/GRPC/GRPCClient.h> #include <bridgepp/GRPC/GRPCClient.h>
#include <bridgepp/GRPC/GRPCUtils.h> #include <bridgepp/GRPC/GRPCUtils.h>
@ -57,6 +58,8 @@ public: // Qt/QML properties. Note that the NOTIFY-er signal is required even fo
Q_PROPERTY(QUrl releaseNotesLink READ releaseNotesLink NOTIFY releaseNotesLinkChanged) // _ core.QUrl `property:"releaseNotesLink"` Q_PROPERTY(QUrl releaseNotesLink READ releaseNotesLink NOTIFY releaseNotesLinkChanged) // _ core.QUrl `property:"releaseNotesLink"`
Q_PROPERTY(QUrl dependencyLicensesLink READ dependencyLicensesLink NOTIFY dependencyLicensesLinkChanged) // _ core.QUrl `property:"dependencyLicensesLink"` Q_PROPERTY(QUrl dependencyLicensesLink READ dependencyLicensesLink NOTIFY dependencyLicensesLinkChanged) // _ core.QUrl `property:"dependencyLicensesLink"`
Q_PROPERTY(QUrl landingPageLink READ landingPageLink NOTIFY landingPageLinkChanged) // _ core.QUrl `property:"landingPageLink"` Q_PROPERTY(QUrl landingPageLink READ landingPageLink NOTIFY landingPageLinkChanged) // _ core.QUrl `property:"landingPageLink"`
Q_PROPERTY(QString appname READ appname NOTIFY appnameChanged) // _ string `property:"version"`
Q_PROPERTY(QString vendor READ vendor NOTIFY vendorChanged) // _ string `property:"version"`
Q_PROPERTY(QString version READ version NOTIFY versionChanged) // _ string `property:"version"` Q_PROPERTY(QString version READ version NOTIFY versionChanged) // _ string `property:"version"`
Q_PROPERTY(QString hostname READ hostname NOTIFY hostnameChanged) // _ string `property:"hostname"` Q_PROPERTY(QString hostname READ hostname NOTIFY hostnameChanged) // _ string `property:"hostname"`
Q_PROPERTY(bool isAutostartOn READ isAutostartOn NOTIFY isAutostartOnChanged) // _ bool `property:"isAutostartOn"` Q_PROPERTY(bool isAutostartOn READ isAutostartOn NOTIFY isAutostartOnChanged) // _ bool `property:"isAutostartOn"`
@ -86,6 +89,8 @@ public: // Qt/QML properties. Note that the NOTIFY-er signal is required even fo
QUrl releaseNotesLink() const { QUrl link; app().grpc().releaseNotesPageLink(link); return link; } QUrl releaseNotesLink() const { QUrl link; app().grpc().releaseNotesPageLink(link); return link; }
QUrl dependencyLicensesLink() const { QUrl link; app().grpc().dependencyLicensesLink(link); return link; } QUrl dependencyLicensesLink() const { QUrl link; app().grpc().dependencyLicensesLink(link); return link; }
QUrl landingPageLink() const { QUrl link; app().grpc().landingPageLink(link); return link; } QUrl landingPageLink() const { QUrl link; app().grpc().landingPageLink(link); return link; }
QString appname() const { return QString(PROJECT_FULL_NAME); }
QString vendor() const { return QString(PROJECT_VENDOR); }
QString version() const { QString version; app().grpc().version(version); return version; } QString version() const { QString version; app().grpc().version(version); return version; }
QString hostname() const { QString hostname; app().grpc().hostname(hostname); return hostname; } QString hostname() const { QString hostname; app().grpc().hostname(hostname); return hostname; }
bool isAutostartOn() const { bool v; app().grpc().isAutostartOn(v); return v; }; bool isAutostartOn() const { bool v; app().grpc().isAutostartOn(v); return v; };
@ -121,6 +126,8 @@ signals: // Signal used by the Qt property system. Many of them are unused but r
void releaseNotesLinkChanged(QUrl const &link); void releaseNotesLinkChanged(QUrl const &link);
void dependencyLicensesLinkChanged(QUrl const &link); void dependencyLicensesLinkChanged(QUrl const &link);
void landingPageLinkChanged(QUrl const &link); void landingPageLinkChanged(QUrl const &link);
void appnameChanged(QString const &appname);
void vendorChanged(QString const &vendor);
void versionChanged(QString const &version); void versionChanged(QString const &version);
void currentEmailClientChanged(QString const &email); void currentEmailClientChanged(QString const &email);
void currentKeychainChanged(QString const &keychain); void currentKeychainChanged(QString const &keychain);

View File

@ -19,6 +19,8 @@
#ifndef BRIDGE_GUI_VERSION_H #ifndef BRIDGE_GUI_VERSION_H
#define BRIDGE_GUI_VERSION_H #define BRIDGE_GUI_VERSION_H
#define PROJECT_FULL_NAME "@BRIDGE_APP_FULL_NAME@"
#define PROJECT_VENDOR "@BRIDGE_VENDOR@"
#define PROJECT_VER "@BRIDGE_APP_VERSION@" #define PROJECT_VER "@BRIDGE_APP_VERSION@"
#define PROJECT_REVISION "@BRIDGE_REVISION@" #define PROJECT_REVISION "@BRIDGE_REVISION@"
#define PROJECT_BUILD_TIME "@BRIDGE_BUILD_TIME@" #define PROJECT_BUILD_TIME "@BRIDGE_BUILD_TIME@"

View File

@ -25,22 +25,23 @@ fi
BRIDGE_REPO_ROOT="../../../.." BRIDGE_REPO_ROOT="../../../.."
BRIDGE_INSTALL_PATH=${BRIDGE_INSTALL_PATH:-deploy} BRIDGE_INSTALL_PATH=${BRIDGE_INSTALL_PATH:-deploy}
BRIDGE_APP_VERSION=${BRIDGE_APP_VERSION:-$("${BRIDGE_REPO_ROOT}/utils/bridge_app_version.sh")} BRIDGE_APP_VERSION=${BRIDGE_APP_VERSION:-$("${BRIDGE_REPO_ROOT}/utils/bridge_app_version.sh")}
BRIDGE_VENDOR=${BRIDGE_VENDOR:-"Proton AG"}
BUILD_CONFIG=${BRIDGE_GUI_BUILD_CONFIG:-Debug} BUILD_CONFIG=${BRIDGE_GUI_BUILD_CONFIG:-Debug}
BUILD_DIR=$(echo "./cmake-build-${BUILD_CONFIG}" | tr '[:upper:]' '[:lower:]') BUILD_DIR=$(echo "./cmake-build-${BUILD_CONFIG}" | tr '[:upper:]' '[:lower:]')
realpath() { realpath() {
START_DIR=$PWD START_DIR=$PWD
BASENAME="$(basename "$1")" BASENAME="$(basename "$1")"
cd "$(dirname "$1")" || exit cd "$(dirname "$1")" || exit
LNK="$(readlink "$BASENAME")" LNK="$(readlink "$BASENAME")"
while [ "$LNK" ]; do while [ "$LNK" ]; do
BASENAME="$(basename "$LNK")" BASENAME="$(basename "$LNK")"
cd "$(dirname "$LNK")" || exit cd "$(dirname "$LNK")" || exit
LNK="$(readlink "$BASENAME")" LNK="$(readlink "$BASENAME")"
done done
REALPATH="$PWD/$BASENAME" REALPATH="$PWD/$BASENAME"
cd "$START_DIR" || exit cd "$START_DIR" || exit
echo "$REALPATH" echo "$REALPATH"
} }
check_exit() { check_exit() {
@ -86,6 +87,8 @@ ${VCPKG_EXE} upgrade --no-dry-run
cmake \ cmake \
-DCMAKE_BUILD_TYPE="${BUILD_CONFIG}" \ -DCMAKE_BUILD_TYPE="${BUILD_CONFIG}" \
-DBRIDGE_APP_FULL_NAME="${BRIDGE_APP_FULL_NAME}" \
-DBRIDGE_VENDOR="${BRIDGE_VENDOR}" \
-DBRIDGE_APP_VERSION="${BRIDGE_APP_VERSION}" \ -DBRIDGE_APP_VERSION="${BRIDGE_APP_VERSION}" \
-G Ninja \ -G Ninja \
-S . \ -S . \

View File

@ -30,7 +30,7 @@ using namespace bridgepp;
namespace namespace
{ {
/// \brief The file extension for the bridge executable file. /// \brief The file extension for the bridge executable file.
#ifdef Q_OS_WIN32 #ifdef Q_OS_WIN32
QString const exeSuffix = ".exe"; QString const exeSuffix = ".exe";
#else #else
@ -62,12 +62,12 @@ void initQtApplication()
if ((!qsgInfo.isEmpty()) && (qsgInfo != "0")) if ((!qsgInfo.isEmpty()) && (qsgInfo != "0"))
QLoggingCategory::setFilterRules("qt.scenegraph.general=true"); QLoggingCategory::setFilterRules("qt.scenegraph.general=true");
QGuiApplication::setApplicationName("Proton Mail Bridge"); QGuiApplication::setApplicationName(PROJECT_FULL_NAME);
QGuiApplication::setApplicationVersion(PROJECT_VER); QGuiApplication::setApplicationVersion(PROJECT_VER);
QGuiApplication::setOrganizationName("Proton AG"); QGuiApplication::setOrganizationName(PROJECT_VENDOR);
QGuiApplication::setOrganizationDomain("proton.ch"); QGuiApplication::setOrganizationDomain("proton.ch");
QGuiApplication::setQuitOnLastWindowClosed(false); QGuiApplication::setQuitOnLastWindowClosed(false);
} }
//**************************************************************************************************************************************************** //****************************************************************************************************************************************************
@ -147,7 +147,7 @@ void parseArguments(int argc, char *argv[], QStringList& args, QString& launcher
launcher = QString::fromLocal8Bit(argv[0]); launcher = QString::fromLocal8Bit(argv[0]);
// for unknown reasons, on Windows QCoreApplication::arguments() frequently returns an empty list, which is incorrect, so we rebuild the argument // for unknown reasons, on Windows QCoreApplication::arguments() frequently returns an empty list, which is incorrect, so we rebuild the argument
// list from the original argc and argv values. // list from the original argc and argv values.
for (int i = 1; i < argc; i++) { for (int i = 1; i < argc; i++) {
QString const &arg = QString::fromLocal8Bit(argv[i]); QString const &arg = QString::fromLocal8Bit(argv[i]);
// we can't use QCommandLineParser here since it will fail on unknown options. // we can't use QCommandLineParser here since it will fail on unknown options.
// Arguments may contain some bridge flags. // Arguments may contain some bridge flags.
@ -274,9 +274,9 @@ int main(int argc, char *argv[])
{ {
app().log().debug(QString("Monitoring Bridge PID : %1").arg(status.pid)); app().log().debug(QString("Monitoring Bridge PID : %1").arg(status.pid));
connection = QObject::connect(bridgeMonitor, &ProcessMonitor::processExited, [&](int returnCode) { connection = QObject::connect(bridgeMonitor, &ProcessMonitor::processExited, [&](int returnCode) {
bridgeExited = true;// clazy:exclude=lambda-in-connect bridgeExited = true;// clazy:exclude=lambda-in-connect
qGuiApp->exit(returnCode); qGuiApp->exit(returnCode);
}); });
} }
} }

View File

@ -33,7 +33,7 @@ QtObject {
return Math.max(lower_limit, Math.min(upper_limit, num)) return Math.max(lower_limit, Math.min(upper_limit, num))
} }
property var title: "Proton Mail Bridge" property var title: Backend.appname
property Notifications _notifications: Notifications { property Notifications _notifications: Notifications {
id: notifications id: notifications

View File

@ -108,8 +108,10 @@ SettingsView {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
text: qsTr("Proton Mail Bridge v%1<br>© 2021 Proton AG<br>%2 %3<br>%4"). text: qsTr("%1 v%2<br>© 2021 %3<br>%4 %5<br>%6").
arg(Backend.appname).
arg(Backend.version). arg(Backend.version).
arg(Backend.vendor).
arg(link(Backend.licensePath, qsTr("License"))). arg(link(Backend.licensePath, qsTr("License"))).
arg(link(Backend.dependencyLicensesLink, qsTr("Dependencies"))). arg(link(Backend.dependencyLicensesLink, qsTr("Dependencies"))).
arg(link(Backend.releaseNotesLink, qsTr("Release notes"))) arg(link(Backend.releaseNotesLink, qsTr("Release notes")))

View File

@ -19,6 +19,7 @@
package cli package cli
import ( import (
"github.com/ProtonMail/proton-bridge/v2/internal/constants"
"github.com/ProtonMail/proton-bridge/v2/internal/events" "github.com/ProtonMail/proton-bridge/v2/internal/events"
"github.com/ProtonMail/proton-bridge/v2/internal/frontend/types" "github.com/ProtonMail/proton-bridge/v2/internal/frontend/types"
"github.com/ProtonMail/proton-bridge/v2/internal/updater" "github.com/ProtonMail/proton-bridge/v2/internal/updater"
@ -319,8 +320,8 @@ func (f *frontendCLI) watchEvents() {
// Loop starts the frontend loop with an interactive shell. // Loop starts the frontend loop with an interactive shell.
func (f *frontendCLI) Loop() error { func (f *frontendCLI) Loop() error {
f.Print(` f.Printf(`
Welcome to Proton Mail Bridge interactive shell Welcome to %s interactive shell
___....___ ___....___
^^ __..-:'':__:..:__:'':-..__ ^^ __..-:'':__:..:__:'':-..__
_.-:__:.-:'': : : :'':-.:__:-._ _.-:__:.-:'': : : :'':-.:__:-._
@ -335,7 +336,7 @@ func (f *frontendCLI) Loop() error {
[ ] [ ] [ ] [ ]
jgs [ ] [ ] jgs [ ] [ ]
~~^_~^~/ \~^-~^~ _~^-~_^~-^~_^~~-^~_~^~-~_~-^~_^/ \~^ ~~_ ^ ~~^_~^~/ \~^-~^~ _~^-~_^~-^~_^~~-^~_~^~-~_~-^~_^/ \~^ ~~_ ^
`) `, constants.FullAppName)
f.Run() f.Run()
return nil return nil
} }

View File

@ -1,2 +1,20 @@
#!/bin/sh #!/bin/sh
# Copyright (c) 2022 Proton AG
#
# This file is part of Proton Mail Bridge.
#
# Proton Mail Bridge 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 3 of the License, or
# (at your option) any later version.
#
# Proton Mail Bridge 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 Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.
sed -n "s/BRIDGE_APP_VERSION?=\(\S*\)/\1/p" "$(dirname $0)/../Makefile" sed -n "s/BRIDGE_APP_VERSION?=\(\S*\)/\1/p" "$(dirname $0)/../Makefile"