mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-01-13 10:34:38 +00:00
First attempt to build Telegram on Windows using GYP+Ninja.
It already builds in Debug, using rules for Qt MOC and RCC. Need to start use rules for styles/langs/numbers, test on WinXP. Need to support Release and Deploy configurations.
This commit is contained in:
parent
67a3f33aa7
commit
62cab0750b
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,6 @@
|
||||
/out/
|
||||
/Telegram/build/target
|
||||
/Telegram/build/msvs/
|
||||
/Telegram/GeneratedFiles/
|
||||
/Telegram/SourceFiles/art/grid.png
|
||||
/Telegram/SourceFiles/art/grid_125x.png
|
||||
|
502
Telegram/gyp/Telegram.gyp
Normal file
502
Telegram/gyp/Telegram.gyp
Normal file
@ -0,0 +1,502 @@
|
||||
# This file is part of Telegram Desktop,
|
||||
# the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
#
|
||||
# Telegram Desktop 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.
|
||||
#
|
||||
# It 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.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give permission
|
||||
# to link the code of portions of this program with the OpenSSL library.
|
||||
#
|
||||
# Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
# Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
|
||||
{
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'Telegram',
|
||||
'variables': {
|
||||
'libs_loc': '../../../Libraries',
|
||||
'src_loc': '../SourceFiles',
|
||||
'gen_loc': '../GeneratedFiles',
|
||||
'res_loc': '../Resources',
|
||||
},
|
||||
'includes': [
|
||||
'common_executable.gypi',
|
||||
'qt.gypi',
|
||||
],
|
||||
|
||||
'dependencies': [
|
||||
# 'codegen.gyp:codegen_style',
|
||||
# 'codegen.gyp:codegen_numbers',
|
||||
# 'codegen.gyp:MetaLang',
|
||||
# 'utils.gyp:Packer',
|
||||
# 'utils.gyp:Updater',
|
||||
],
|
||||
|
||||
'defines': [
|
||||
'AL_LIBTYPE_STATIC',
|
||||
],
|
||||
|
||||
'include_dirs': [
|
||||
'<(src_loc)',
|
||||
'<(gen_loc)',
|
||||
'<(libs_loc)/breakpad/src',
|
||||
'<(libs_loc)/lzma/C',
|
||||
'<(libs_loc)/libexif-0.6.20',
|
||||
'<(libs_loc)/zlib-1.2.8',
|
||||
'<(libs_loc)/ffmpeg',
|
||||
'<(libs_loc)/openal-soft/include',
|
||||
'../ThirdParty/minizip',
|
||||
'<(libs_loc)/openssl/Release/include',
|
||||
'<(libs_loc)/openssl_debug/Debug/include',
|
||||
],
|
||||
'library_dirs': [
|
||||
'<(libs_loc)/lzma/C/Util/LzmaLib/Debug',
|
||||
'<(libs_loc)/libexif-0.6.20/win32/Debug',
|
||||
'<(libs_loc)/ffmpeg',
|
||||
'<(libs_loc)/opus/win32/VS2010/Win32/Debug',
|
||||
'<(libs_loc)/openal-soft/build/Debug',
|
||||
'<(libs_loc)/zlib-1.2.8/contrib/vstudio/vc11/x86/ZlibStatDebug',
|
||||
'<(libs_loc)/openssl_debug/Debug/lib',
|
||||
'<(libs_loc)/breakpad/src/client/windows/Debug',
|
||||
],
|
||||
'sources': [
|
||||
'<(res_loc)/telegram.qrc',
|
||||
'<(res_loc)/telegram_emojis.qrc',
|
||||
'<(res_loc)/telegram_wnd.qrc',
|
||||
'<(res_loc)/telegram_mac.qrc',
|
||||
'<(gen_loc)/lang_auto.cpp',
|
||||
'<(gen_loc)/lang_auto.h',
|
||||
'<(gen_loc)/numbers.cpp',
|
||||
'<(gen_loc)/numbers.h',
|
||||
'<(gen_loc)/styles/style_basic.cpp',
|
||||
'<(gen_loc)/styles/style_basic.h',
|
||||
'<(gen_loc)/styles/style_basic_types.cpp',
|
||||
'<(gen_loc)/styles/style_basic_types.h',
|
||||
'<(gen_loc)/styles/style_boxes.cpp',
|
||||
'<(gen_loc)/styles/style_boxes.h',
|
||||
'<(gen_loc)/styles/style_dialogs.cpp',
|
||||
'<(gen_loc)/styles/style_dialogs.h',
|
||||
'<(gen_loc)/styles/style_history.cpp',
|
||||
'<(gen_loc)/styles/style_history.h',
|
||||
'<(gen_loc)/styles/style_mediaview.cpp',
|
||||
'<(gen_loc)/styles/style_mediaview.h',
|
||||
'<(gen_loc)/styles/style_overview.cpp',
|
||||
'<(gen_loc)/styles/style_overview.h',
|
||||
'<(gen_loc)/styles/style_profile.cpp',
|
||||
'<(gen_loc)/styles/style_profile.h',
|
||||
'<(gen_loc)/styles/style_widgets.cpp',
|
||||
'<(gen_loc)/styles/style_widgets.h',
|
||||
'<(src_loc)/main.cpp',
|
||||
'<(src_loc)/stdafx.cpp',
|
||||
'<(src_loc)/stdafx.h',
|
||||
'<(src_loc)/apiwrap.cpp',
|
||||
'<(src_loc)/apiwrap.h',
|
||||
'<(src_loc)/app.cpp',
|
||||
'<(src_loc)/app.h',
|
||||
'<(src_loc)/application.cpp',
|
||||
'<(src_loc)/application.h',
|
||||
'<(src_loc)/autoupdater.cpp',
|
||||
'<(src_loc)/autoupdater.h',
|
||||
'<(src_loc)/dialogswidget.cpp',
|
||||
'<(src_loc)/dialogswidget.h',
|
||||
'<(src_loc)/dropdown.cpp',
|
||||
'<(src_loc)/dropdown.h',
|
||||
'<(src_loc)/facades.cpp',
|
||||
'<(src_loc)/facades.h',
|
||||
'<(src_loc)/fileuploader.cpp',
|
||||
'<(src_loc)/fileuploader.h',
|
||||
'<(src_loc)/history.cpp',
|
||||
'<(src_loc)/history.h',
|
||||
'<(src_loc)/historywidget.cpp',
|
||||
'<(src_loc)/historywidget.h',
|
||||
'<(src_loc)/lang.cpp',
|
||||
'<(src_loc)/lang.h',
|
||||
'<(src_loc)/langloaderplain.cpp',
|
||||
'<(src_loc)/langloaderplain.h',
|
||||
'<(src_loc)/layerwidget.cpp',
|
||||
'<(src_loc)/layerwidget.h',
|
||||
'<(src_loc)/layout.cpp',
|
||||
'<(src_loc)/layout.h',
|
||||
'<(src_loc)/mediaview.cpp',
|
||||
'<(src_loc)/mediaview.h',
|
||||
'<(src_loc)/observer_peer.cpp',
|
||||
'<(src_loc)/observer_peer.h',
|
||||
'<(src_loc)/overviewwidget.cpp',
|
||||
'<(src_loc)/overviewwidget.h',
|
||||
'<(src_loc)/passcodewidget.cpp',
|
||||
'<(src_loc)/passcodewidget.h',
|
||||
'<(src_loc)/playerwidget.cpp',
|
||||
'<(src_loc)/playerwidget.h',
|
||||
'<(src_loc)/localimageloader.cpp',
|
||||
'<(src_loc)/localimageloader.h',
|
||||
'<(src_loc)/localstorage.cpp',
|
||||
'<(src_loc)/localstorage.h',
|
||||
'<(src_loc)/logs.cpp',
|
||||
'<(src_loc)/logs.h',
|
||||
'<(src_loc)/mainwidget.cpp',
|
||||
'<(src_loc)/mainwidget.h',
|
||||
'<(src_loc)/settings.cpp',
|
||||
'<(src_loc)/settings.h',
|
||||
'<(src_loc)/settingswidget.cpp',
|
||||
'<(src_loc)/settingswidget.h',
|
||||
'<(src_loc)/shortcuts.cpp',
|
||||
'<(src_loc)/shortcuts.h',
|
||||
'<(src_loc)/structs.cpp',
|
||||
'<(src_loc)/structs.h',
|
||||
'<(src_loc)/sysbuttons.cpp',
|
||||
'<(src_loc)/sysbuttons.h',
|
||||
'<(src_loc)/title.cpp',
|
||||
'<(src_loc)/title.h',
|
||||
'<(src_loc)/mainwindow.cpp',
|
||||
'<(src_loc)/mainwindow.h',
|
||||
'<(src_loc)/boxes/aboutbox.cpp',
|
||||
'<(src_loc)/boxes/aboutbox.h',
|
||||
'<(src_loc)/boxes/abstractbox.cpp',
|
||||
'<(src_loc)/boxes/abstractbox.h',
|
||||
'<(src_loc)/boxes/addcontactbox.cpp',
|
||||
'<(src_loc)/boxes/addcontactbox.h',
|
||||
'<(src_loc)/boxes/autolockbox.cpp',
|
||||
'<(src_loc)/boxes/autolockbox.h',
|
||||
'<(src_loc)/boxes/backgroundbox.cpp',
|
||||
'<(src_loc)/boxes/backgroundbox.h',
|
||||
'<(src_loc)/boxes/confirmbox.cpp',
|
||||
'<(src_loc)/boxes/confirmbox.h',
|
||||
'<(src_loc)/boxes/confirmphonebox.cpp',
|
||||
'<(src_loc)/boxes/confirmphonebox.h',
|
||||
'<(src_loc)/boxes/connectionbox.cpp',
|
||||
'<(src_loc)/boxes/connectionbox.h',
|
||||
'<(src_loc)/boxes/contactsbox.cpp',
|
||||
'<(src_loc)/boxes/contactsbox.h',
|
||||
'<(src_loc)/boxes/downloadpathbox.cpp',
|
||||
'<(src_loc)/boxes/downloadpathbox.h',
|
||||
'<(src_loc)/boxes/emojibox.cpp',
|
||||
'<(src_loc)/boxes/emojibox.h',
|
||||
'<(src_loc)/boxes/languagebox.cpp',
|
||||
'<(src_loc)/boxes/languagebox.h',
|
||||
'<(src_loc)/boxes/passcodebox.cpp',
|
||||
'<(src_loc)/boxes/passcodebox.h',
|
||||
'<(src_loc)/boxes/photocropbox.cpp',
|
||||
'<(src_loc)/boxes/photocropbox.h',
|
||||
'<(src_loc)/boxes/photosendbox.cpp',
|
||||
'<(src_loc)/boxes/photosendbox.h',
|
||||
'<(src_loc)/boxes/report_box.cpp',
|
||||
'<(src_loc)/boxes/report_box.h',
|
||||
'<(src_loc)/boxes/sessionsbox.cpp',
|
||||
'<(src_loc)/boxes/sessionsbox.h',
|
||||
'<(src_loc)/boxes/stickersetbox.cpp',
|
||||
'<(src_loc)/boxes/stickersetbox.h',
|
||||
'<(src_loc)/boxes/usernamebox.cpp',
|
||||
'<(src_loc)/boxes/usernamebox.h',
|
||||
'<(src_loc)/core/basic_types.cpp',
|
||||
'<(src_loc)/core/basic_types.h',
|
||||
'<(src_loc)/core/click_handler.cpp',
|
||||
'<(src_loc)/core/click_handler.h',
|
||||
'<(src_loc)/core/click_handler_types.cpp',
|
||||
'<(src_loc)/core/click_handler_types.h',
|
||||
'<(src_loc)/core/observer.cpp',
|
||||
'<(src_loc)/core/observer.h',
|
||||
'<(src_loc)/core/qthelp_url.cpp',
|
||||
'<(src_loc)/core/qthelp_url.h',
|
||||
'<(src_loc)/data/data_abstract_structure.cpp',
|
||||
'<(src_loc)/data/data_abstract_structure.h',
|
||||
'<(src_loc)/data/data_drafts.cpp',
|
||||
'<(src_loc)/data/data_drafts.h',
|
||||
'<(src_loc)/dialogs/dialogs_indexed_list.cpp',
|
||||
'<(src_loc)/dialogs/dialogs_indexed_list.h',
|
||||
'<(src_loc)/dialogs/dialogs_layout.cpp',
|
||||
'<(src_loc)/dialogs/dialogs_layout.h',
|
||||
'<(src_loc)/dialogs/dialogs_list.cpp',
|
||||
'<(src_loc)/dialogs/dialogs_list.h',
|
||||
'<(src_loc)/dialogs/dialogs_row.cpp',
|
||||
'<(src_loc)/dialogs/dialogs_row.h',
|
||||
'<(src_loc)/history/field_autocomplete.cpp',
|
||||
'<(src_loc)/history/field_autocomplete.h',
|
||||
'<(src_loc)/history/history_service_layout.cpp',
|
||||
'<(src_loc)/history/history_service_layout.h',
|
||||
'<(src_loc)/inline_bots/inline_bot_layout_internal.cpp',
|
||||
'<(src_loc)/inline_bots/inline_bot_layout_internal.h',
|
||||
'<(src_loc)/inline_bots/inline_bot_layout_item.cpp',
|
||||
'<(src_loc)/inline_bots/inline_bot_layout_item.h',
|
||||
'<(src_loc)/inline_bots/inline_bot_result.cpp',
|
||||
'<(src_loc)/inline_bots/inline_bot_result.h',
|
||||
'<(src_loc)/inline_bots/inline_bot_send_data.cpp',
|
||||
'<(src_loc)/inline_bots/inline_bot_send_data.h',
|
||||
'<(src_loc)/intro/introwidget.cpp',
|
||||
'<(src_loc)/intro/introwidget.h',
|
||||
'<(src_loc)/intro/introcode.cpp',
|
||||
'<(src_loc)/intro/introcode.h',
|
||||
'<(src_loc)/intro/introphone.cpp',
|
||||
'<(src_loc)/intro/introphone.h',
|
||||
'<(src_loc)/intro/intropwdcheck.cpp',
|
||||
'<(src_loc)/intro/intropwdcheck.h',
|
||||
'<(src_loc)/intro/introsignup.cpp',
|
||||
'<(src_loc)/intro/introsignup.h',
|
||||
'<(src_loc)/intro/introstart.cpp',
|
||||
'<(src_loc)/intro/introstart.h',
|
||||
'<(src_loc)/media/view/media_clip_controller.cpp',
|
||||
'<(src_loc)/media/view/media_clip_controller.h',
|
||||
'<(src_loc)/media/view/media_clip_playback.cpp',
|
||||
'<(src_loc)/media/view/media_clip_playback.h',
|
||||
'<(src_loc)/media/view/media_clip_volume_controller.cpp',
|
||||
'<(src_loc)/media/view/media_clip_volume_controller.h',
|
||||
'<(src_loc)/media/media_audio.cpp',
|
||||
'<(src_loc)/media/media_audio.h',
|
||||
'<(src_loc)/media/media_audio_ffmpeg_loader.cpp',
|
||||
'<(src_loc)/media/media_audio_ffmpeg_loader.h',
|
||||
'<(src_loc)/media/media_audio_loader.cpp',
|
||||
'<(src_loc)/media/media_audio_loader.h',
|
||||
'<(src_loc)/media/media_audio_loaders.cpp',
|
||||
'<(src_loc)/media/media_audio_loaders.h',
|
||||
'<(src_loc)/media/media_child_ffmpeg_loader.cpp',
|
||||
'<(src_loc)/media/media_child_ffmpeg_loader.h',
|
||||
'<(src_loc)/media/media_clip_ffmpeg.cpp',
|
||||
'<(src_loc)/media/media_clip_ffmpeg.h',
|
||||
'<(src_loc)/media/media_clip_implementation.cpp',
|
||||
'<(src_loc)/media/media_clip_implementation.h',
|
||||
'<(src_loc)/media/media_clip_qtgif.cpp',
|
||||
'<(src_loc)/media/media_clip_qtgif.h',
|
||||
'<(src_loc)/media/media_clip_reader.cpp',
|
||||
'<(src_loc)/media/media_clip_reader.h',
|
||||
'<(src_loc)/mtproto/facade.cpp',
|
||||
'<(src_loc)/mtproto/facade.h',
|
||||
'<(src_loc)/mtproto/auth_key.cpp',
|
||||
'<(src_loc)/mtproto/auth_key.h',
|
||||
'<(src_loc)/mtproto/connection.cpp',
|
||||
'<(src_loc)/mtproto/connection.h',
|
||||
'<(src_loc)/mtproto/connection_abstract.cpp',
|
||||
'<(src_loc)/mtproto/connection_abstract.h',
|
||||
'<(src_loc)/mtproto/connection_auto.cpp',
|
||||
'<(src_loc)/mtproto/connection_auto.h',
|
||||
'<(src_loc)/mtproto/connection_http.cpp',
|
||||
'<(src_loc)/mtproto/connection_http.h',
|
||||
'<(src_loc)/mtproto/connection_tcp.cpp',
|
||||
'<(src_loc)/mtproto/connection_tcp.h',
|
||||
'<(src_loc)/mtproto/core_types.cpp',
|
||||
'<(src_loc)/mtproto/core_types.h',
|
||||
'<(src_loc)/mtproto/dcenter.cpp',
|
||||
'<(src_loc)/mtproto/dcenter.h',
|
||||
'<(src_loc)/mtproto/file_download.cpp',
|
||||
'<(src_loc)/mtproto/file_download.h',
|
||||
'<(src_loc)/mtproto/rsa_public_key.cpp',
|
||||
'<(src_loc)/mtproto/rsa_public_key.h',
|
||||
'<(src_loc)/mtproto/rpc_sender.cpp',
|
||||
'<(src_loc)/mtproto/rpc_sender.h',
|
||||
'<(src_loc)/mtproto/scheme_auto.cpp',
|
||||
'<(src_loc)/mtproto/scheme_auto.h',
|
||||
'<(src_loc)/mtproto/session.cpp',
|
||||
'<(src_loc)/mtproto/session.h',
|
||||
'<(src_loc)/overview/overview_layout.cpp',
|
||||
'<(src_loc)/overview/overview_layout.h',
|
||||
'<(src_loc)/pspecific_win.cpp',
|
||||
'<(src_loc)/pspecific_win.h',
|
||||
'<(src_loc)/platform/linux/linux_gdk_helper.cpp',
|
||||
'<(src_loc)/platform/linux/linux_gdk_helper.h',
|
||||
'<(src_loc)/platform/linux/linux_libs.cpp',
|
||||
'<(src_loc)/platform/linux/linux_libs.h',
|
||||
'<(src_loc)/platform/linux/file_dialog_linux.cpp',
|
||||
'<(src_loc)/platform/linux/file_dialog_linux.h',
|
||||
'<(src_loc)/platform/linux/main_window_linux.cpp',
|
||||
'<(src_loc)/platform/linux/main_window_linux.h',
|
||||
'<(src_loc)/platform/win/main_window_win.cpp',
|
||||
'<(src_loc)/platform/win/main_window_win.h',
|
||||
'<(src_loc)/platform/win/windows_app_user_model_id.cpp',
|
||||
'<(src_loc)/platform/win/windows_app_user_model_id.h',
|
||||
'<(src_loc)/platform/win/windows_dlls.cpp',
|
||||
'<(src_loc)/platform/win/windows_dlls.h',
|
||||
'<(src_loc)/platform/win/windows_event_filter.cpp',
|
||||
'<(src_loc)/platform/win/windows_event_filter.h',
|
||||
'<(src_loc)/platform/win/windows_toasts.cpp',
|
||||
'<(src_loc)/platform/win/windows_toasts.h',
|
||||
'<(src_loc)/profile/profile_actions_widget.cpp',
|
||||
'<(src_loc)/profile/profile_actions_widget.h',
|
||||
'<(src_loc)/profile/profile_block_widget.cpp',
|
||||
'<(src_loc)/profile/profile_block_widget.h',
|
||||
'<(src_loc)/profile/profile_cover_drop_area.cpp',
|
||||
'<(src_loc)/profile/profile_cover_drop_area.h',
|
||||
'<(src_loc)/profile/profile_cover.cpp',
|
||||
'<(src_loc)/profile/profile_cover.h',
|
||||
'<(src_loc)/profile/profile_fixed_bar.cpp',
|
||||
'<(src_loc)/profile/profile_fixed_bar.h',
|
||||
'<(src_loc)/profile/profile_info_widget.cpp',
|
||||
'<(src_loc)/profile/profile_info_widget.h',
|
||||
'<(src_loc)/profile/profile_inner_widget.cpp',
|
||||
'<(src_loc)/profile/profile_inner_widget.h',
|
||||
'<(src_loc)/profile/profile_invite_link_widget.cpp',
|
||||
'<(src_loc)/profile/profile_invite_link_widget.h',
|
||||
'<(src_loc)/profile/profile_members_widget.cpp',
|
||||
'<(src_loc)/profile/profile_members_widget.h',
|
||||
'<(src_loc)/profile/profile_section_memento.cpp',
|
||||
'<(src_loc)/profile/profile_section_memento.h',
|
||||
'<(src_loc)/profile/profile_settings_widget.cpp',
|
||||
'<(src_loc)/profile/profile_settings_widget.h',
|
||||
'<(src_loc)/profile/profile_shared_media_widget.cpp',
|
||||
'<(src_loc)/profile/profile_shared_media_widget.h',
|
||||
'<(src_loc)/profile/profile_userpic_button.cpp',
|
||||
'<(src_loc)/profile/profile_userpic_button.h',
|
||||
'<(src_loc)/profile/profile_widget.cpp',
|
||||
'<(src_loc)/profile/profile_widget.h',
|
||||
'<(src_loc)/serialize/serialize_common.cpp',
|
||||
'<(src_loc)/serialize/serialize_common.h',
|
||||
'<(src_loc)/serialize/serialize_document.cpp',
|
||||
'<(src_loc)/serialize/serialize_document.h',
|
||||
'<(src_loc)/ui/buttons/history_down_button.cpp',
|
||||
'<(src_loc)/ui/buttons/history_down_button.h',
|
||||
'<(src_loc)/ui/buttons/icon_button.cpp',
|
||||
'<(src_loc)/ui/buttons/icon_button.h',
|
||||
'<(src_loc)/ui/buttons/left_outline_button.cpp',
|
||||
'<(src_loc)/ui/buttons/left_outline_button.h',
|
||||
'<(src_loc)/ui/buttons/peer_avatar_button.cpp',
|
||||
'<(src_loc)/ui/buttons/peer_avatar_button.h',
|
||||
'<(src_loc)/ui/buttons/round_button.cpp',
|
||||
'<(src_loc)/ui/buttons/round_button.h',
|
||||
'<(src_loc)/ui/effects/fade_animation.cpp',
|
||||
'<(src_loc)/ui/effects/fade_animation.h',
|
||||
'<(src_loc)/ui/style/style_core.cpp',
|
||||
'<(src_loc)/ui/style/style_core.h',
|
||||
'<(src_loc)/ui/style/style_core_color.cpp',
|
||||
'<(src_loc)/ui/style/style_core_color.h',
|
||||
'<(src_loc)/ui/style/style_core_font.cpp',
|
||||
'<(src_loc)/ui/style/style_core_font.h',
|
||||
'<(src_loc)/ui/style/style_core_icon.cpp',
|
||||
'<(src_loc)/ui/style/style_core_icon.h',
|
||||
'<(src_loc)/ui/style/style_core_types.cpp',
|
||||
'<(src_loc)/ui/style/style_core_types.h',
|
||||
'<(src_loc)/ui/text/text.cpp',
|
||||
'<(src_loc)/ui/text/text.h',
|
||||
'<(src_loc)/ui/text/text_block.cpp',
|
||||
'<(src_loc)/ui/text/text_block.h',
|
||||
'<(src_loc)/ui/text/text_entity.cpp',
|
||||
'<(src_loc)/ui/text/text_entity.h',
|
||||
'<(src_loc)/ui/toast/toast.cpp',
|
||||
'<(src_loc)/ui/toast/toast.h',
|
||||
'<(src_loc)/ui/toast/toast_manager.cpp',
|
||||
'<(src_loc)/ui/toast/toast_manager.h',
|
||||
'<(src_loc)/ui/toast/toast_widget.cpp',
|
||||
'<(src_loc)/ui/toast/toast_widget.h',
|
||||
'<(src_loc)/ui/widgets/label_simple.cpp',
|
||||
'<(src_loc)/ui/widgets/label_simple.h',
|
||||
'<(src_loc)/ui/animation.cpp',
|
||||
'<(src_loc)/ui/animation.h',
|
||||
'<(src_loc)/ui/boxshadow.cpp',
|
||||
'<(src_loc)/ui/boxshadow.h',
|
||||
'<(src_loc)/ui/button.cpp',
|
||||
'<(src_loc)/ui/button.h',
|
||||
'<(src_loc)/ui/popupmenu.cpp',
|
||||
'<(src_loc)/ui/popupmenu.h',
|
||||
'<(src_loc)/ui/countryinput.cpp',
|
||||
'<(src_loc)/ui/countryinput.h',
|
||||
'<(src_loc)/ui/emoji_config.cpp',
|
||||
'<(src_loc)/ui/emoji_config.h',
|
||||
'<(src_loc)/ui/filedialog.cpp',
|
||||
'<(src_loc)/ui/filedialog.h',
|
||||
'<(src_loc)/ui/flatbutton.cpp',
|
||||
'<(src_loc)/ui/flatbutton.h',
|
||||
'<(src_loc)/ui/flatcheckbox.cpp',
|
||||
'<(src_loc)/ui/flatcheckbox.h',
|
||||
'<(src_loc)/ui/flatinput.cpp',
|
||||
'<(src_loc)/ui/flatinput.h',
|
||||
'<(src_loc)/ui/flatlabel.cpp',
|
||||
'<(src_loc)/ui/flatlabel.h',
|
||||
'<(src_loc)/ui/flattextarea.cpp',
|
||||
'<(src_loc)/ui/flattextarea.h',
|
||||
'<(src_loc)/ui/images.cpp',
|
||||
'<(src_loc)/ui/images.h',
|
||||
'<(src_loc)/ui/inner_dropdown.cpp',
|
||||
'<(src_loc)/ui/inner_dropdown.h',
|
||||
'<(src_loc)/ui/scrollarea.cpp',
|
||||
'<(src_loc)/ui/scrollarea.h',
|
||||
'<(src_loc)/ui/twidget.cpp',
|
||||
'<(src_loc)/ui/twidget.h',
|
||||
'<(src_loc)/window/main_window.cpp',
|
||||
'<(src_loc)/window/main_window.h',
|
||||
'<(src_loc)/window/section_widget.cpp',
|
||||
'<(src_loc)/window/section_widget.h',
|
||||
'<(src_loc)/window/slide_animation.cpp',
|
||||
'<(src_loc)/window/slide_animation.h',
|
||||
'<(src_loc)/window/top_bar_widget.cpp',
|
||||
'<(src_loc)/window/top_bar_widget.h',
|
||||
],
|
||||
'libraries': [
|
||||
'libeay32',
|
||||
'ssleay32',
|
||||
'Crypt32',
|
||||
'zlibstat',
|
||||
'LzmaLib',
|
||||
'lib_exif',
|
||||
'UxTheme',
|
||||
'DbgHelp',
|
||||
'OpenAL32',
|
||||
'common',
|
||||
'libavformat\libavformat.a',
|
||||
'libavcodec\libavcodec.a',
|
||||
'libavutil\libavutil.a',
|
||||
'libswresample\libswresample.a',
|
||||
'libswscale\libswscale.a',
|
||||
'opus',
|
||||
'celt',
|
||||
'silk_common',
|
||||
'silk_float',
|
||||
'lib\common',
|
||||
'lib\exception_handler',
|
||||
'lib\crash_generation_client',
|
||||
],
|
||||
'conditions': [
|
||||
[ '"<(build_linux)" != "1"', {
|
||||
'sources!': [
|
||||
'<(src_loc)/platform/linux/linux_gdk_helper.cpp',
|
||||
'<(src_loc)/platform/linux/linux_gdk_helper.h',
|
||||
'<(src_loc)/platform/linux/linux_libs.cpp',
|
||||
'<(src_loc)/platform/linux/linux_libs.h',
|
||||
'<(src_loc)/platform/linux/file_dialog_linux.cpp',
|
||||
'<(src_loc)/platform/linux/file_dialog_linux.h',
|
||||
'<(src_loc)/platform/linux/main_window_linux.cpp',
|
||||
'<(src_loc)/platform/linux/main_window_linux.h',
|
||||
],
|
||||
}],
|
||||
[ '"<(build_mac)" != "1"', {
|
||||
'sources!': [
|
||||
'<(res_loc)/telegram_mac.qrc',
|
||||
],
|
||||
}],
|
||||
[ '"<(build_win)" != "1"', {
|
||||
'sources!': [
|
||||
'<(src_loc)/platform/win/main_window_win.cpp',
|
||||
'<(src_loc)/platform/win/main_window_win.h',
|
||||
'<(src_loc)/platform/win/windows_app_user_model_id.cpp',
|
||||
'<(src_loc)/platform/win/windows_app_user_model_id.h',
|
||||
'<(src_loc)/platform/win/windows_dlls.cpp',
|
||||
'<(src_loc)/platform/win/windows_dlls.h',
|
||||
'<(src_loc)/platform/win/windows_event_filter.cpp',
|
||||
'<(src_loc)/platform/win/windows_event_filter.h',
|
||||
'<(src_loc)/platform/win/windows_toasts.cpp',
|
||||
'<(src_loc)/platform/win/windows_toasts.h',
|
||||
'<(res_loc)/telegram_wnd.qrc',
|
||||
],
|
||||
}],
|
||||
[ 'build_win', {
|
||||
'msvs_precompiled_source': '<(src_loc)/stdafx.cpp',
|
||||
'msvs_precompiled_header': '<(src_loc)/stdafx.h',
|
||||
'msbuild_toolset': 'v140_xp', #Windows7.1SDK',#
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'IgnoreDefaultLibraryNames': 'LIBCMT',
|
||||
},
|
||||
'VCResourceCompilerTool': {
|
||||
},
|
||||
},
|
||||
'sources': [
|
||||
'<(res_loc)/winrc/Telegram.rc',
|
||||
],
|
||||
}],
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
80
Telegram/gyp/common.gypi
Normal file
80
Telegram/gyp/common.gypi
Normal file
@ -0,0 +1,80 @@
|
||||
# This file is part of Telegram Desktop,
|
||||
# the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
#
|
||||
# Telegram Desktop 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.
|
||||
#
|
||||
# It 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.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give permission
|
||||
# to link the code of portions of this program with the OpenSSL library.
|
||||
#
|
||||
# Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
# Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
|
||||
{
|
||||
'variables': {
|
||||
'variables': {
|
||||
'variables': {
|
||||
'build_os%': '<(OS)',
|
||||
},
|
||||
'build_os%': '<(build_os)',
|
||||
'conditions': [
|
||||
[ 'build_os == "win"', {
|
||||
'build_win': 1,
|
||||
}, {
|
||||
'build_win': 0,
|
||||
}],
|
||||
[ 'build_os == "mac"', {
|
||||
'build_mac': 1,
|
||||
}, {
|
||||
'build_mac': 0,
|
||||
}],
|
||||
[ 'build_os == "linux"', {
|
||||
'build_linux': 1,
|
||||
}, {
|
||||
'build_linux': 0,
|
||||
}],
|
||||
],
|
||||
},
|
||||
'build_os%': '<(build_os)',
|
||||
'build_win%': '<(build_win)',
|
||||
'build_mac%': '<(build_mac)',
|
||||
'build_linux%': '<(build_linux)',
|
||||
|
||||
# GYP does not support per-configuration libraries :(
|
||||
# So they will be emulated through additional link flags,
|
||||
# which will contain <(ld_lib_prefix)LibraryName<(ld_lib_postfix)
|
||||
'conditions': [
|
||||
[ 'build_win', {
|
||||
'ld_lib_prefix': '',
|
||||
'ld_lib_postfix': '.lib',
|
||||
}, {
|
||||
'ld_lib_prefix': '-l',
|
||||
'ld_lib_postfix': '',
|
||||
}],
|
||||
],
|
||||
'ld_lib_prefix': '<(ld_lib_prefix)',
|
||||
'ld_lib_postfix': '<(ld_lib_postfix)',
|
||||
|
||||
'library%': 'static_library',
|
||||
},
|
||||
|
||||
'configurations': {
|
||||
'Debug': {
|
||||
'defines': [
|
||||
'_DEBUG',
|
||||
],
|
||||
},
|
||||
'Release': {
|
||||
'defines': [
|
||||
'NDEBUG',
|
||||
],
|
||||
},
|
||||
},
|
||||
}
|
29
Telegram/gyp/common_executable.gypi
Normal file
29
Telegram/gyp/common_executable.gypi
Normal file
@ -0,0 +1,29 @@
|
||||
# This file is part of Telegram Desktop,
|
||||
# the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
#
|
||||
# Telegram Desktop 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.
|
||||
#
|
||||
# It 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.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give permission
|
||||
# to link the code of portions of this program with the OpenSSL library.
|
||||
#
|
||||
# Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
# Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
|
||||
{
|
||||
'type': 'executable',
|
||||
'variables': {
|
||||
'win_subsystem': '2', # Windows application
|
||||
},
|
||||
'includes': [
|
||||
'common.gypi',
|
||||
'settings_win.gypi',
|
||||
],
|
||||
}
|
153
Telegram/gyp/qt.gypi
Normal file
153
Telegram/gyp/qt.gypi
Normal file
@ -0,0 +1,153 @@
|
||||
# This file is part of Telegram Desktop,
|
||||
# the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
#
|
||||
# Telegram Desktop 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.
|
||||
#
|
||||
# It 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.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give permission
|
||||
# to link the code of portions of this program with the OpenSSL library.
|
||||
#
|
||||
# Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
# Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
|
||||
{
|
||||
'variables': {
|
||||
'variables': {
|
||||
'variables': {
|
||||
'qt_version%': '5.6.0',
|
||||
},
|
||||
'qt_version%': '<(qt_version)',
|
||||
'qt_version_loc': '<!(python -c "print(\'<(qt_version)\'.replace(\'.\', \'_\')))',
|
||||
'qtlibs_debug': [
|
||||
'<(ld_lib_prefix)Qt5Cored<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtmaind<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtpcred<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Guid<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtfreetyped<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Widgetsd<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtharfbuzzngd<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Networkd<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5PlatformSupportd<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)imageformats\qwebpd<(ld_lib_postfix)',
|
||||
],
|
||||
'qtlibs_release': [
|
||||
'<(ld_lib_prefix)Qt5Core<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtmain<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtpcre<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Gui<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtfreetype<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Widgets<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)qtharfbuzzng<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5Network<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)Qt5PlatformSupport<(ld_lib_postfix)',
|
||||
'<(ld_lib_prefix)imageformats\qwebp<(ld_lib_postfix)',
|
||||
],
|
||||
},
|
||||
'qt_version%': '<(qt_version)',
|
||||
'conditions': [
|
||||
[ 'build_win', {
|
||||
'qtlibs_debug': [
|
||||
'<(ld_lib_prefix)platforms/qwindowsd<(ld_lib_postfix)',
|
||||
'<@(qtlibs_debug)',
|
||||
],
|
||||
'qtlibs_release': [
|
||||
'<(ld_lib_prefix)platforms/qwindows<(ld_lib_postfix)',
|
||||
'<@(qtlibs_release)',
|
||||
],
|
||||
'qt_loc': '../../../Libraries/qt<(qt_version_loc)/qtbase',
|
||||
}, {
|
||||
'qtlibs_debug': [ '<@(qtlibs_debug)' ],
|
||||
'qtlibs_release': [ '<@(qtlibs_release)' ],
|
||||
'qt_loc': '/usr/local/qt<(qt_version_loc)/qtbase',
|
||||
}],
|
||||
],
|
||||
},
|
||||
|
||||
'configurations': {
|
||||
'Debug': {
|
||||
'conditions' : [
|
||||
[ 'build_win', {
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'AdditionalDependencies': [
|
||||
'<@(qtlibs_debug)'
|
||||
],
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
},
|
||||
'Release': {
|
||||
'conditions' : [
|
||||
[ 'build_win', {
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'AdditionalDependencies': [
|
||||
'<@(qtlibs_release)',
|
||||
],
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
},
|
||||
},
|
||||
|
||||
'include_dirs': [
|
||||
'<(qt_loc)/include',
|
||||
'<(qt_loc)/include/QtCore/<(qt_version)/QtCore',
|
||||
'<(qt_loc)/include/QtGui/<(qt_version)/QtGui',
|
||||
],
|
||||
'library_dirs': [
|
||||
'<(qt_loc)/lib',
|
||||
'<(qt_loc)/plugins',
|
||||
],
|
||||
'defines': [
|
||||
'QT_WIDGETS_LIB',
|
||||
'QT_NETWORK_LIB',
|
||||
'QT_GUI_LIB',
|
||||
'QT_CORE_LIB',
|
||||
],
|
||||
|
||||
'rules': [{
|
||||
'rule_name': 'qt_moc',
|
||||
'extension': 'h',
|
||||
'inputs': [
|
||||
],
|
||||
'outputs': [
|
||||
'<(gen_loc)/moc/moc_<(RULE_INPUT_ROOT).cpp',
|
||||
],
|
||||
'action': [
|
||||
'<(qt_loc)/bin/moc.exe',
|
||||
'<!@(python -c "for s in \'<@(_defines)\'.split(\' \'): print(\'-D\' + s))',
|
||||
'<!@(python -c "for s in \'<@(_include_dirs)\'.split(\' \'): print(\'-I\' + s))',
|
||||
'<(RULE_INPUT_PATH)',
|
||||
'-o', '<(gen_loc)/moc/moc_<(RULE_INPUT_ROOT).cpp',
|
||||
],
|
||||
'message': 'Moc-ing <(RULE_INPUT_ROOT).h..',
|
||||
'process_outputs_as_sources': 1,
|
||||
}, {
|
||||
'rule_name': 'qt_rcc',
|
||||
'extension': 'qrc',
|
||||
'inputs': [
|
||||
],
|
||||
'outputs': [
|
||||
'<(gen_loc)/qrc/qrc_<(RULE_INPUT_ROOT).cpp',
|
||||
],
|
||||
'action': [
|
||||
'<(qt_loc)/bin/rcc.exe',
|
||||
'-name', '<(RULE_INPUT_ROOT)',
|
||||
'-no-compress',
|
||||
'<(RULE_INPUT_PATH)',
|
||||
'-o', '<(gen_loc)/qrc/qrc_<(RULE_INPUT_ROOT).cpp',
|
||||
],
|
||||
'message': 'Rcc-ing <(RULE_INPUT_ROOT).qrc..',
|
||||
'process_outputs_as_sources': 1,
|
||||
}],
|
||||
}
|
11
Telegram/gyp/refresh.bat
Normal file
11
Telegram/gyp/refresh.bat
Normal file
@ -0,0 +1,11 @@
|
||||
@echo OFF
|
||||
setlocal enabledelayedexpansion
|
||||
set "FullScriptPath=%~dp0"
|
||||
set "FullExecPath=%cd%"
|
||||
|
||||
cd "%FullScriptPath%"
|
||||
call gyp --depth=. --generator-output=../build/msvs -Goutput_dir=../../../out Telegram.gyp --format=ninja
|
||||
call gyp --depth=. --generator-output=../build/msvs -Goutput_dir=../../../out Telegram.gyp --format=msvs-ninja
|
||||
cd "%FullExecPath%"
|
||||
|
||||
exit /b
|
117
Telegram/gyp/settings_win.gypi
Normal file
117
Telegram/gyp/settings_win.gypi
Normal file
@ -0,0 +1,117 @@
|
||||
# This file is part of Telegram Desktop,
|
||||
# the official desktop version of Telegram messaging app, see https://telegram.org
|
||||
#
|
||||
# Telegram Desktop 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.
|
||||
#
|
||||
# It 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.
|
||||
#
|
||||
# In addition, as a special exception, the copyright holders give permission
|
||||
# to link the code of portions of this program with the OpenSSL library.
|
||||
#
|
||||
# Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE
|
||||
# Copyright (c) 2014 John Preston, https://desktop.telegram.org
|
||||
|
||||
{
|
||||
'conditions': [
|
||||
[ 'build_win', {
|
||||
'msvs_cygwin_shell': 0,
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'ProgramDataBaseFileName': '$(OutDir)\\$(ProjectName).pdb',
|
||||
'DebugInformationFormat': '3', # Program Database (/Zi)
|
||||
'AdditionalOptions': [
|
||||
'/MP', # Enable multi process build.
|
||||
'/EHsc', # Catch C++ exceptions only, extern C functions never throw a C++ exception.
|
||||
],
|
||||
'PreprocessorDefinitions': [
|
||||
'WIN32',
|
||||
'_WINDOWS',
|
||||
'_UNICODE',
|
||||
'UNICODE',
|
||||
'HAVE_STDINT_H',
|
||||
'ZLIB_WINAPI',
|
||||
'_SCL_SECURE_NO_WARNINGS',
|
||||
],
|
||||
'TreatWChar_tAsBuiltInType': 'false',
|
||||
},
|
||||
'VCLinkerTool': {
|
||||
'SubSystem': '<(win_subsystem)',
|
||||
'ImageHasSafeExceptionHandlers': 'false', # Disable /SAFESEH
|
||||
},
|
||||
},
|
||||
'libraries': [
|
||||
'winmm',
|
||||
'imm32',
|
||||
'ws2_32',
|
||||
'kernel32',
|
||||
'user32',
|
||||
'gdi32',
|
||||
'winspool',
|
||||
'comdlg32',
|
||||
'advapi32',
|
||||
'shell32',
|
||||
'ole32',
|
||||
'oleaut32',
|
||||
'uuid',
|
||||
'odbc32',
|
||||
'odbccp32',
|
||||
# 'glu32',
|
||||
# 'opengl32',
|
||||
'Shlwapi',
|
||||
'Iphlpapi',
|
||||
'Gdiplus',
|
||||
'Strmiids',
|
||||
],
|
||||
|
||||
'configurations': {
|
||||
'Debug': {
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'Optimization': '0', # Disabled (/Od)
|
||||
'PreprocessorDefinitions': [
|
||||
],
|
||||
'RuntimeLibrary': '1', # Multi-threaded Debug (/MTd)
|
||||
},
|
||||
'VCLinkerTool': {
|
||||
'GenerateDebugInformation': 'true', # true (/DEBUG)
|
||||
'LinkIncremental': '2', # Yes (/INCREMENTAL)
|
||||
'AdditionalDependencies': [
|
||||
'msvcrtd.lib',
|
||||
],
|
||||
'AdditionalOptions': [
|
||||
'/NODEFAULTLIB:LIBCMTD'
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
'Release': {
|
||||
'msvs_settings': {
|
||||
'VCCLCompilerTool': {
|
||||
'Optimization': '2', # Maximize Speed (/O2)
|
||||
'PreprocessorDefinitions': [
|
||||
],
|
||||
'FavorSizeOrSpeed': '1', # Favor fast code (/Ot)
|
||||
'RuntimeLibrary': '0', # Multi-threaded (/MT)
|
||||
'EnableEnhancedInstructionSet': '2',# Streaming SIMD Extensions 2 (/arch:SSE2)
|
||||
},
|
||||
'VCLinkerTool': {
|
||||
'GenerateDebugInformation': 'true', # /DEBUG
|
||||
'AdditionalDependencies': [
|
||||
'msvcrt.lib',
|
||||
],
|
||||
'AdditionalOptions': [
|
||||
'/NODEFAULTLIB:LIBCMT'
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}],
|
||||
],
|
||||
}
|
Loading…
Reference in New Issue
Block a user