Isolate lib_base library. Use crl::time in getms.

This commit is contained in:
John Preston 2018-08-08 23:11:28 +03:00
parent cb371f09ac
commit 64b8adb3d0
23 changed files with 267 additions and 157 deletions

View file

@ -25,3 +25,14 @@ inline constexpr size_t array_size(const Type(&)[Size]) {
}
} // namespace base
template <typename T>
inline void accumulate_max(T &a, const T &b) { if (a < b) a = b; }
template <typename T>
inline void accumulate_min(T &a, const T &b) { if (a > b) a = b; }
template <size_t Size>
QLatin1String qstr(const char(&string)[Size]) {
return QLatin1String(string, Size - 1);
}

View file

@ -0,0 +1,9 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "base/base_pch.h"

View file

@ -0,0 +1,30 @@
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include <QtCore/QByteArray>
#include <QtCore/QString>
#include <QtCore/QUrl>
#include <QtCore/QMutex>
#include <QtCore/QRegularExpression>
#include <crl/crl.h>
#include <rpl/rpl.h>
#include <vector>
#include <unordered_map>
#include <set>
#include <range/v3/all.hpp>
#ifdef Q_OS_WIN
#include "platform/win/windows_range_v3_helpers.h"
#endif // Q_OS_WIN
#include "base/flat_map.h"
#include "base/flat_set.h"
#include "base/optional.h"
#include "base/openssl_help.h"

View file

@ -21,6 +21,7 @@ public:
~binary_guard();
bool alive() const;
void kill();
private:
void destroy();
@ -51,6 +52,10 @@ inline bool binary_guard::alive() const {
return _bothAlive && _bothAlive->load();
}
inline void binary_guard::kill() {
destroy();
}
inline void binary_guard::destroy() {
if (_bothAlive) {
auto old = true;

View file

@ -12,6 +12,7 @@ namespace internal {
namespace {
bool CantUseObservables = false;
void (*HandleDelayedMethod)() = nullptr;
struct ObservableListWrap {
~ObservableListWrap() {
@ -35,7 +36,9 @@ ObservableListWrap &ActiveObservables() {
void RegisterPendingObservable(ObservableCallHandlers *handlers) {
if (CantUseObservables) return;
PendingObservables().list.insert(handlers);
Global::RefHandleObservables().call();
if (HandleDelayedMethod) {
HandleDelayedMethod();
}
}
void UnregisterActiveObservable(ObservableCallHandlers *handlers) {
@ -51,6 +54,10 @@ void UnregisterObservable(ObservableCallHandlers *handlers) {
} // namespace internal
void InitObservables(void(*HandleDelayed)()) {
internal::HandleDelayedMethod = HandleDelayed;
}
void HandleObservables() {
if (internal::CantUseObservables) return;
auto &active = internal::ActiveObservables().list;

View file

@ -452,6 +452,7 @@ private:
};
void InitObservables(void(*HandleDelayed)());
void HandleObservables();
template <

View file

@ -10,11 +10,26 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace qthelp {
namespace {
QRegularExpression RegExpProtocol() {
static const auto result = QRegularExpression("^([a-zA-Z]+)://");
QRegularExpression CreateRegExp(const QString &expression) {
auto result = QRegularExpression(
expression,
QRegularExpression::UseUnicodePropertiesOption);
#ifndef OS_MAC_OLD
result.optimize();
#endif // OS_MAC_OLD
return result;
}
QString ExpressionDomain() {
// Matches any domain name, containing at least one '.', including "file.txt".
return QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)?((?:[A-Za-z" "\xD0\x90-\xD0\xAF\xD0\x81" "\xD0\xB0-\xD1\x8F\xD1\x91" "0-9\\-\\_]+\\.){1,10}([A-Za-z" "\xD1\x80\xD1\x84" "\\-\\d]{2,22})(\\:\\d+)?)");
}
QString ExpressionDomainExplicit() {
// Matches any domain name, containing a protocol, including "test://localhost".
return QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)((?:[A-Za-z" "\xD0\x90-\xD0\xAF\xD0\x81" "\xD0\xB0-\xD1\x8F\xD1\x91" "0-9\\-\\_]+\\.){0,10}([A-Za-z" "\xD1\x80\xD1\x84" "\\-\\d]{2,22})(\\:\\d+)?)");
}
bool IsGoodProtocol(const QString &protocol) {
const auto equals = [&](QLatin1String string) {
return protocol.compare(string, Qt::CaseInsensitive) == 0;
@ -26,6 +41,21 @@ bool IsGoodProtocol(const QString &protocol) {
} // namespace
const QRegularExpression &RegExpDomain() {
static const auto result = CreateRegExp(ExpressionDomain());
return result;
}
const QRegularExpression &RegExpDomainExplicit() {
static const auto result = CreateRegExp(ExpressionDomainExplicit());
return result;
}
QRegularExpression RegExpProtocol() {
static const auto result = CreateRegExp("^([a-zA-Z]+)://");
return result;
}
QMap<QString, QString> url_parse_params(
const QString &params,
UrlParamNameTransform transform) {
@ -77,9 +107,9 @@ QString validate_url(const QString &value) {
if (trimmed.isEmpty()) {
return QString();
}
const auto match = TextUtilities::RegExpDomainExplicit().match(trimmed);
const auto match = RegExpDomainExplicit().match(trimmed);
if (!match.hasMatch()) {
const auto domain = TextUtilities::RegExpDomain().match(trimmed);
const auto domain = RegExpDomain().match(trimmed);
if (!domain.hasMatch() || domain.capturedStart() != 0) {
return QString();
}

View file

@ -9,6 +9,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
namespace qthelp {
const QRegularExpression &RegExpDomain();
const QRegularExpression &RegExpDomainExplicit();
QRegularExpression RegExpProtocol();
inline QString url_encode(const QString &part) {
return QString::fromLatin1(QUrl::toPercentEncoding(part));
}

View file

@ -8,27 +8,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "base/runtime_composer.h"
struct RuntimeComposerMetadatasMap {
QMap<uint64, RuntimeComposerMetadata*> data;
~RuntimeComposerMetadatasMap() {
for_const (const RuntimeComposerMetadata *p, data) {
delete p;
}
}
std::map<uint64, std::unique_ptr<RuntimeComposerMetadata>> data;
QMutex mutex;
};
const RuntimeComposerMetadata *GetRuntimeComposerMetadata(uint64 mask) {
static RuntimeComposerMetadatasMap RuntimeComposerMetadatas;
static QMutex RuntimeComposerMetadatasMutex;
QMutexLocker lock(&RuntimeComposerMetadatasMutex);
auto i = RuntimeComposerMetadatas.data.constFind(mask);
if (i == RuntimeComposerMetadatas.data.cend()) {
RuntimeComposerMetadata *meta = new RuntimeComposerMetadata(mask);
Assert(meta != nullptr);
i = RuntimeComposerMetadatas.data.insert(mask, meta);
QMutexLocker lock(&RuntimeComposerMetadatas.mutex);
auto i = RuntimeComposerMetadatas.data.find(mask);
if (i == end(RuntimeComposerMetadatas.data)) {
i = RuntimeComposerMetadatas.data.emplace(
mask,
std::make_unique<RuntimeComposerMetadata>(mask)).first;
}
return i.value();
return i->second.get();
}
const RuntimeComposerMetadata *RuntimeComposerBase::ZeroRuntimeComposerMetadata = GetRuntimeComposerMetadata(0);

View file

@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#include "base/timer.h"
#include <QtCore/QTimerEvent>
namespace base {
namespace {
@ -48,7 +50,7 @@ void Timer::start(TimeMs timeout, Qt::TimerType type, Repeat repeat) {
setTimeout(timeout);
_timerId = startTimer(_timeout, _type);
if (_timerId) {
_next = getms(true) + _timeout;
_next = crl::time() + _timeout;
} else {
_next = 0;
}
@ -64,7 +66,7 @@ TimeMs Timer::remainingTime() const {
if (!isActive()) {
return -1;
}
auto now = getms(true);
auto now = crl::time();
return (_next > now) ? (_next - now) : TimeMs(0);
}
@ -101,7 +103,7 @@ void Timer::timerEvent(QTimerEvent *e) {
if (_adjusted) {
start(_timeout, _type, repeat());
} else {
_next = getms(true) + _timeout;
_next = crl::time() + _timeout;
}
} else {
cancel();

View file

@ -74,7 +74,7 @@ private:
};
//bool ValidateUrl(const QString &value) {
// const auto match = TextUtilities::RegExpDomain().match(value);
// const auto match = qthelp::RegExpDomain().match(value);
// if (!match.hasMatch() || match.capturedStart() != 0) {
// return false;
// }
@ -596,7 +596,7 @@ void MessageLinksParser::parse() {
const auto len = text.size();
const QChar *start = text.unicode(), *end = start + text.size();
for (auto offset = 0, matchOffset = offset; offset < len;) {
auto m = TextUtilities::RegExpDomain().match(text, matchOffset);
auto m = qthelp::RegExpDomain().match(text, matchOffset);
if (!m.hasMatch()) break;
auto domainOffset = m.capturedStart();

View file

@ -47,11 +47,17 @@ void ProcessMainQueue(void (*callable)(void*), void *argument) {
}
}
void ProcessObservables() {
Global::RefHandleObservables().call();
}
} // namespace
MainQueueProcessor::MainQueueProcessor() {
acquire();
crl::init_main_queue(ProcessMainQueue);
base::InitObservables(ProcessObservables);
}
bool MainQueueProcessor::event(QEvent *event) {

View file

@ -194,52 +194,34 @@ namespace {
return 0;
}
float64 _msFreq;
float64 _msgIdCoef;
TimeMs _msStart = 0, _msAddToMsStart = 0, _msAddToUnixtime = 0;
int32 _timeStart = 0;
class _MsInitializer {
class _MsStarter {
public:
_MsInitializer() {
_MsStarter() {
#ifdef Q_OS_WIN
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
_msFreq = 1000. / float64(li.QuadPart);
// 0xFFFF0000L istead of 0x100000000L to make msgId grow slightly slower, than unixtime and we had time to reconfigure
_msgIdCoef = float64(0xFFFF0000L) / float64(li.QuadPart);
QueryPerformanceCounter(&li);
_msStart = li.QuadPart;
const auto seed = li.QuadPart;
#elif defined Q_OS_MAC
mach_timebase_info_data_t tb = { 0, 0 };
mach_timebase_info(&tb);
_msFreq = (float64(tb.numer) / tb.denom) / 1000000.;
const auto freq = (float64(tb.numer) / tb.denom) / 1000000.;
_msgIdCoef = freq * (float64(0xFFFF0000L) / 1000.);
_msgIdCoef = _msFreq * (float64(0xFFFF0000L) / 1000.);
_msStart = mach_absolute_time();
const auto seed = mach_absolute_time();
#else
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
//_msFreq = 1 / 1000000.;
_msgIdCoef = float64(0xFFFF0000L) / 1000000000.;
_msStart = 1000LL * static_cast<TimeMs>(ts.tv_sec) + (static_cast<TimeMs>(ts.tv_nsec) / 1000000LL);
_msgIdCoef = float64(0xFFFF0000L) / 1000000000.;
timespec ts;
clock_gettime(CLOCK_MONOTONIC, &ts);
const auto seed = 1000LL * static_cast<TimeMs>(ts.tv_sec) + (static_cast<TimeMs>(ts.tv_nsec) / 1000000LL);
#endif
_timeStart = LocalUnixtime();
srand((uint32)(_msStart & 0xFFFFFFFFL));
}
};
void _msInitialize() {
static _MsInitializer _msInitializer;
}
class _MsStarter {
public:
_MsStarter() {
getms();
srand((uint32)(seed & 0xFFFFFFFFL));
}
};
_MsStarter _msStarter;
@ -365,11 +347,25 @@ namespace ThirdParty {
Platform::ThirdParty::start();
if (!RAND_status()) { // should be always inited in all modern OS
char buf[16];
memcpy(buf, &_msStart, 8);
memcpy(buf + 8, &_msFreq, 8);
uchar sha256Buffer[32];
RAND_seed(hashSha256(buf, 16, sha256Buffer), 32);
const auto FeedSeed = [](auto value) {
RAND_seed(&value, sizeof(value));
};
#ifdef Q_OS_WIN
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
FeedSeed(li.QuadPart);
QueryPerformanceCounter(&li);
FeedSeed(li.QuadPart);
#elif defined Q_OS_MAC
mach_timebase_info_data_t tb = { 0 };
mach_timebase_info(&tb);
FeedSeed(tb);
FeedSeed(mach_absolute_time());
#else
timespec ts = { 0 };
clock_gettime(CLOCK_MONOTONIC, &ts);
FeedSeed(ts);
#endif
if (!RAND_status()) {
LOG(("MTP Error: Could not init OpenSSL rand, RAND_status() is 0..."));
}
@ -429,12 +425,7 @@ namespace ThirdParty {
}
bool checkms() {
auto unixms = (LocalUnixtime() - _timeStart) * 1000LL + _msAddToUnixtime;
auto ms = getms(true);
if (ms > unixms + 1000LL) {
_msAddToUnixtime = ((ms - unixms) / 1000LL) * 1000LL;
} else if (unixms > ms + 1000LL) {
_msAddToMsStart += ((unixms - ms) / 1000LL) * 1000LL;
if (crl::adjust_time()) {
Sandbox::adjustSingleTimers();
return true;
}
@ -442,24 +433,7 @@ bool checkms() {
}
TimeMs getms(bool checked) {
_msInitialize();
#ifdef Q_OS_WIN
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return ((li.QuadPart - _msStart) * _msFreq) + (checked ? _msAddToMsStart : 0LL);
#elif defined Q_OS_MAC
auto msCount = static_cast<TimeMs>(mach_absolute_time());
return ((msCount - _msStart) * _msFreq) + (checked ? _msAddToMsStart : 0LL);
#else
timespec ts;
auto res = clock_gettime(CLOCK_MONOTONIC, &ts);
if (res != 0) {
LOG(("Bad clock_gettime result: %1").arg(res));
return 0;
}
auto msCount = 1000LL * static_cast<TimeMs>(ts.tv_sec) + (static_cast<TimeMs>(ts.tv_nsec) / 1000000LL);
return (msCount - _msStart) + (checked ? _msAddToMsStart : 0LL);
#endif
return crl::time();
}
uint64 msgid() {

View file

@ -22,7 +22,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include <set>
#define qsl(s) QStringLiteral(s)
#define qstr(s) QLatin1String((s), sizeof(s) - 1)
// Define specializations for QByteArray for Qt 5.3.2, because
// QByteArray in Qt 5.3.2 doesn't declare "pointer" subtype.
@ -186,12 +185,6 @@ inline QByteArray str_const_toByteArray(const str_const &str) {
return QByteArray::fromRawData(str.c_str(), str.size());
}
template <typename T>
inline void accumulate_max(T &a, const T &b) { if (a < b) a = b; }
template <typename T>
inline void accumulate_min(T &a, const T &b) { if (a > b) a = b; }
void unixtimeInit();
void unixtimeSet(TimeId serverTime, bool force = false);
TimeId unixtime();

View file

@ -668,7 +668,8 @@ void Messenger::forceLogOut(const TextWithEntities &explanation) {
}
void Messenger::checkLocalTime() {
if (App::main()) App::main()->checkLastUpdate(checkms());
const auto updated = checkms();
if (App::main()) App::main()->checkLastUpdate(updated);
}
void Messenger::onAppStateChanged(Qt::ApplicationState state) {

View file

@ -9,20 +9,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
#include "auth_session.h"
#include "lang/lang_tag.h"
#include "base/qthelp_url.h"
namespace TextUtilities {
namespace {
QString ExpressionDomain() {
// Matches any domain name, containing at least one '.', including "file.txt".
return QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)?((?:[A-Za-z" "\xD0\x90-\xD0\xAF\xD0\x81" "\xD0\xB0-\xD1\x8F\xD1\x91" "0-9\\-\\_]+\\.){1,10}([A-Za-z" "\xD1\x80\xD1\x84" "\\-\\d]{2,22})(\\:\\d+)?)");
}
QString ExpressionDomainExplicit() {
// Matches any domain name, containing a protocol, including "test://localhost".
return QString::fromUtf8("(?<![\\w\\$\\-\\_%=\\.])(?:([a-zA-Z]+)://)((?:[A-Za-z" "\xD0\x90-\xD0\xAF\xD0\x81" "\xD0\xB0-\xD1\x8F\xD1\x91" "0-9\\-\\_]+\\.){0,10}([A-Za-z" "\xD1\x80\xD1\x84" "\\-\\d]{2,22})(\\:\\d+)?)");
}
QString ExpressionMailNameAtEnd() {
// Matches email first part (before '@') at the end of the string.
// First we find a domain without protocol (like "gmail.com"), then
@ -1138,16 +1129,6 @@ const QRegularExpression &RegExpWordSplit() {
} // namespace
const QRegularExpression &RegExpDomain() {
static const auto result = CreateRegExp(ExpressionDomain());
return result;
}
const QRegularExpression &RegExpDomainExplicit() {
static const auto result = CreateRegExp(ExpressionDomainExplicit());
return result;
}
const QRegularExpression &RegExpMailNameAtEnd() {
static const auto result = CreateRegExp(ExpressionMailNameAtEnd());
return result;
@ -1604,8 +1585,8 @@ void ParseEntities(TextWithEntities &result, int32 flags, bool rich) {
}
}
}
auto mDomain = RegExpDomain().match(result.text, matchOffset);
auto mExplicitDomain = RegExpDomainExplicit().match(result.text, matchOffset);
auto mDomain = qthelp::RegExpDomain().match(result.text, matchOffset);
auto mExplicitDomain = qthelp::RegExpDomainExplicit().match(result.text, matchOffset);
auto mHashtag = withHashtags ? RegExpHashtag().match(result.text, matchOffset) : QRegularExpressionMatch();
auto mMention = withMentions ? RegExpMention().match(result.text, qMax(mentionSkip, matchOffset)) : QRegularExpressionMatch();
auto mBotCommand = withBotCommands ? RegExpBotCommand().match(result.text, matchOffset) : QRegularExpressionMatch();

View file

@ -157,8 +157,6 @@ namespace TextUtilities {
bool IsValidProtocol(const QString &protocol);
bool IsValidTopDomain(const QString &domain);
const QRegularExpression &RegExpDomain();
const QRegularExpression &RegExpDomainExplicit();
const QRegularExpression &RegExpMailNameAtEnd();
const QRegularExpression &RegExpHashtag();
const QRegularExpression &RegExpHashtagExclude();

@ -1 +1 @@
Subproject commit 527ad273b683d52c5adf5b45b73c6466aa0d0cf0
Subproject commit 2cab11076d84a9db7d86f165eb2cfb4c6ebcc8f4

View file

@ -78,6 +78,7 @@
'utils.gyp:Updater',
'../ThirdParty/libtgvoip/libtgvoip.gyp:libtgvoip',
'crl.gyp:crl',
'lib_base.gyp:lib_base',
'lib_export.gyp:lib_export',
'lib_storage.gyp:lib_storage',
],

View file

@ -53,6 +53,8 @@
'<(crl_src_loc)/dispatch/crl_dispatch_queue.h',
'<(crl_src_loc)/dispatch/crl_dispatch_semaphore.cpp',
'<(crl_src_loc)/dispatch/crl_dispatch_semaphore.h',
'<(crl_src_loc)/mac/crl_mac_time.cpp',
'<(crl_src_loc)/linux/crl_linux_time.cpp',
'<(crl_src_loc)/qt/crl_qt_async.cpp',
'<(crl_src_loc)/qt/crl_qt_async.h',
'<(crl_src_loc)/qt/crl_qt_semaphore.cpp',
@ -64,12 +66,15 @@
'<(crl_src_loc)/winapi/crl_winapi_list.h',
'<(crl_src_loc)/winapi/crl_winapi_semaphore.cpp',
'<(crl_src_loc)/winapi/crl_winapi_semaphore.h',
'<(crl_src_loc)/winapi/crl_winapi_time.cpp',
'<(crl_src_loc)/crl.h',
'<(crl_src_loc)/crl_async.h',
'<(crl_src_loc)/crl_object_on_queue.h',
'<(crl_src_loc)/crl_on_main.h',
'<(crl_src_loc)/crl_queue.h',
'<(crl_src_loc)/crl_semaphore.h',
'<(crl_src_loc)/crl_time.cpp',
'<(crl_src_loc)/crl_time.h',
],
}],
}

95
Telegram/gyp/lib_base.gyp Normal file
View file

@ -0,0 +1,95 @@
# This file is part of Telegram Desktop,
# the official desktop application for the Telegram messaging service.
#
# For license and copyright information please follow this link:
# https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
{
'includes': [
'common.gypi',
],
'targets': [{
'target_name': 'lib_base',
'type': 'static_library',
'includes': [
'common.gypi',
'openssl.gypi',
'qt.gypi',
'telegram_win.gypi',
'telegram_mac.gypi',
'telegram_linux.gypi',
'pch.gypi',
],
'variables': {
'src_loc': '../SourceFiles',
'res_loc': '../Resources',
'libs_loc': '../../../Libraries',
'official_build_target%': '',
'submodules_loc': '../ThirdParty',
'pch_source': '<(src_loc)/base/base_pch.cpp',
'pch_header': '<(src_loc)/base/base_pch.h',
},
'defines': [
'XXH_INLINE_ALL',
],
'dependencies': [
'crl.gyp:crl',
],
'include_dirs': [
'<(src_loc)',
'<(SHARED_INTERMEDIATE_DIR)',
'<(libs_loc)/range-v3/include',
'<(submodules_loc)/GSL/include',
'<(submodules_loc)/variant/include',
'<(submodules_loc)/crl/src',
'<(submodules_loc)/xxHash',
],
'sources': [
'<(src_loc)/base/algorithm.h',
'<(src_loc)/base/assertion.h',
'<(src_loc)/base/basic_types.h',
'<(src_loc)/base/binary_guard.h',
'<(src_loc)/base/build_config.h',
'<(src_loc)/base/bytes.h',
'<(src_loc)/base/flags.h',
'<(src_loc)/base/enum_mask.h',
'<(src_loc)/base/flat_map.h',
'<(src_loc)/base/flat_set.h',
'<(src_loc)/base/functors.h',
'<(src_loc)/base/index_based_iterator.h',
'<(src_loc)/base/match_method.h',
'<(src_loc)/base/observer.cpp',
'<(src_loc)/base/observer.h',
'<(src_loc)/base/ordered_set.h',
'<(src_loc)/base/openssl_help.h',
'<(src_loc)/base/optional.h',
'<(src_loc)/base/overload.h',
'<(src_loc)/base/parse_helper.cpp',
'<(src_loc)/base/parse_helper.h',
'<(src_loc)/base/qthelp_regex.h',
'<(src_loc)/base/qthelp_url.cpp',
'<(src_loc)/base/qthelp_url.h',
'<(src_loc)/base/runtime_composer.cpp',
'<(src_loc)/base/runtime_composer.h',
'<(src_loc)/base/timer.cpp',
'<(src_loc)/base/timer.h',
'<(src_loc)/base/type_traits.h',
'<(src_loc)/base/unique_any.h',
'<(src_loc)/base/unique_function.h',
'<(src_loc)/base/unique_qptr.h',
'<(src_loc)/base/value_ordering.h',
'<(src_loc)/base/variant.h',
'<(src_loc)/base/virtual_method.h',
'<(src_loc)/base/weak_ptr.h',
'<(src_loc)/base/zlib_help.h',
],
'conditions': [[ 'build_macold', {
'xcode_settings': {
'OTHER_CPLUSPLUSFLAGS': [ '-nostdinc++' ],
},
'include_dirs': [
'/usr/local/macold/include/c++/v1',
],
}]],
}],
}

View file

@ -1,40 +1,3 @@
<(src_loc)/base/algorithm.h
<(src_loc)/base/assertion.h
<(src_loc)/base/basic_types.h
<(src_loc)/base/binary_guard.h
<(src_loc)/base/build_config.h
<(src_loc)/base/bytes.h
<(src_loc)/base/flags.h
<(src_loc)/base/enum_mask.h
<(src_loc)/base/flat_map.h
<(src_loc)/base/flat_set.h
<(src_loc)/base/functors.h
<(src_loc)/base/index_based_iterator.h
<(src_loc)/base/match_method.h
<(src_loc)/base/observer.cpp
<(src_loc)/base/observer.h
<(src_loc)/base/ordered_set.h
<(src_loc)/base/openssl_help.h
<(src_loc)/base/optional.h
<(src_loc)/base/overload.h
<(src_loc)/base/parse_helper.cpp
<(src_loc)/base/parse_helper.h
<(src_loc)/base/qthelp_regex.h
<(src_loc)/base/qthelp_url.cpp
<(src_loc)/base/qthelp_url.h
<(src_loc)/base/runtime_composer.cpp
<(src_loc)/base/runtime_composer.h
<(src_loc)/base/timer.cpp
<(src_loc)/base/timer.h
<(src_loc)/base/type_traits.h
<(src_loc)/base/unique_any.h
<(src_loc)/base/unique_function.h
<(src_loc)/base/unique_qptr.h
<(src_loc)/base/value_ordering.h
<(src_loc)/base/variant.h
<(src_loc)/base/virtual_method.h
<(src_loc)/base/weak_ptr.h
<(src_loc)/base/zlib_help.h
<(src_loc)/boxes/peers/edit_peer_info_box.cpp
<(src_loc)/boxes/peers/edit_peer_info_box.h
<(src_loc)/boxes/peers/manage_peer_box.cpp
@ -811,6 +774,9 @@ platforms: !win
<(minizip_loc)/unzip.c
<(minizip_loc)/unzip.h
platforms: win
<(res_loc)/winrc/Telegram.rc
platforms: mac
<(sp_media_key_tap_loc)/SPMediaKeyTap.m
<(sp_media_key_tap_loc)/SPMediaKeyTap.h

View file

@ -7,9 +7,6 @@
{
'conditions': [[ 'build_win', {
'msbuild_toolset': 'v141',
'sources': [
'<(res_loc)/winrc/Telegram.rc',
],
'library_dirs': [
'<(libs_loc)/ffmpeg',
],