diff --git a/Telegram/SourceFiles/_other/Style.plist b/Telegram/Packer.plist similarity index 73% rename from Telegram/SourceFiles/_other/Style.plist rename to Telegram/Packer.plist index 2df9c0113..f1583971a 100644 --- a/Telegram/SourceFiles/_other/Style.plist +++ b/Telegram/Packer.plist @@ -2,21 +2,21 @@ - NSPrincipalClass - NSApplication + CFBundleExecutable + Packer + CFBundleGetInfoString + Update packer utility for tdesktop CFBundleIconFile + CFBundleIdentifier + com.ddesktop.${PRODUCT_NAME:rfc1034identifier} CFBundlePackageType APPL - CFBundleGetInfoString - Created by Qt/QMake CFBundleSignature ???? - CFBundleExecutable - MetaStyle - CFBundleIdentifier - com.yourcompany.${PRODUCT_NAME:rfc1034identifier} NOTE - This file was generated by Qt/QMake. + + NSPrincipalClass + NSApplication diff --git a/Telegram/Packer.pro b/Telegram/Packer.pro new file mode 100644 index 000000000..4fb98d457 --- /dev/null +++ b/Telegram/Packer.pro @@ -0,0 +1,32 @@ +QT += core + +CONFIG(debug, debug|release) { + DEFINES += _DEBUG + OBJECTS_DIR = ./../Mac/DebugIntermediatePacker + MOC_DIR = ./GeneratedFiles/Debug + DESTDIR = ./../Mac/DebugPacker +} +CONFIG(release, debug|release) { + OBJECTS_DIR = ./../Mac/ReleaseIntermediatePacker + MOC_DIR = ./GeneratedFiles/Release + DESTDIR = ./../Mac/ReleasePacker +} + +macx { + QMAKE_INFO_PLIST = ./SourceFiles/_other/Packer.plist + QMAKE_LFLAGS += -framework Cocoa +} + +SOURCES += \ + ./SourceFiles/_other/packer.cpp \ + +HEADERS += \ + ./SourceFiles/_other/packer.h \ + +INCLUDEPATH += ./../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui\ + ./../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore\ + ./../../Libraries/QtStatic/qtbase/include\ + ./../../Libraries/lzma/C + +LIBS += -lcrypto -lssl -lz + diff --git a/Telegram/Packer.xcodeproj/project.pbxproj b/Telegram/Packer.xcodeproj/project.pbxproj new file mode 100644 index 000000000..4ae0e10f9 --- /dev/null +++ b/Telegram/Packer.xcodeproj/project.pbxproj @@ -0,0 +1,823 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXAggregateTarget section */ + 6E977D353048DB44129F752B /* Preprocess */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */; + buildPhases = ( + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */, + ); + dependencies = ( + ); + name = Preprocess; + productName = "Qt Preprocess"; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DBF506D10449BFABD45B82DA /* Qt5PrintSupport */; }; + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */; }; + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DFD7912080BC557230093752 /* ApplicationServices.framework */; }; + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8F500B5166907B6D9A7C3E3D /* qico */; }; + 52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */; settings = {ATTRIBUTES = (); }; }; + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F0681BC551FC8A2B132FC646 /* qjp2 */; }; + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9742F24EE18EA44D52824F1E /* CoreServices.framework */; }; + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 31120EDB269DFF13E1D49847 /* qicns */; }; + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = DCEFD9167C239650120B0145 /* qtga */; }; + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D4B32C2222F82AC56BADEB21 /* OpenGL.framework */; }; + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = A1A67BEAA744704B29168D39 /* IOKit.framework */; }; + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D6193B79CECC9DD0142D1200 /* qtharfbuzzng */; }; + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 04391BE7A8B9D811E255100A /* Qt5Gui */; }; + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8CF51323544B886B8F4A2232 /* qwbmp */; }; + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D3D1BE0BEA3AEE0551AD39AC /* qdds */; }; + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 5A80A1907B6CFFB524C1E57D /* Qt5Core */; }; + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */; }; + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = F2453BA07315EB9F34F1CD57 /* qtiff */; }; + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = D53D8E6A188E05078A114294 /* qcocoa */; }; + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */; }; + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */; }; + EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */ = {isa = PBXBuildFile; fileRef = E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */; settings = {ATTRIBUTES = (); }; }; + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = FCC237CA5AD60B9BA4447615 /* Foundation.framework */; }; + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = ADC6308023253CEA51F86E21 /* qwebp */; }; + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */; }; + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 9DFF62A901D70814B8A323D4 /* Carbon.framework */; }; + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */ = {isa = PBXBuildFile; fileRef = 83D37373949868693FB7816D /* qmng */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 072AB35C1955F39D00328D9B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 6E977D353048DB44129F752B; + remoteInfo = "Qt Preprocess"; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 04391BE7A8B9D811E255100A /* Qt5Gui */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Gui; path = "/usr/local/Qt-5.3.0/lib/libQt5Gui$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/unix.conf"; sourceTree = ""; }; + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri"; sourceTree = ""; }; + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri"; sourceTree = ""; }; + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri"; sourceTree = ""; }; + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri"; sourceTree = ""; }; + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri"; sourceTree = ""; }; + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri"; sourceTree = ""; }; + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri"; sourceTree = ""; }; + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri"; sourceTree = ""; }; + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri"; sourceTree = ""; }; + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri"; sourceTree = ""; }; + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri"; sourceTree = ""; }; + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri"; sourceTree = ""; }; + 31120EDB269DFF13E1D49847 /* qicns */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qicns; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqicns$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri"; sourceTree = ""; }; + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri"; sourceTree = ""; }; + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri"; sourceTree = ""; }; + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri"; sourceTree = ""; }; + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri"; sourceTree = ""; }; + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri"; sourceTree = ""; }; + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf"; sourceTree = ""; }; + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri"; sourceTree = ""; }; + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Widgets; path = "/usr/local/Qt-5.3.0/lib/libQt5Widgets$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri"; sourceTree = ""; }; + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri"; sourceTree = ""; }; + 5520A59148EC5EC44EF0D3CD /* Packer.pro */ = {isa = PBXFileReference; lastKnownFileType = text; path = Packer.pro; sourceTree = ""; }; + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri"; sourceTree = ""; }; + 5A80A1907B6CFFB524C1E57D /* Qt5Core */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5Core; path = "/usr/local/Qt-5.3.0/lib/libQt5Core$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 5AA25EFD83BC060B26945285 /* packer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = packer.h; path = SourceFiles/_other/packer.h; sourceTree = ""; }; + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri"; sourceTree = ""; }; + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri"; sourceTree = ""; }; + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri"; sourceTree = ""; }; + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri"; sourceTree = ""; }; + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf"; sourceTree = ""; }; + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf"; sourceTree = ""; }; + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri"; sourceTree = ""; }; + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri"; sourceTree = ""; }; + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qdevice.pri"; sourceTree = ""; }; + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri"; sourceTree = ""; }; + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri"; sourceTree = ""; }; + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri"; sourceTree = ""; }; + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri"; sourceTree = ""; }; + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri"; sourceTree = ""; }; + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri"; sourceTree = ""; }; + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri"; sourceTree = ""; }; + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/macx.conf"; sourceTree = ""; }; + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri"; sourceTree = ""; }; + 83D37373949868693FB7816D /* qmng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qmng; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqmng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf"; sourceTree = ""; }; + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri"; sourceTree = ""; }; + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri"; sourceTree = ""; }; + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri"; sourceTree = ""; }; + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri"; sourceTree = ""; }; + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri"; sourceTree = ""; }; + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri"; sourceTree = ""; }; + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri"; sourceTree = ""; }; + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri"; sourceTree = ""; }; + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri"; sourceTree = ""; }; + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang.conf"; sourceTree = ""; }; + 8CF51323544B886B8F4A2232 /* qwbmp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwbmp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwbmp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AGL.framework; path = /System/Library/Frameworks/AGL.framework; sourceTree = ""; }; + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri"; sourceTree = ""; }; + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri"; sourceTree = ""; }; + 8F500B5166907B6D9A7C3E3D /* qico */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qico; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqico$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri"; sourceTree = ""; }; + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri"; sourceTree = ""; }; + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri"; sourceTree = ""; }; + 9742F24EE18EA44D52824F1E /* CoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; sourceTree = ""; }; + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri"; sourceTree = ""; }; + 9DFF62A901D70814B8A323D4 /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri"; sourceTree = ""; }; + A1A67BEAA744704B29168D39 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri"; sourceTree = ""; }; + A5588D4B50885E2A9CAA5505 /* Packer.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Packer.app; sourceTree = BUILT_PRODUCTS_DIR; }; + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri"; sourceTree = ""; }; + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri"; sourceTree = ""; }; + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf"; sourceTree = ""; }; + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri"; sourceTree = ""; }; + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri"; sourceTree = ""; }; + AB745978DF0F41D1801ABDA6 /* .qmake.stash */ = {isa = PBXFileReference; lastKnownFileType = file; path = .qmake.stash; sourceTree = ""; }; + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri"; sourceTree = ""; }; + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri"; sourceTree = ""; }; + ADC6308023253CEA51F86E21 /* qwebp */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qwebp; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqwebp$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri"; sourceTree = ""; }; + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri"; sourceTree = ""; }; + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri"; sourceTree = ""; }; + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri"; sourceTree = ""; }; + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri"; sourceTree = ""; }; + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri"; sourceTree = ""; }; + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri"; sourceTree = ""; }; + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri"; sourceTree = ""; }; + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri"; sourceTree = ""; }; + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri"; sourceTree = ""; }; + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri"; sourceTree = ""; }; + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri"; sourceTree = ""; }; + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri"; sourceTree = ""; }; + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri"; sourceTree = ""; }; + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri"; sourceTree = ""; }; + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri"; sourceTree = ""; }; + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri"; sourceTree = ""; }; + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri"; sourceTree = ""; }; + CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = packer_plugin_import.cpp; sourceTree = ""; }; + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri"; sourceTree = ""; }; + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri"; sourceTree = ""; }; + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri"; sourceTree = ""; }; + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri"; sourceTree = ""; }; + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri"; sourceTree = ""; }; + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri"; sourceTree = ""; }; + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri"; sourceTree = ""; }; + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri"; sourceTree = ""; }; + D3D1BE0BEA3AEE0551AD39AC /* qdds */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qdds; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqdds$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = ""; }; + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/qconfig.pri"; sourceTree = ""; }; + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri"; sourceTree = ""; }; + D53D8E6A188E05078A114294 /* qcocoa */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qcocoa; path = "/usr/local/Qt-5.3.0/plugins/platforms/libqcocoa$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtharfbuzzng; path = "/usr/local/Qt-5.3.0/lib/libqtharfbuzzng$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri"; sourceTree = ""; }; + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri"; sourceTree = ""; }; + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri"; sourceTree = ""; }; + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri"; sourceTree = ""; }; + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PrintSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PrintSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DCEFD9167C239650120B0145 /* qtga */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtga; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtga$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri"; sourceTree = ""; }; + DFD7912080BC557230093752 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = ""; }; + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri"; sourceTree = ""; }; + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri"; sourceTree = ""; }; + E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = packer.cpp; path = SourceFiles/_other/packer.cpp; sourceTree = ""; }; + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri"; sourceTree = ""; }; + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri"; sourceTree = ""; }; + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri"; sourceTree = ""; }; + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = Qt5PlatformSupport; path = "/usr/local/Qt-5.3.0/lib/libQt5PlatformSupport$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri"; sourceTree = ""; }; + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri"; sourceTree = ""; }; + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri"; sourceTree = ""; }; + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri"; sourceTree = ""; }; + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/mac.conf"; sourceTree = ""; }; + F0681BC551FC8A2B132FC646 /* qjp2 */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qjp2; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqjp2$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri"; sourceTree = ""; }; + F2453BA07315EB9F34F1CD57 /* qtiff */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = qtiff; path = "/usr/local/Qt-5.3.0/plugins/imageformats/libqtiff$(QT_LIBRARY_SUFFIX).a"; sourceTree = ""; }; + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri"; sourceTree = ""; }; + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf"; sourceTree = ""; }; + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri"; sourceTree = ""; }; + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri"; sourceTree = ""; }; + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri"; sourceTree = ""; }; + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri"; sourceTree = ""; }; + FCC237CA5AD60B9BA4447615 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + D1C883685E82D5676953459A /* Link Binary With Libraries */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 1BB705CDB741E2B7450201A5 /* Cocoa.framework in Link Binary With Libraries */, + 328FD74542F6E2C873EE4D4B /* ApplicationServices.framework in Link Binary With Libraries */, + 668DDDA0C55405E7FCFD6CA5 /* CoreServices.framework in Link Binary With Libraries */, + F8B465CE34D8DF87AAE95913 /* CoreFoundation.framework in Link Binary With Libraries */, + F26454630C80841CBDCFE1CA /* Foundation.framework in Link Binary With Libraries */, + 8771A8C96E9C391044035D99 /* OpenGL.framework in Link Binary With Libraries */, + E45E51A644D5FC9F942ECE55 /* AGL.framework in Link Binary With Libraries */, + D1FA8AF31837B51C762A9D4D /* qcocoa in Link Binary With Libraries */, + F8ED42CF8679BF83227DAFC4 /* Carbon.framework in Link Binary With Libraries */, + 8D267F2E4776F0ECA2F49DC8 /* IOKit.framework in Link Binary With Libraries */, + 1A681B886F50EE30FBE62B4B /* Qt5PrintSupport in Link Binary With Libraries */, + D22929A2B8C5281567FCACDC /* Qt5PlatformSupport in Link Binary With Libraries */, + BE6AB9DF1C4880624131C669 /* Qt5Widgets in Link Binary With Libraries */, + A9563D9C9FD0D76FAAF1CA96 /* qdds in Link Binary With Libraries */, + 7CA5405B8503BFFC60932D2B /* qicns in Link Binary With Libraries */, + 496FD9CEEB508016AFB9F928 /* qico in Link Binary With Libraries */, + 59789101736112A570B8EFE6 /* qjp2 in Link Binary With Libraries */, + FBD56E2AC34F76BFFDB68619 /* qmng in Link Binary With Libraries */, + 7F76437B577F737145996DC3 /* qtga in Link Binary With Libraries */, + C06DDE378A7AC1FA9E6FF69A /* qtiff in Link Binary With Libraries */, + A3F8F2284013928A02AE5C38 /* qwbmp in Link Binary With Libraries */, + F4D3747C3A03B25EDC9057BB /* qwebp in Link Binary With Libraries */, + 9F33AC0693BC81B27D8F518D /* Qt5Gui in Link Binary With Libraries */, + 8D33FE22B9BBADC7FA46C15B /* qtharfbuzzng in Link Binary With Libraries */, + B9ADD90C014EA3FBE351DF03 /* Qt5Core in Link Binary With Libraries */, + ); + name = "Link Binary With Libraries"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 2EB56BE3C2D93CDAB0C52E67 /* Sources */ = { + isa = PBXGroup; + children = ( + 73F2E45FDEB381A085D37A49 /* SourceFiles */, + CB20BF73330AAF80B8BC8907 /* packer_plugin_import.cpp */, + ); + name = Sources; + sourceTree = ""; + }; + 31562E815E3DF5B1A777D3EF /* _other */ = { + isa = PBXGroup; + children = ( + E3790AE49DBDB3F5EFA42FE1 /* packer.cpp */, + 5AA25EFD83BC060B26945285 /* packer.h */, + ); + name = _other; + sourceTree = ""; + }; + 73F2E45FDEB381A085D37A49 /* SourceFiles */ = { + isa = PBXGroup; + children = ( + 31562E815E3DF5B1A777D3EF /* _other */, + ); + name = SourceFiles; + sourceTree = ""; + }; + 74B182DB50CB5611B5C1C297 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 5520A59148EC5EC44EF0D3CD /* Packer.pro */, + 6E67D23B15FC4B628DB2E0B2 /* /usr/local/Qt-5.3.0/mkspecs/qdevice.pri */, + 669FB007C4A3D58424D85EC8 /* /usr/local/Qt-5.3.0/mkspecs/common/shell-unix.conf */, + 0ABCEA8D0DD45589040B0AF2 /* /usr/local/Qt-5.3.0/mkspecs/common/unix.conf */, + EBD39B69F368CEEAC360A16D /* /usr/local/Qt-5.3.0/mkspecs/common/mac.conf */, + 817A0F5A41B553A6DE67FDEB /* /usr/local/Qt-5.3.0/mkspecs/common/macx.conf */, + 45B95DB3B70B47A910FC847B /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base.conf */, + A9E30FA27827990C5F182223 /* /usr/local/Qt-5.3.0/mkspecs/common/gcc-base-mac.conf */, + 8C5164D4E37556D40C5E6AA2 /* /usr/local/Qt-5.3.0/mkspecs/common/clang.conf */, + F33BE16353DD1557A9AB3558 /* /usr/local/Qt-5.3.0/mkspecs/common/clang-mac.conf */, + D4DE537C1FBBD48BD989FAD1 /* /usr/local/Qt-5.3.0/mkspecs/qconfig.pri */, + ACC8A73268E5D9AF64E97AF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth.pri */, + 2E48BB382B895A5ACD79AF9F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bluetooth_private.pri */, + BD4D97801B547471B37A4CDC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_bootstrap_private.pri */, + CF86CD5BB01B9011E6B6FD3E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_clucene_private.pri */, + 77FF486B1F9BCD55A8A3F35D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent.pri */, + 7D28E9003CE64D8A7F2E292E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_concurrent_private.pri */, + 7ECCC1F9442988B4F2707CC1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core.pri */, + 5F781C7FD8422D359EA1D2FE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_core_private.pri */, + 7A94C7168B3FCBE5F04A013B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative.pri */, + 89863CCAF1D29037AE95755D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_declarative_private.pri */, + F2F823087EA182CCBD5748B8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer.pri */, + 7C2F42B222EE88E26A6FED62 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designer_private.pri */, + 69347C39E4D922E94D0860BF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_designercomponents_private.pri */, + 360D4B3ED25D126430DE27D4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio.pri */, + 4C6C71914B1926119120DACD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_enginio_private.pri */, + 23BC8B0FC3279421D41CA268 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui.pri */, + D81E3D9A18202BE8EC3D0E2C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_gui_private.pri */, + FD944B80F033DFE737D401A2 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help.pri */, + D7A0618DE39A427EBF41940E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_help_private.pri */, + A5B17ABEFBA1C2F43443D644 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras.pri */, + 33F165B1DB8CBF182C56FAB5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_macextras_private.pri */, + D2FE4D909926A0D1656068C4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia.pri */, + E7D67CB158408BB7DEA74764 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimedia_private.pri */, + 28BD0D10214709D95B161E24 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets.pri */, + D1FA7CAB5ACC09D563AE569F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_multimediawidgets_private.pri */, + 293C8DEEE270847AC20E70F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network.pri */, + 382E89A91A34F7898C25FD0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_network_private.pri */, + 8A04A4A3625204D12A1207F6 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc.pri */, + B51B01657BFE9EAEF5590561 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_nfc_private.pri */, + 5CEA7A2DB2136425A88D1254 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl.pri */, + E0F4563EA350EB65112A0EF4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_opengl_private.pri */, + E432DA897A5F027987342E8F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions.pri */, + 5597304BEC94BFB9EAAEBC4B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_openglextensions_private.pri */, + 8F572030CE9AB8CC5F672201 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_platformsupport_private.pri */, + F7ADBF552F6B9A5982915164 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning.pri */, + E66B9EC81C285CA9A7FB6A2E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_positioning_private.pri */, + 6C08BFC27C4C303A3A5181DB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport.pri */, + D0CDC87DAFDA7F18A7AF450F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_printsupport_private.pri */, + B382B645B34234E451AE5D94 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml.pri */, + 6102C69805B6398AF6FA5BEB /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qml_private.pri */, + 4FB6657DA22BC68B819B64B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmldevtools_private.pri */, + DF8188E30892A4654B984221 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest.pri */, + ABA9AB4619F09DCFD2D4A27F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qmltest_private.pri */, + 5B22E9E4EE9AAE42ABC24AB3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri */, + 16DD53E17C65AC8B450CC6C3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick.pri */, + 8C31D89BDFCDF466DAED19A0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quick_private.pri */, + 82E7DCFD95559532D8FC6CDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickparticles_private.pri */, + D948D4D8F949D45158F8DE35 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets.pri */, + B2246267D4C0D789259A86B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_quickwidgets_private.pri */, + CFCB992BEC24B71BFB8A2F30 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script.pri */, + C505A18319B9B63C63877858 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_script_private.pri */, + CE829DD126DD2B97E8D70A7A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools.pri */, + A59F74CD76FDC2B4B9910E18 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_scripttools_private.pri */, + 85B6936EDBE61D9BB8F8B33B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors.pri */, + BDC9ECADEE40D11E3C2EA93F /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sensors_private.pri */, + BFF0C38FB0EC140C5F0304AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport.pri */, + 311004331A04F3D69C98643C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_serialport_private.pri */, + 7DE30A90667C03C4F91A2A91 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql.pri */, + 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */, + ADFC79902C14A612AE93A89A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg.pri */, + 8DDE1D26B3206CDB8B57FABE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_svg_private.pri */, + DB0A26DDC377B2004F61BFE3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib.pri */, + 8849E60AEC7DB97A475C17EA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_testlib_private.pri */, + E50FA73B8A23BC179A642B27 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools.pri */, + B518DA4EE7376002AFC71FD5 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_uitools_private.pri */, + 8F97C9CAE38CA3AFAC0B3953 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets.pri */, + 87EEF25EE25CF21572D1438C /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_websockets_private.pri */, + A022AF919D1977534CA66BB8 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets.pri */, + 8E9136256AFFBA6EF048AA55 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_widgets_private.pri */, + AA73DC3C2901E2979FE8AD5B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml.pri */, + E37365B4489B4918BEBB707D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xml_private.pri */, + 2E6D9B1D2743D24E31B0B284 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns.pri */, + F9BEAA743A908603687DA204 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_xmlpatterns_private.pri */, + D5141F795670589C8CC41CBC /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_cocoaprintersupport.pri */, + 1FAE75C970AA73F2DEDDB508 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfcamera.pri */, + F4EB01857048DCFCFFAAC4D0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qavfmediaplayer.pri */, + AFD721AA33A2F785E77B1698 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcocoa.pri */, + EA5D4FF9DE4AC4215D7DCE0D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qcorewlanbearer.pri */, + 111BBEE3D1432C3B517FD539 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdds.pri */, + 3685604BDB64DD6E92169B73 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qdeclarativeview.pri */, + 2440CD1D4CEF80443BCA1B8B /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qgenericbearer.pri */, + EB1F99FD112917157F3C3F6E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qicns.pri */, + C4295BE59CCEBCDD16268349 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qico.pri */, + 45DB132B756499D4DF38430E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qjp2.pri */, + B678DA730B4ECE863AD631AE /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qminimal.pri */, + F0A58515945747E36783CC21 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_inspector.pri */, + B8525798C5AA7D7C6D68E1B3 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_qtquick2.pri */, + EB29AC635054C09EFA749AE1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp.pri */, + 3F08D430CEC8D2117735CCB4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmldbg_tcp_qtdeclarative.pri */, + 946BEA667170DC1A7A8F9DB0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qmng.pri */, + CCF75CFFB857487FB18F99F9 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qoffscreen.pri */, + 9A0BDF67E013BB4FFB8685B0 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qqt7engine.pri */, + B064BF3B496A7BF7A449CA1E /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsqlite.pri */, + F83F87F8A60C9DF666911D42 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvg.pri */, + CFFBE05DB004895080314289 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qsvgicon.pri */, + 247D8DF3B1DDB665B80BBA25 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblequick.pri */, + 87A4C1983FD641360BF80A02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaccessiblewidgets.pri */, + 24B6929EE3952310F2DAECB1 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtaudio_coreaudio.pri */, + 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */, + BD22EFEFCC02644B1883CE19 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtiff.pri */, + B8C1F6C965A7A14FBA8D4518 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmedia_audioengine.pri */, + 74C1C232DFAA71028A0412CA /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtmultimedia_m3u.pri */, + C84546C18DCBB04166195DCF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtposition_positionpoll.pri */, + AB1C02DDBD8E88DD9A9AFDDD /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_plugin.pri */, + 8B4BB4E74F8A4442EF563D7D /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensorgestures_shakeplugin.pri */, + 892D36BEF797BA4AF48D378A /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_dummy.pri */, + A4D8AC60897F435C1C3B9D02 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtsensors_generic.pri */, + 346287C9E754E7C458153F03 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwbmp.pri */, + B26239063A068F800A2C95F4 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qwebp.pri */, + 63E722139886C87BC82DBDF5 /* /usr/local/Qt-5.3.0/mkspecs/macx-clang/qmake.conf */, + 85061B1DA49D125991117950 /* /usr/local/Qt-5.3.0/mkspecs/macx-xcode/qmake.conf */, + AB745978DF0F41D1801ABDA6 /* .qmake.stash */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + AF39DD055C3EF8226FBE929D /* Frameworks */ = { + isa = PBXGroup; + children = ( + AEA456A2F75ED9F5CDA7BCBE /* Cocoa.framework */, + DFD7912080BC557230093752 /* ApplicationServices.framework */, + 9742F24EE18EA44D52824F1E /* CoreServices.framework */, + 4D765E1B1EA6C757220C63E7 /* CoreFoundation.framework */, + FCC237CA5AD60B9BA4447615 /* Foundation.framework */, + D4B32C2222F82AC56BADEB21 /* OpenGL.framework */, + 8D9815BDB5BD9F90D2BC05C5 /* AGL.framework */, + D53D8E6A188E05078A114294 /* qcocoa */, + 9DFF62A901D70814B8A323D4 /* Carbon.framework */, + A1A67BEAA744704B29168D39 /* IOKit.framework */, + DBF506D10449BFABD45B82DA /* Qt5PrintSupport */, + E7B2F248E3F7970788F35BF5 /* Qt5PlatformSupport */, + 4689C06178B60B84E7F3A3B7 /* Qt5Widgets */, + D3D1BE0BEA3AEE0551AD39AC /* qdds */, + 31120EDB269DFF13E1D49847 /* qicns */, + 8F500B5166907B6D9A7C3E3D /* qico */, + F0681BC551FC8A2B132FC646 /* qjp2 */, + 83D37373949868693FB7816D /* qmng */, + DCEFD9167C239650120B0145 /* qtga */, + F2453BA07315EB9F34F1CD57 /* qtiff */, + 8CF51323544B886B8F4A2232 /* qwbmp */, + ADC6308023253CEA51F86E21 /* qwebp */, + 04391BE7A8B9D811E255100A /* Qt5Gui */, + D6193B79CECC9DD0142D1200 /* qtharfbuzzng */, + 5A80A1907B6CFFB524C1E57D /* Qt5Core */, + ); + name = Frameworks; + sourceTree = ""; + }; + E8C543AB96796ECAA2E65C57 /* Packer */ = { + isa = PBXGroup; + children = ( + 2EB56BE3C2D93CDAB0C52E67 /* Sources */, + 74B182DB50CB5611B5C1C297 /* Supporting Files */, + AF39DD055C3EF8226FBE929D /* Frameworks */, + FE0A091FDBFB3E9C31B7A1BD /* Products */, + ); + name = Packer; + sourceTree = ""; + }; + FE0A091FDBFB3E9C31B7A1BD /* Products */ = { + isa = PBXGroup; + children = ( + A5588D4B50885E2A9CAA5505 /* Packer.app */, + ); + name = Products; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + FD92333211119EF3CA40F70D /* Packer */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */; + buildPhases = ( + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */, + D1C883685E82D5676953459A /* Link Binary With Libraries */, + ); + buildRules = ( + ); + dependencies = ( + A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */, + ); + name = Packer; + productInstallPath = ../Mac/DebugPacker/; + productName = Packer; + productReference = A5588D4B50885E2A9CAA5505 /* Packer.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 6DB9C3763D02B1415CD9D565 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 1; + knownRegions = ( + en, + ); + mainGroup = E8C543AB96796ECAA2E65C57 /* Packer */; + productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + FD92333211119EF3CA40F70D /* Packer */, + 6E977D353048DB44129F752B /* Preprocess */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + 7EF0942E79C014DCEC8976BC /* Qt Preprocessors */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + name = "Qt Preprocessors"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "make -C . -f Packer.xcodeproj/qt_preprocess.mak"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F7E50F631C51CD5B5DC0BC43 /* Compile Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + EAA05789DF6EBAD24D3EFF96 /* packer.cpp in Compile Sources */, + 52B661A713AE959F9084E291 /* packer_plugin_import.cpp in Compile Sources */, + ); + name = "Compile Sources"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + A7CD3B627B093BF0A5BBA9AE /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 6E977D353048DB44129F752B /* Preprocess */; + targetProxy = 072AB35C1955F39D00328D9B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 339EE1B2CC4FC24589A0EA95 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + /usr/local/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Packer.plist; + INSTALL_DIR = "../Mac/$(CONFIGURATION)"; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-lcrypto", + "-lssl", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + "-llzma", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Release; + }; + 3AA6C32AC930069E80220CF1 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CC = /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + DYLIB_COMPATIBILITY_VERSION = 1.0; + DYLIB_CURRENT_VERSION = 1.0.0; + FRAMEWORK_SEARCH_PATHS = ""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + HEADER_SEARCH_PATHS = ( + ../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui, + ../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore, + ../../Libraries/QtStatic/qtbase/include, + /usr/local/include, + "/usr/local/Qt-5.3.0/include", + "/usr/local/Qt-5.3.0/include/QtGui", + "/usr/local/Qt-5.3.0/include/QtCore", + GeneratedFiles/Debug, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers, + /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers, + "/usr/local/Qt-5.3.0/mkspecs/macx-clang", + ); + INFOPLIST_FILE = Packer.plist; + INSTALL_DIR = "../Mac/$(CONFIGURATION)"; + LDPLUSPLUS = "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++"; + LIBRARY_SEARCH_PATHS = ( + /System/Library/Frameworks/, + "/usr/local/Qt-5.3.0/lib", + "/usr/local/Qt-5.3.0/plugins/platforms", + "/usr/local/Qt-5.3.0/plugins/imageformats", + ); + MACOSX_DEPLOYMENT_TARGET = 10.7; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker/"; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + ); + OTHER_LDFLAGS = ( + "-headerpad_max_install_names", + "-stdlib=libc++", + "-lcrypto", + "-lssl", + "-L/usr/local/Qt-5.3.0/lib", + "-L/usr/local/Qt-5.3.0/plugins/platforms", + "-lcups", + "-L/usr/local/Qt-5.3.0/plugins/imageformats", + "-lz", + "-lm", + "-llzma", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Debug; + }; + 6666AA5E688052234F6758D8 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + GCC_GENERATE_DEBUGGING_SYMBOLS = NO; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = ""; + SDKROOT = macosx; + }; + name = Release; + }; + 77418F46922677BB04ED38DD /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediatePacker"; + OTHER_CFLAGS = ( + "-pipe", + "-g", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + OTHER_CPLUSPLUSFLAGS = ( + "-pipe", + "-g", + "-std=c++11", + "-stdlib=libc++", + "-Wall", + "-W", + "-fPIE", + "-D_DEBUG", + "-DQT_GUI_LIB", + "-DQT_CORE_LIB", + "-I./../../Libraries/openssl-xcode/include", + ); + PRODUCT_NAME = Packer; + QT_LIBRARY_SUFFIX = _debug; + SDKROOT = macosx; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 6CC3B5D2136C7CD6A5CF5A59 /* Build configuration list for PBXNativeTarget "Packer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 77418F46922677BB04ED38DD /* Debug */, + 6666AA5E688052234F6758D8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + DAC4C1AA5EDEA1C85E9CA5E6 /* Build configuration list for PBXProject "Packer" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3AA6C32AC930069E80220CF1 /* Debug */, + 339EE1B2CC4FC24589A0EA95 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 6DB9C3763D02B1415CD9D565 /* Project object */; +} diff --git a/Telegram/Packer.xcodeproj/qt_preprocess.mak b/Telegram/Packer.xcodeproj/qt_preprocess.mak new file mode 100644 index 000000000..cb1a0f014 --- /dev/null +++ b/Telegram/Packer.xcodeproj/qt_preprocess.mak @@ -0,0 +1,52 @@ +############################################################################# +# Makefile for building: ../Mac/DebugPacker/Packer.app/Contents/MacOS/Packer +# Generated by qmake (3.0) (Qt 5.3.0) +# Project: Packer.pro +# Template: app +# Command: /usr/local/Qt-5.3.0/bin/qmake -spec macx-xcode -o Packer.xcodeproj/project.pbxproj Packer.pro +############################################################################# + +MAKEFILE = project.pbxproj + +MOC = /usr/local/Qt-5.3.0/bin/moc +UIC = +LEX = flex +LEXFLAGS = +YACC = yacc +YACCFLAGS = -d +DEFINES = -D_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB +INCPATH = -I/usr/local/Qt-5.3.0/mkspecs/macx-clang -I. -I../../Libraries/QtStatic/qtbase/include/QtGui/5.3.0/QtGui -I../../Libraries/QtStatic/qtbase/include/QtCore/5.3.0/QtCore -I../../Libraries/QtStatic/qtbase/include -I../../Libraries/lzma/C -I/usr/local/Qt-5.3.0/include -I/usr/local/Qt-5.3.0/include/QtGui -I/usr/local/Qt-5.3.0/include/QtCore -IGeneratedFiles/Debug -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/OpenGL.framework/Versions/A/Headers -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/AGL.framework/Headers +DEL_FILE = rm -f +MOVE = mv -f + +IMAGES = +PARSERS = +preprocess: $(PARSERS) compilers +clean preprocess_clean: parser_clean compiler_clean + +parser_clean: +mocclean: compiler_moc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_source_make_all + +check: first + +compilers: +compiler_objective_c_make_all: +compiler_objective_c_clean: +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_header_make_all: +compiler_moc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_rez_source_make_all: +compiler_rez_source_clean: +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: + diff --git a/Telegram/Prepare.sh b/Telegram/Prepare.sh new file mode 100755 index 000000000..dfdbb5c5a --- /dev/null +++ b/Telegram/Prepare.sh @@ -0,0 +1,32 @@ +AppVersionStr=0.5.5 +AppVersion=5005 + +if [ -d "deploy/$AppVersionStr" ]; then + echo "Deploy folder for version $AppVersionStr already exists!" + exit 1 +fi + +if [ -f "tupdate$AppVersion" ]; then + echo "Update file for version $AppVersion already exists!" + exit 1 +fi + +if [ ! -d "Telegram.app" ]; then + echo "Telegram.app not found!" + exit 1 +fi +echo "Preparing version $AppVersionStr, executing Packer.." +./Packer.app/Contents/MacOS/Packer -path Telegram.app -version $AppVersion +echo "Packer done!" + +if [ ! -d "deploy/" ]; then + mkdir "deploy" +fi +echo "Copying Telegram.app and tmacupd$AppVersion to deploy/$AppVersionStr.."; +mkdir "deploy/$AppVersionStr" +mkdir "deploy/$AppVersionStr/Telegram" +mv Telegram.app deploy/$AppVersionStr/Telegram/ +mv tmacupd$AppVersion deploy/$AppVersionStr/ +mv Telegram.dmg deploy/$AppVersionStr/ +echo "Version $AppVersionStr prepared!"; + diff --git a/Telegram/SourceFiles/_other/packer.cpp b/Telegram/SourceFiles/_other/packer.cpp index b3b6097fb..49fe55453 100644 --- a/Telegram/SourceFiles/_other/packer.cpp +++ b/Telegram/SourceFiles/_other/packer.cpp @@ -111,12 +111,26 @@ int32 *hashSha1(const void *data, uint32 len, void *dest) { int main(int argc, char *argv[]) { + QString workDir; +#ifdef Q_OS_MAC + if (QDir(QString()).absolutePath() == "/") { + QString first = argc ? QString::fromLocal8Bit(argv[0]) : QString(); + if (!first.isEmpty()) { + QFileInfo info(first); + if (info.exists()) { + QDir result(info.absolutePath() + "/../../.."); + workDir = result.absolutePath() + '/'; + } + } + } +#endif + QString remove; int version = 0; QFileInfoList files; for (int i = 0; i < argc; ++i) { if (string("-path") == argv[i] && i + 1 < argc) { - QString path = QString(argv[i + 1]); + QString path = workDir + QString(argv[i + 1]); QFileInfo info(path); files.push_back(info); if (remove.isEmpty()) remove = info.canonicalPath() + "/"; @@ -126,8 +140,12 @@ int main(int argc, char *argv[]) } if (files.isEmpty() || remove.isEmpty() || version <= 1016 || version > 999999) { // not for release =) +#ifdef Q_OS_WIN cout << "Usage: Packer.exe -path {file} -version {version} OR Packer.exe -path {dir} -version {version}\n"; - return 0; +#elif defined Q_OS_MAC + cout << "Usage: Packer.app -path {file} -version {version} OR Packer.app -path {dir} -version {version}\n"; +#endif + return -1; } bool hasDirs = true; @@ -147,6 +165,10 @@ int main(int argc, char *argv[]) } else if (!info.isReadable()) { cout << "Can't read: " << info.absoluteFilePath().toUtf8().constData() << "\n"; return -1; + } else if (info.isHidden()) { + hasDirs = true; + files.erase(i); + break; } } } @@ -182,6 +204,9 @@ int main(int argc, char *argv[]) } QByteArray inner = f.readAll(); stream << name << quint32(inner.size()) << inner; +#if defined Q_OS_MAC || defined Q_OS_LINUX + stream << (QFileInfo(fullName).isExecutable() ? true : false); +#endif } if (stream.status() != QDataStream::Ok) { cout << "Stream status is bad: " << stream.status() << "\n"; @@ -193,20 +218,19 @@ int main(int argc, char *argv[]) cout << "Compression start, size: " << resultSize << "\n"; QByteArray compressed, resultCheck; - +#ifdef Q_OS_WIN // use Lzma SDK for win const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size size_t compressedLen = compressed.size() - hSize; - uchar outProps[LZMA_PROPS_SIZE]; size_t outPropsSize = LZMA_PROPS_SIZE; int res = LzmaCompress((uchar*)(compressed.data() + hSize), &compressedLen, (const uchar*)(result.constData()), result.size(), (uchar*)(compressed.data() + hSigLen + hShaLen), &outPropsSize, 9, 64 * 1024 * 1024, 0, 0, 0, 0, 0); if (res != SZ_OK) { cout << "Error in compression: " << res << "\n"; return -1; } - compressed.resize(hSize + compressedLen); + compressed.resize(int(hSize + compressedLen)); memcpy(compressed.data() + hSigLen + hShaLen + hPropsLen, &resultSize, hOriginalSizeLen); cout << "Compressed to size: " << compressedLen << "\n"; @@ -228,10 +252,112 @@ int main(int argc, char *argv[]) cout << "Uncompress failed: " << uncompressRes << "\n"; return -1; } - if (resultLen != result.size()) { + if (resultLen != size_t(result.size())) { cout << "Uncompress bad size: " << resultLen << ", was: " << result.size() << "\n"; return -1; } +#else // use liblzma for others + const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header + + compressed.resize(hSize + resultSize + 1024 * 1024); // rsa signature + sha1 + lzma props + max compressed size + + size_t compressedLen = compressed.size() - hSize; + + lzma_stream stream = LZMA_STREAM_INIT; + + int preset = 9 | LZMA_PRESET_EXTREME; + lzma_ret ret = lzma_easy_encoder(&stream, preset, LZMA_CHECK_CRC64); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error initializing the encoder: " << msg << " (error code " << ret << ")\n"; + return -1; + } + + stream.avail_in = resultSize; + stream.next_in = (uint8_t*)result.constData(); + stream.avail_out = compressedLen; + stream.next_out = (uint8_t*)(compressed.data() + hSize); + + lzma_ret res = lzma_code(&stream, LZMA_FINISH); + compressedLen -= stream.avail_out; + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_DATA_ERROR: msg = "File size limits exceeded"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error in compression: " << msg << " (error code " << res << ")\n"; + return -1; + } + + compressed.resize(int(hSize + compressedLen)); + memcpy(compressed.data() + hSigLen + hShaLen, &resultSize, hOriginalSizeLen); + + cout << "Compressed to size: " << compressedLen << "\n"; + + cout << "Checking uncompressed..\n"; + + int32 resultCheckLen; + memcpy(&resultCheckLen, compressed.constData() + hSigLen + hShaLen, hOriginalSizeLen); + if (resultCheckLen <= 0 || resultCheckLen > 1024 * 1024 * 1024) { + cout << "Bad result len: " << resultCheckLen << "\n"; + return -1; + } + resultCheck.resize(resultCheckLen); + + size_t resultLen = resultCheck.size(); + + stream = LZMA_STREAM_INIT; + + ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error initializing the decoder: " << msg << " (error code " << ret << ")\n"; + return -1; + } + + stream.avail_in = compressedLen; + stream.next_in = (uint8_t*)(compressed.constData() + hSize); + stream.avail_out = resultLen; + stream.next_out = (uint8_t*)resultCheck.data(); + + res = lzma_code(&stream, LZMA_FINISH); + if (stream.avail_in) { + cout << "Error in decompression, " << stream.avail_in << " bytes left in _in of " << compressedLen << " whole.\n"; + return -1; + } else if (stream.avail_out) { + cout << "Error in decompression, " << stream.avail_out << " bytes free left in _out of " << resultLen << " whole.\n"; + return -1; + } + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break; + case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break; + case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break; + case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + cout << "Error in decompression: " << msg << " (error code " << res << ")\n"; + return -1; + } +#endif if (memcmp(result.constData(), resultCheck.constData(), resultLen)) { cout << "Data differ :(\n"; return -1; @@ -242,7 +368,7 @@ int main(int argc, char *argv[]) cout << "Counting SHA1 hash..\n"; uchar sha1Buffer[20]; - memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, compressedLen + hPropsLen + hOriginalSizeLen, sha1Buffer), hShaLen); // count sha1 + memcpy(compressed.data() + hSigLen, hashSha1(compressed.constData() + hSigLen + hShaLen, uint32(compressedLen + hPropsLen + hOriginalSizeLen), sha1Buffer), hShaLen); // count sha1 uint32 siglen = 0; @@ -283,7 +409,15 @@ int main(int argc, char *argv[]) cout << "Signature verified!\n"; RSA_free(pbKey); +#ifdef Q_OS_WIN QString outName(QString("tupdate%1").arg(version)); +#elif defined Q_OS_MAC + QString outName(QString("tmacupd%1").arg(version)); +#elif defined Q_OS_LINUX + QString outName(QString("tlinuxupd%1").arg(version)); +#else +#error Unknown platform! +#endif QFile out(outName); if (!out.open(QIODevice::WriteOnly)) { cout << "Can't open '" << outName.toUtf8().constData() << "' for write..\n"; diff --git a/Telegram/SourceFiles/_other/packer.h b/Telegram/SourceFiles/_other/packer.h index 5679cfdad..3ce13e004 100644 --- a/Telegram/SourceFiles/_other/packer.h +++ b/Telegram/SourceFiles/_other/packer.h @@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include #include +#ifdef Q_OS_WIN // use Lzma SDK for win #include +#else +#include +#endif #include #include diff --git a/Telegram/SourceFiles/_other/updater_osx.m b/Telegram/SourceFiles/_other/updater_osx.m new file mode 100644 index 000000000..7fe9d245e --- /dev/null +++ b/Telegram/SourceFiles/_other/updater_osx.m @@ -0,0 +1,207 @@ +/* +This file is part of Telegram Desktop, +an unofficial desktop 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. + +Full license: https://github.com/telegramdesktop/tdesktop/blob/master/LICENSE +Copyright (c) 2014 John Preston, https://tdesktop.com +*/ +#import + +NSString *appName = @"Telegram.app"; +NSString *appDir = nil; +NSString *workDir = nil; + +#ifdef _DEBUG +BOOL _debug = YES; +#else +BOOL _debug = NO; +#endif + +NSFileHandle *_logFile = nil; +void openLog() { + if (!_debug || _logFile) return; + NSString *logDir = [workDir stringByAppendingString:@"DebugLogs"]; + if (![[NSFileManager defaultManager] createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil]) { + return; + } + + NSDateFormatter *fmt = [[NSDateFormatter alloc] initWithDateFormat:@"DebugLogs/%Y%m%d %H%M%S_upd.txt" allowNaturalLanguage:NO]; + NSString *logPath = [workDir stringByAppendingString:[fmt stringFromDate:[NSDate date]]]; + [[NSFileManager defaultManager] createFileAtPath:logPath contents:nil attributes:nil]; + _logFile = [NSFileHandle fileHandleForWritingAtPath:logPath]; +} + +void closeLog() { + if (!_logFile) return; + + [_logFile closeFile]; +} + +void writeLog(NSString *msg) { + if (!_logFile) return; + + [_logFile writeData:[[msg stringByAppendingString:@"\n"] dataUsingEncoding:NSUTF8StringEncoding]]; + [_logFile synchronizeFile]; +} + +void delFolder() { + [[NSFileManager defaultManager] removeItemAtPath:[workDir stringByAppendingString:@"tupdates/ready"] error:nil]; + rmdir([[workDir stringByAppendingString:@"tupdates"] fileSystemRepresentation]); +} + +int main(int argc, const char * argv[]) { + NSString *path = [[NSBundle mainBundle] bundlePath]; + if (!path) { + return -1; + } + NSRange range = [path rangeOfString:appName options:NSBackwardsSearch]; + if (range.location == NSNotFound) { + return -1; + } + appDir = [path substringToIndex:range.location > 0 ? range.location : 0]; + + openLog(); + pid_t procId = 0; + BOOL update = YES, toSettings = NO, autoStart = NO; + NSString *key = nil; + for (int i = 0; i < argc; ++i) { + if ([@"-workpath" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) { + workDir = [NSString stringWithUTF8String:argv[i]]; + } + } else if ([@"-procid" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) { + NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; + [formatter setNumberStyle:NSNumberFormatterDecimalStyle]; + procId = [[formatter numberFromString:[NSString stringWithUTF8String:argv[i]]] intValue]; + } + } else if ([@"-noupdate" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + update = NO; + } else if ([@"-tosettings" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + toSettings = YES; + } else if ([@"-autostart" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + autoStart = YES; + } else if ([@"-debug" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + _debug = YES; + } else if ([@"-key" isEqualToString:[NSString stringWithUTF8String:argv[i]]]) { + if (++i < argc) key = [NSString stringWithUTF8String:argv[i]]; + } + } + if (!workDir) workDir = appDir; + openLog(); + NSMutableArray *argsArr = [[NSMutableArray alloc] initWithCapacity:argc]; + for (int i = 0; i < argc; ++i) { + [argsArr addObject:[NSString stringWithUTF8String:argv[i]]]; + } + writeLog([[NSArray arrayWithObjects:@"Arguments: '", [argsArr componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]); + if (key) writeLog([@"Key: " stringByAppendingString:key]); + if (toSettings) writeLog(@"To Settings!"); + + if (procId) { + NSRunningApplication *app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) { + usleep(200000); + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + } + if (app) [app forceTerminate]; + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + for (int i = 0; i < 5 && app != nil && ![app isTerminated]; ++i) { + usleep(200000); + app = [NSRunningApplication runningApplicationWithProcessIdentifier:procId]; + } + } + + if (update) { + writeLog(@"Starting update files iteration!"); + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *srcDir = [workDir stringByAppendingString:@"tupdates/ready/"]; + NSArray *keys = [NSArray arrayWithObject:NSURLIsDirectoryKey]; + NSDirectoryEnumerator *enumerator = [fileManager + enumeratorAtURL:[NSURL fileURLWithPath:[workDir stringByAppendingString:@"tupdates/ready"]] + includingPropertiesForKeys:keys + options:0 + errorHandler:^(NSURL *url, NSError *error) { + return NO; + }]; + for (NSURL *url in enumerator) { + NSString *srcPath = [url path]; + writeLog([@"Handling file " stringByAppendingString:srcPath]); + NSRange r = [srcPath rangeOfString:srcDir]; + if (r.location != 0) { + writeLog([@"Bad file found, no base path " stringByAppendingString:srcPath]); + delFolder(); + break; + } + NSString *pathPart = [srcPath substringFromIndex:r.length]; + if ([pathPart rangeOfString:appName].location != 0) { + writeLog([@"Skipping not app file " stringByAppendingString:srcPath]); + continue; + } + NSString *dstPath = [appDir stringByAppendingString:pathPart]; + NSError *error; + NSNumber *isDirectory = nil; + writeLog([[NSArray arrayWithObjects: @"Copying file ", srcPath, @" to ", dstPath, nil] componentsJoinedByString:@""]); + if (![url getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:&error]) { + writeLog([@"Failed to get IsDirectory for file " stringByAppendingString:[url path]]); + delFolder(); + break; + } + if ([isDirectory boolValue]) { + if (![fileManager createDirectoryAtPath:dstPath withIntermediateDirectories:YES attributes:nil error:nil]) { + writeLog([@"Failed to force path for directory " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } else if ([fileManager fileExistsAtPath:dstPath]) { + if (![[NSData dataWithContentsOfFile:srcPath] writeToFile:dstPath atomically:YES]) { + writeLog([@"Failed to edit file " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } else { + if (![fileManager copyItemAtPath:srcPath toPath:dstPath error:nil]) { + writeLog([@"Failed to copy file to " stringByAppendingString:dstPath]); + delFolder(); + break; + } + } + } + delFolder(); + } + + NSString *appPath = [[NSArray arrayWithObjects:appDir, appName, nil] componentsJoinedByString:@""]; + NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-noupdate", nil]; + if (toSettings) [args addObject:@"-tosettings"]; + if (_debug) [args addObject:@"-debug"]; + if (autoStart) [args addObject:@"-autostart"]; + if (key) { + [args addObject:@"-key"]; + [args addObject:key]; + } + writeLog([[NSArray arrayWithObjects:@"Running application '", appPath, @"' with args '", [args componentsJoinedByString:@"' '"], @"'..", nil] componentsJoinedByString:@""]); + NSError *error = nil; + NSRunningApplication *result = [[NSWorkspace sharedWorkspace] + launchApplicationAtURL:[NSURL fileURLWithPath:appPath] + options:NSWorkspaceLaunchDefault + configuration:[NSDictionary + dictionaryWithObject:args + forKey:NSWorkspaceLaunchConfigurationArguments] + error:&error]; + if (!result) { + writeLog([@"Could not run application, error: " stringByAppendingString:error ? [error localizedDescription] : @"(nil)"]); + } + closeLog(); + return result ? 0 : -1; +} + diff --git a/Telegram/SourceFiles/application.cpp b/Telegram/SourceFiles/application.cpp index 4a71418d8..395b23c56 100644 --- a/Telegram/SourceFiles/application.cpp +++ b/Telegram/SourceFiles/application.cpp @@ -183,7 +183,7 @@ void Application::updateGotCurrent() { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^tupdate\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { QFile(i->absoluteFilePath()).remove(); } } @@ -191,6 +191,7 @@ void Application::updateGotCurrent() { emit updateLatest(); } startUpdateCheck(true); + App::writeConfig(); } void Application::updateFailedCurrent(QNetworkReply::NetworkError e) { @@ -409,16 +410,16 @@ void Application::startUpdateCheck(bool forceWait) { if (updates.exists()) { QFileInfoList list = updates.entryInfoList(QDir::Files); for (QFileInfoList::iterator i = list.begin(), e = list.end(); i != e; ++i) { - if (QRegularExpression("^tupdate\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { + if (QRegularExpression("^(tupdate|tmacupd|tlinuxupd)\\d+$", QRegularExpression::CaseInsensitiveOption).match(i->fileName()).hasMatch()) { sendRequest = true; } } } } - if ((cManyInstance() && !cDebug()) || cPlatform() == dbipMac) return; // only main instance is updating + if ((cManyInstance() && !cDebug()) || cPlatform() == dbipLinux) return; // only main instance is updating if (sendRequest) { - QNetworkRequest checkVersion(QUrl(qsl("http://tdesktop.com/win/tupdates/current"))); + QNetworkRequest checkVersion(cUpdateURL()); if (updateReply) updateReply->deleteLater(); App::setProxySettings(updateManager); diff --git a/Telegram/SourceFiles/config.h b/Telegram/SourceFiles/config.h index ce996a5c8..bc4f5f8fd 100644 --- a/Telegram/SourceFiles/config.h +++ b/Telegram/SourceFiles/config.h @@ -17,9 +17,13 @@ Copyright (c) 2014 John Preston, https://tdesktop.com */ #pragma once -static const int32 AppVersion = 5004; -static const wchar_t *AppVersionStr = L"0.5.4"; +static const int32 AppVersion = 5005; +static const wchar_t *AppVersionStr = L"0.5.5"; +#ifdef Q_OS_WIN static const wchar_t *AppName = L"Telegram Win (Unofficial)"; +#else +static const wchar_t *AppName = L"Telegram Desktop"; +#endif static const wchar_t *AppId = L"{53F49750-6209-4FBF-9CA8-7A333C87D1ED}"; #include "settings.h" diff --git a/Telegram/SourceFiles/history.cpp b/Telegram/SourceFiles/history.cpp index ca838cd8d..226293581 100644 --- a/Telegram/SourceFiles/history.cpp +++ b/Telegram/SourceFiles/history.cpp @@ -528,7 +528,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { // draw check if (last->out() && last->needCheck()) { - const QRect *check; + const style::sprite *check; if (last->id > 0) { if (last->unread()) { check = act ? &st::dlgActiveCheckImg : &st::dlgCheckImg; @@ -538,7 +538,7 @@ void DialogRow::paint(QPainter &p, int32 w, bool act, bool sel) const { } else { check = act ? &st::dlgActiveSendImg : &st::dlgSendImg; } - rectForName.setWidth(rectForName.width() - check->width() - st::dlgCheckSkip); + rectForName.setWidth(rectForName.width() - check->pxWidth() - st::dlgCheckSkip); p.drawPixmap(QPoint(rectForName.left() + rectForName.width() + st::dlgCheckLeft, rectForName.top() + st::dlgCheckTop), App::sprite(), *check); } diff --git a/Telegram/SourceFiles/logs.cpp b/Telegram/SourceFiles/logs.cpp index d09a6581f..8b6c30e41 100644 --- a/Telegram/SourceFiles/logs.cpp +++ b/Telegram/SourceFiles/logs.cpp @@ -69,9 +69,8 @@ void debugLogWrite(const char *file, int32 line, const QString &v) { debugLogStream->flush(); #ifdef Q_OS_WIN OutputDebugString(reinterpret_cast(msg.utf16())); -#endif -#ifdef Q_OS_MAC - objc_outputDebugString(msg.toUtf8().constData()); +#elif defined Q_OS_MAC + objc_outputDebugString(msg); #endif } } @@ -118,9 +117,7 @@ void logsInit() { if (mainLogStream) return; #ifdef Q_OS_MAC - if (QDir(cWorkingDir()).absolutePath() == qsl("/")) { - cSetWorkingDir(cExeDir()); - } + cForceWorkingDir(psAppDataPath()); #endif QString oldDir = cWorkingDir(); diff --git a/Telegram/SourceFiles/pspecific_mac.cpp b/Telegram/SourceFiles/pspecific_mac.cpp index 60f108282..27045ad52 100644 --- a/Telegram/SourceFiles/pspecific_mac.cpp +++ b/Telegram/SourceFiles/pspecific_mac.cpp @@ -34,63 +34,9 @@ namespace { bool nativeEventFilter(const QByteArray &eventType, void *message, long *result) { Window *wnd = Application::wnd(); if (!wnd) return false; -/* - MSG *msg = (MSG*)message; - if (msg->message == WM_ENDSESSION) { - App::quit(); - return false; - } - if (msg->hwnd == wnd->psHwnd() || msg->hwnd && !wnd->psHwnd()) { - return mainWindowEvent(msg->hwnd, msg->message, msg->wParam, msg->lParam, (LRESULT*)result); - }*/ + return false; } -/* - bool mainWindowEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam, LRESULT *result) { - if (tbCreatedMsgId && msg == tbCreatedMsgId) { - if (CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList3, (void**)&tbListInterface) != S_OK) { - tbListInterface = 0; - } - } - switch (msg) { - - case WM_DESTROY: { - App::quit(); - } return false; - - case WM_ACTIVATE: { - if (LOWORD(wParam) == WA_CLICKACTIVE) { - App::wnd()->inactivePress(true); - } - } return false; - - case WM_SIZE: { - if (App::wnd()) { - if (wParam == SIZE_MAXIMIZED || wParam == SIZE_RESTORED || wParam == SIZE_MINIMIZED) { - if (wParam != SIZE_RESTORED || App::wnd()->windowState() != Qt::WindowNoState) { - Qt::WindowState state = Qt::WindowNoState; - if (wParam == SIZE_MAXIMIZED) { - state = Qt::WindowMaximized; - } else if (wParam == SIZE_MINIMIZED) { - state = Qt::WindowMinimized; - } - emit App::wnd()->windowHandle()->windowStateChanged(state); - } else { - App::wnd()->psUpdatedPosition(); - } - int changes = (wParam == SIZE_MINIMIZED || wParam == SIZE_MAXIMIZED) ? _PsShadowHidden : (_PsShadowResized | _PsShadowShown); - _psShadowWindows.update(changes); - } - } - } return false; - - case WM_MOVE: { - _psShadowWindows.update(_PsShadowMoved); - App::wnd()->psUpdatedPosition(); - } return false; - } - return false; - }*/ }; _PsEventFilter *_psEventFilter = 0; @@ -176,50 +122,9 @@ bool PsMainWindow::psIsActive(int state) const { } void PsMainWindow::psRefreshTaskbarIcon() { - /*QWidget *w = new QWidget(this); - w->setWindowFlags(Qt::Tool | Qt::FramelessWindowHint); - w->setGeometry(x() + 1, y() + 1, 1, 1); - QPalette p(w->palette()); - p.setColor(QPalette::Background, st::titleBG->c); - QWindow *wnd = w->windowHandle(); - w->setPalette(p); - w->show(); - w->activateWindow(); - delete w;*/ } void PsMainWindow::psUpdateWorkmode() { - /*switch (cWorkMode()) { - case dbiwmWindowAndTray: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - - case dbiwmTrayOnly: { - setupTrayIcon(); - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (!psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, (LONG)ps_tbHider_hWnd); - } - } break; - - case dbiwmWindowOnly: { - if (trayIconMenu) trayIconMenu->deleteLater(); - trayIconMenu = 0; - if (trayIcon) trayIcon->deleteLater(); - trayIcon = 0; - - HWND psOwner = (HWND)GetWindowLong(ps_hWnd, GWL_HWNDPARENT); - if (psOwner) { - SetWindowLong(ps_hWnd, GWL_HWNDPARENT, 0); - psRefreshTaskbarIcon(); - } - } break; - }*/ } void PsMainWindow::psUpdateCounter() { @@ -228,59 +133,38 @@ void PsMainWindow::psUpdateCounter() { setWindowTitle((counter > 0) ? qsl("Telegram (%1)").arg(counter) : qsl("Telegram")); QString cnt = (counter < 1000) ? QString("%1").arg(counter) : QString("..%1").arg(counter % 100, 2, 10, QChar('0')); - _private.setWindowBadge(counter ? cnt.toUtf8().constData() : ""); + _private.setWindowBadge(counter ? cnt : QString()); } -/*namespace { - HMONITOR enumMonitor = 0; - RECT enumMonitorWork; - - BOOL CALLBACK _monitorEnumProc( - _In_ HMONITOR hMonitor, - _In_ HDC hdcMonitor, - _In_ LPRECT lprcMonitor, - _In_ LPARAM dwData - ) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (dwData == hashCrc32(info.szDevice, sizeof(info.szDevice))) { - enumMonitor = hMonitor; - enumMonitorWork = info.rcWork; - return FALSE; - } - return TRUE; - } -}*/ - void PsMainWindow::psInitSize() { setMinimumWidth(st::wndMinWidth); setMinimumHeight(st::wndMinHeight); TWindowPos pos(cWindowPos()); - if (cDebug()) { // temp while design - pos.w = 800; - pos.h = 600; - } QRect avail(QDesktopWidget().availableGeometry()); bool maximized = false; QRect geom(avail.x() + (avail.width() - st::wndDefWidth) / 2, avail.y() + (avail.height() - st::wndDefHeight) / 2, st::wndDefWidth, st::wndDefHeight); if (pos.w && pos.h) { - if (pos.y < 0) pos.y = 0; - //enumMonitor = 0; - //EnumDisplayMonitors(0, 0, &_monitorEnumProc, pos.moncrc); - /*if (enumMonitor) { - int32 w = enumMonitorWork.right - enumMonitorWork.left, h = enumMonitorWork.bottom - enumMonitorWork.top; - if (w >= st::wndMinWidth && h >= st::wndMinHeight) { - if (pos.w > w) pos.w = w; - if (pos.h > h) pos.h = h; - pos.x += enumMonitorWork.left; - pos.y += enumMonitorWork.top; - if (pos.x < enumMonitorWork.right - 10 && pos.y < enumMonitorWork.bottom - 10) { - geom = QRect(pos.x, pos.y, pos.w, pos.h); + QList screens = App::app()->screens(); + for (QList::const_iterator i = screens.cbegin(), e = screens.cend(); i != e; ++i) { + QByteArray name = (*i)->name().toUtf8(); + if (pos.moncrc == hashCrc32(name.constData(), name.size())) { + QRect screen((*i)->geometry()); + int32 w = screen.width(), h = screen.height(); + if (w >= st::wndMinWidth && h >= st::wndMinHeight) { + if (pos.w > w) pos.w = w; + if (pos.h > h) pos.h = h; + pos.x += screen.x(); + pos.y += screen.y(); + if (pos.x < screen.x() + screen.width() - 10 && pos.y < screen.y() + screen.height() - 10) { + geom = QRect(pos.x, pos.y, pos.w, pos.h); + } } + break; } - }*/ + } + + if (pos.y < 0) pos.y = 0; maximized = pos.maximized; } setGeometry(geom); @@ -300,31 +184,36 @@ void PsMainWindow::psInitFrameless() { void PsMainWindow::psSavePosition(Qt::WindowState state) { if (state == Qt::WindowActive) state = windowHandle()->windowState(); if (state == Qt::WindowMinimized || !posInited) return; -/* + TWindowPos pos(cWindowPos()), curPos = pos; if (state == Qt::WindowMaximized) { curPos.maximized = 1; } else { - RECT w; - GetWindowRect(ps_hWnd, &w); - curPos.x = w.left; - curPos.y = w.top; - curPos.w = w.right - w.left; - curPos.h = w.bottom - w.top; + QRect r(geometry()); + curPos.x = r.x(); + curPos.y = r.y(); + curPos.w = r.width(); + curPos.h = r.height(); curPos.maximized = 0; } - HMONITOR hMonitor = MonitorFromWindow(ps_hWnd, MONITOR_DEFAULTTONEAREST); - if (hMonitor) { - MONITORINFOEX info; - info.cbSize = sizeof(info); - GetMonitorInfo(hMonitor, &info); - if (!curPos.maximized) { - curPos.x -= info.rcWork.left; - curPos.y -= info.rcWork.top; + int px = curPos.x + curPos.w / 2, py = curPos.y + curPos.h / 2, d = 0; + QScreen *chosen = 0; + QList screens = App::app()->screens(); + for (QList::const_iterator i = screens.cbegin(), e = screens.cend(); i != e; ++i) { + int dx = (*i)->geometry().x() + (*i)->geometry().width() / 2 - px; if (dx < 0) dx = -dx; + int dy = (*i)->geometry().y() + (*i)->geometry().height() / 2 - py; if (dy < 0) dy = -dy; + if (!chosen || dx + dy < d) { + d = dx + dy; + chosen = *i; } - curPos.moncrc = hashCrc32(info.szDevice, sizeof(info.szDevice)); + } + if (chosen) { + curPos.x -= chosen->geometry().x(); + curPos.y -= chosen->geometry().y(); + QByteArray name = chosen->name().toUtf8(); + curPos.moncrc = hashCrc32(name.constData(), name.size()); } if (curPos.w >= st::wndMinWidth && curPos.h >= st::wndMinHeight) { @@ -332,20 +221,20 @@ void PsMainWindow::psSavePosition(Qt::WindowState state) { cSetWindowPos(curPos); App::writeConfig(); } - }*/ + } } void PsMainWindow::psUpdatedPosition() { - //psUpdatedPositionTimer.start(4000); + psUpdatedPositionTimer.start(4000); } void PsMainWindow::psStateChanged(Qt::WindowState state) { psUpdateSysMenu(state); psUpdateMargins(); - /*if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { - minimizeToTray(); - } - psSavePosition(state);*/ +// if (state == Qt::WindowMinimized && GetWindowLong(ps_hWnd, GWL_HWNDPARENT)) { +// minimizeToTray(); +// } + psSavePosition(state); } void PsMainWindow::psFirstShow() { @@ -620,7 +509,7 @@ void PsMainWindow::psShowNextNotify(PsNotifyWindow *remove) { _private.showOverAll(notify->winId()); --count; } else { - _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name.toUtf8().constData(), notifyItem->notificationHeader().toUtf8().constData(), notifyItem->notificationText().toUtf8().constData()); + _private.showNotify(notifyItem->history()->peer->id, notifyItem->history()->peer->name, notifyItem->notificationHeader(), notifyItem->notificationText()); } uint64 ms = getms(); @@ -1083,23 +972,7 @@ void PsUpdateDownloader::partFailed(QNetworkReply::NetworkError e) { } void PsUpdateDownloader::deleteDir(const QString &dir) { - /*std::wstring wDir = QDir::toNativeSeparators(dir).toStdWString(); - WCHAR path[4096]; - memcpy(path, wDir.c_str(), (wDir.size() + 1) * sizeof(WCHAR)); - path[wDir.size() + 1] = 0; - SHFILEOPSTRUCT file_op = { - NULL, - FO_DELETE, - path, - L"", - FOF_NOCONFIRMATION | - FOF_NOERRORUI | - FOF_SILENT, - false, - 0, - L"" - }; - int res = SHFileOperation(&file_op);*/ + objc_deleteDir(dir); } void PsUpdateDownloader::fatalFail() { @@ -1111,15 +984,25 @@ void PsUpdateDownloader::clearAll() { deleteDir(cWorkingDir() + qsl("tupdates")); } +#ifdef Q_OS_WIN +typedef DWORD VerInt; +typedef WCHAR VerChar; +#else +typedef int VerInt; +typedef wchar_t VerChar; +#endif + void PsUpdateDownloader::unpackUpdate() { - /*QByteArray packed; + QByteArray packed; if (!outputFile.open(QIODevice::ReadOnly)) { LOG(("Update Error: cant read updates file!")); return fatalFail(); } - +#ifdef Q_OS_WIN // use Lzma SDK for win const int32 hSigLen = 128, hShaLen = 20, hPropsLen = LZMA_PROPS_SIZE, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hPropsLen + hOriginalSizeLen; // header - +#else + const int32 hSigLen = 128, hShaLen = 20, hPropsLen = 0, hOriginalSizeLen = sizeof(int32), hSize = hSigLen + hShaLen + hOriginalSizeLen; // header +#endif QByteArray compressed = outputFile.readAll(); int32 compressedLen = compressed.size() - hSize; if (compressedLen <= 0) { @@ -1164,12 +1047,57 @@ void PsUpdateDownloader::unpackUpdate() { uncompressed.resize(uncompressedLen); size_t resultLen = uncompressed.size(); +#ifdef Q_OS_WIN // use Lzma SDK for win SizeT srcLen = compressedLen; int uncompressRes = LzmaUncompress((uchar*)uncompressed.data(), &resultLen, (const uchar*)(compressed.constData() + hSize), &srcLen, (const uchar*)(compressed.constData() + hSigLen + hShaLen), LZMA_PROPS_SIZE); if (uncompressRes != SZ_OK) { LOG(("Update Error: could not uncompress lzma, code: %1").arg(uncompressRes)); return fatalFail(); } +#else + lzma_stream stream = LZMA_STREAM_INIT; + + lzma_ret ret = lzma_stream_decoder(&stream, UINT64_MAX, LZMA_CONCATENATED); + if (ret != LZMA_OK) { + const char *msg; + switch (ret) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_OPTIONS_ERROR: msg = "Specified preset is not supported"; break; + case LZMA_UNSUPPORTED_CHECK: msg = "Specified integrity check is not supported"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + LOG(("Error initializing the decoder: %1 (error code %2)").arg(msg).arg(ret)); + return fatalFail(); + } + + stream.avail_in = compressedLen; + stream.next_in = (uint8_t*)(compressed.constData() + hSize); + stream.avail_out = resultLen; + stream.next_out = (uint8_t*)uncompressed.data(); + + lzma_ret res = lzma_code(&stream, LZMA_FINISH); + if (stream.avail_in) { + LOG(("Error in decompression, %1 bytes left in _in of %2 whole.").arg(stream.avail_in).arg(compressedLen)); + return fatalFail(); + } else if (stream.avail_out) { + LOG(("Error in decompression, %1 bytes free left in _out of %2 whole.").arg(stream.avail_out).arg(resultLen)); + return fatalFail(); + } + lzma_end(&stream); + if (res != LZMA_OK && res != LZMA_STREAM_END) { + const char *msg; + switch (res) { + case LZMA_MEM_ERROR: msg = "Memory allocation failed"; break; + case LZMA_FORMAT_ERROR: msg = "The input data is not in the .xz format"; break; + case LZMA_OPTIONS_ERROR: msg = "Unsupported compression options"; break; + case LZMA_DATA_ERROR: msg = "Compressed file is corrupt"; break; + case LZMA_BUF_ERROR: msg = "Compressed data is truncated or otherwise corrupt"; break; + default: msg = "Unknown error, possibly a bug"; break; + } + LOG(("Error in decompression: %1 (error code %2)").arg(msg).arg(res)); + return fatalFail(); + } +#endif tempDir.mkdir(tempDir.absolutePath()); @@ -1200,22 +1128,30 @@ void PsUpdateDownloader::unpackUpdate() { LOG(("Update Error: update is empty!")); return fatalFail(); } - for (int32 i = 0; i < filesCount; ++i) { + for (uint32 i = 0; i < filesCount; ++i) { QString relativeName; quint32 fileSize; QByteArray fileInnerData; + bool executable = false; stream >> relativeName >> fileSize >> fileInnerData; +#if defined Q_OS_MAC || defined Q_OS_LINUX + stream >> executable; +#endif if (stream.status() != QDataStream::Ok) { LOG(("Update Error: cant read file from downloaded stream, status: %1").arg(stream.status())); return fatalFail(); } - if (fileSize != fileInnerData.size()) { + if (fileSize != quint32(fileInnerData.size())) { LOG(("Update Error: bad file size %1 not matching data size %2").arg(fileSize).arg(fileInnerData.size())); return fatalFail(); } QFile f(tempDirPath + '/' + relativeName); + if (!QDir().mkpath(QFileInfo(f).absolutePath())) { + LOG(("Update Error: cant mkpath for file '%1'").arg(tempDirPath + '/' + relativeName)); + return fatalFail(); + } if (!f.open(QIODevice::WriteOnly)) { LOG(("Update Error: cant open file '%1' for writing").arg(tempDirPath + '/' + relativeName)); return fatalFail(); @@ -1226,13 +1162,19 @@ void PsUpdateDownloader::unpackUpdate() { return fatalFail(); } f.close(); + if (executable) { + QFileDevice::Permissions p = f.permissions(); + p |= QFileDevice::ExeOwner | QFileDevice::ExeUser | QFileDevice::ExeGroup | QFileDevice::ExeOther; + f.setPermissions(p); + } } // create tdata/version file tempDir.mkdir(QDir(tempDirPath + qsl("/tdata")).absolutePath()); std::wstring versionString = ((version % 1000) ? QString("%1.%2.%3").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000)).arg(int(version % 1000)) : QString("%1.%2").arg(int(version / 1000000)).arg(int((version % 1000000) / 1000))).toStdWString(); - DWORD versionNum = DWORD(version), versionLen = DWORD(versionString.size() * sizeof(WCHAR)); - WCHAR versionStr[32]; + + VerInt versionNum = VerInt(version), versionLen = VerInt(versionString.size() * sizeof(VerChar)); + VerChar versionStr[32]; memcpy(versionStr, versionString.c_str(), versionLen); QFile fVersion(tempDirPath + qsl("/tdata/version")); @@ -1240,8 +1182,8 @@ void PsUpdateDownloader::unpackUpdate() { LOG(("Update Error: cant write version file '%1'").arg(tempDirPath + qsl("/version"))); return fatalFail(); } - fVersion.write((const char*)&versionNum, sizeof(DWORD)); - fVersion.write((const char*)&versionLen, sizeof(DWORD)); + fVersion.write((const char*)&versionNum, sizeof(VerInt)); + fVersion.write((const char*)&versionLen, sizeof(VerInt)); fVersion.write((const char*)&versionStr[0], versionLen); fVersion.close(); } @@ -1253,7 +1195,7 @@ void PsUpdateDownloader::unpackUpdate() { deleteDir(tempDirPath); outputFile.remove(); - emit App::app()->updateReady();*/ + emit App::app()->updateReady(); } PsUpdateDownloader::~PsUpdateDownloader() { @@ -1261,208 +1203,22 @@ PsUpdateDownloader::~PsUpdateDownloader() { reply = 0; } -/*namespace { - BOOL CALLBACK _ActivateProcess(HWND hWnd, LPARAM lParam) { - uint64 &processId(*(uint64*)lParam); - - DWORD dwProcessId; - ::GetWindowThreadProcessId(hWnd, &dwProcessId); - - if ((uint64)dwProcessId == processId) { // found top-level window - static const int32 nameBufSize = 1024; - WCHAR nameBuf[nameBufSize]; - int32 len = GetWindowText(hWnd, nameBuf, nameBufSize); - if (len && len < nameBufSize) { - if (QRegularExpression(qsl("^Telegram(\\s*\\(\\d+\\))?$")).match(QString::fromStdWString(nameBuf)).hasMatch()) { - BOOL res = ::SetForegroundWindow(hWnd); - return FALSE; - } - } - } - return TRUE; - } -}*/ - void psActivateProcess(uint64 pid) { - //::EnumWindows((WNDENUMPROC)_ActivateProcess, (LPARAM)&pid); + objc_activateProgram(); } QString psCurrentCountry() { - /*int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrCountry[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, wstrCountry, chCount); - return len ? QString::fromStdWString(std::wstring(wstrCountry)) : QString::fromLatin1(DefaultCountry); - } - return QString::fromLatin1(DefaultCountry);*/ - return QString(""); - //TODO + QString country = objc_currentCountry(); + return country.isEmpty() ? QString::fromLatin1(DefaultCountry) : country; } -/*namespace { - QString langById(int lngId) { - int primary = lngId & 0xFF; - switch (primary) { - case 0x36: return qsl("af"); - case 0x1C: return qsl("sq"); - case 0x5E: return qsl("am"); - case 0x01: return qsl("ar"); - case 0x2B: return qsl("hy"); - case 0x4D: return qsl("as"); - case 0x2C: return qsl("az"); - case 0x45: return qsl("bn"); - case 0x6D: return qsl("ba"); - case 0x2D: return qsl("eu"); - case 0x23: return qsl("be"); - case 0x1A: - if (lngId == LANG_CROATIAN) { - return qsl("hr"); - } else if (lngId == LANG_BOSNIAN_NEUTRAL || lngId == LANG_BOSNIAN) { - return qsl("bs"); - } - return qsl("sr"); - break; - case 0x7E: return qsl("br"); - case 0x02: return qsl("bg"); - case 0x92: return qsl("ku"); - case 0x03: return qsl("ca"); - case 0x04: return qsl("zh"); - case 0x83: return qsl("co"); - case 0x05: return qsl("cs"); - case 0x06: return qsl("da"); - case 0x65: return qsl("dv"); - case 0x13: return qsl("nl"); - case 0x09: return qsl("en"); - case 0x25: return qsl("et"); - case 0x38: return qsl("fo"); - case 0x0B: return qsl("fi"); - case 0x0c: return qsl("fr"); - case 0x62: return qsl("fy"); - case 0x56: return qsl("gl"); - case 0x37: return qsl("ka"); - case 0x07: return qsl("de"); - case 0x08: return qsl("el"); - case 0x6F: return qsl("kl"); - case 0x47: return qsl("gu"); - case 0x68: return qsl("ha"); - case 0x0D: return qsl("he"); - case 0x39: return qsl("hi"); - case 0x0E: return qsl("hu"); - case 0x0F: return qsl("is"); - case 0x70: return qsl("ig"); - case 0x21: return qsl("id"); - case 0x5D: return qsl("iu"); - case 0x3C: return qsl("ga"); - case 0x34: return qsl("xh"); - case 0x35: return qsl("zu"); - case 0x10: return qsl("it"); - case 0x11: return qsl("ja"); - case 0x4B: return qsl("kn"); - case 0x3F: return qsl("kk"); - case 0x53: return qsl("kh"); - case 0x87: return qsl("rw"); - case 0x12: return qsl("ko"); - case 0x40: return qsl("ky"); - case 0x54: return qsl("lo"); - case 0x26: return qsl("lv"); - case 0x27: return qsl("lt"); - case 0x6E: return qsl("lb"); - case 0x2F: return qsl("mk"); - case 0x3E: return qsl("ms"); - case 0x4C: return qsl("ml"); - case 0x3A: return qsl("mt"); - case 0x81: return qsl("mi"); - case 0x4E: return qsl("mr"); - case 0x50: return qsl("mn"); - case 0x61: return qsl("ne"); - case 0x14: return qsl("no"); - case 0x82: return qsl("oc"); - case 0x48: return qsl("or"); - case 0x63: return qsl("ps"); - case 0x29: return qsl("fa"); - case 0x15: return qsl("pl"); - case 0x16: return qsl("pt"); - case 0x67: return qsl("ff"); - case 0x46: return qsl("pa"); - case 0x18: return qsl("ro"); - case 0x17: return qsl("rm"); - case 0x19: return qsl("ru"); - case 0x3B: return qsl("se"); - case 0x4F: return qsl("sa"); - case 0x32: return qsl("tn"); - case 0x59: return qsl("sd"); - case 0x5B: return qsl("si"); - case 0x1B: return qsl("sk"); - case 0x24: return qsl("sl"); - case 0x0A: return qsl("es"); - case 0x41: return qsl("sw"); - case 0x1D: return qsl("sv"); - case 0x28: return qsl("tg"); - case 0x49: return qsl("ta"); - case 0x44: return qsl("tt"); - case 0x4A: return qsl("te"); - case 0x1E: return qsl("th"); - case 0x51: return qsl("bo"); - case 0x73: return qsl("ti"); - case 0x1F: return qsl("tr"); - case 0x42: return qsl("tk"); - case 0x22: return qsl("uk"); - case 0x20: return qsl("ur"); - case 0x80: return qsl("ug"); - case 0x43: return qsl("uz"); - case 0x2A: return qsl("vi"); - case 0x52: return qsl("cy"); - case 0x88: return qsl("wo"); - case 0x78: return qsl("ii"); - case 0x6A: return qsl("yo"); - } - return QString::fromLatin1(DefaultLanguage); - } -}*/ - QString psCurrentLanguage() { -/* int chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNAME, wstrLocale, chCount); - if (!len) return QString::fromLatin1(DefaultLanguage); - QString locale = QString::fromStdWString(std::wstring(wstrLocale)); - QRegularExpressionMatch m = QRegularExpression("(^|[^a-z])([a-z]{2})-").match(locale); - if (m.hasMatch()) { - return m.captured(2); - } - } - chCount = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, 0, 0); - if (chCount && chCount < 128) { - WCHAR wstrLocale[128]; - int len = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILANGUAGE, wstrLocale, chCount), lngId = 0; - if (len < 5) return QString::fromLatin1(DefaultLanguage); - - for (int i = 0; i < 4; ++i) { - WCHAR ch = wstrLocale[i]; - lngId *= 16; - if (ch >= WCHAR('0') && ch <= WCHAR('9')) { - lngId += (ch - WCHAR('0')); - } else if (ch >= WCHAR('A') && ch <= WCHAR('F')) { - lngId += (10 + ch - WCHAR('A')); - } else { - return QString::fromLatin1(DefaultLanguage); - } - } - return langById(lngId); - } - return QString::fromLatin1(DefaultLanguage);*/ - return QString("en"); + QString lng = objc_currentLang(); + return lng.isEmpty() ? QString::fromLatin1(DefaultLanguage) : lng; } QString psAppDataPath() { - /*static const int maxFileLen = MAX_PATH * 10; - WCHAR wstrPath[maxFileLen]; - if (GetEnvironmentVariable(L"APPDATA", wstrPath, maxFileLen)) { - QDir appData(QString::fromStdWString(std::wstring(wstrPath))); - return appData.absolutePath() + "/" + QString::fromWCharArray(AppName) + "/"; - }*/ - return QString(); + return objc_appDataPath(); } QString psCurrentExeDirectory(int argc, char *argv[]) { @@ -1485,81 +1241,20 @@ void psDoCleanup() { } int psCleanup() { - /*__try - { - psDoCleanup(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ + psDoCleanup(); return 0; } void psDoFixPrevious() { - /*try { - static const int bufSize = 4096; - DWORD checkType, checkSize = bufSize * 2; - WCHAR checkStr[bufSize]; - - QString appId = QString::fromStdWString(AppId); - QString newKeyStr1 = QString("Software\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString newKeyStr2 = QString("Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr1 = QString("SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - QString oldKeyStr2 = QString("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\%1_is1").arg(appId); - HKEY newKey1, newKey2, oldKey1, oldKey2; - LSTATUS newKeyRes1 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr1.toStdWString().c_str(), 0, KEY_READ, &newKey1); - LSTATUS newKeyRes2 = RegOpenKeyEx(HKEY_CURRENT_USER, newKeyStr2.toStdWString().c_str(), 0, KEY_READ, &newKey2); - LSTATUS oldKeyRes1 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str(), 0, KEY_READ, &oldKey1); - LSTATUS oldKeyRes2 = RegOpenKeyEx(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str(), 0, KEY_READ, &oldKey2); - - bool existNew1 = (newKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(newKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existNew2 = (newKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(newKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld1 = (oldKeyRes1 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey1, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - bool existOld2 = (oldKeyRes2 == ERROR_SUCCESS) && (RegQueryValueEx(oldKey2, L"InstallDate", 0, &checkType, (BYTE*)checkStr, &checkSize) == ERROR_SUCCESS); checkSize = bufSize * 2; - - if (newKeyRes1 == ERROR_SUCCESS) RegCloseKey(newKey1); - if (newKeyRes2 == ERROR_SUCCESS) RegCloseKey(newKey2); - if (oldKeyRes1 == ERROR_SUCCESS) RegCloseKey(oldKey1); - if (oldKeyRes2 == ERROR_SUCCESS) RegCloseKey(oldKey2); - - if (existNew1 || existNew2) { - oldKeyRes1 = existOld1 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr1.toStdWString().c_str()) : ERROR_SUCCESS; - oldKeyRes2 = existOld2 ? RegDeleteKey(HKEY_LOCAL_MACHINE, oldKeyStr2.toStdWString().c_str()) : ERROR_SUCCESS; - } - - QString userDesktopLnk, commonDesktopLnk; - WCHAR userDesktopFolder[MAX_PATH], commonDesktopFolder[MAX_PATH]; - HRESULT userDesktopRes = SHGetFolderPath(0, CSIDL_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, userDesktopFolder); - HRESULT commonDesktopRes = SHGetFolderPath(0, CSIDL_COMMON_DESKTOPDIRECTORY, 0, SHGFP_TYPE_CURRENT, commonDesktopFolder); - if (SUCCEEDED(userDesktopRes)) { - userDesktopLnk = QString::fromWCharArray(userDesktopFolder) + "\\Telegram.lnk"; - } - if (SUCCEEDED(commonDesktopRes)) { - commonDesktopLnk = QString::fromWCharArray(commonDesktopFolder) + "\\Telegram.lnk"; - } - QFile userDesktopFile(userDesktopLnk), commonDesktopFile(commonDesktopLnk); - if (QFile::exists(userDesktopLnk) && QFile::exists(commonDesktopLnk) && userDesktopLnk != commonDesktopLnk) { - bool removed = QFile::remove(commonDesktopLnk); - } - } catch (...) { - }*/ } int psFixPrevious() { - /*__try - { - psDoFixPrevious(); - } - __except(EXCEPTION_EXECUTE_HANDLER) - { - return 0; - }*/ + psDoFixPrevious(); return 0; } bool psCheckReadyUpdate() { - /*QString readyPath = cWorkingDir() + qsl("tupdates/ready"); + QString readyPath = cWorkingDir() + qsl("tupdates/ready"); if (!QDir(readyPath).exists()) { return false; } @@ -1573,8 +1268,8 @@ bool psCheckReadyUpdate() { PsUpdateDownloader::clearAll(); return false; } - DWORD versionNum; - if (fVersion.read((char*)&versionNum, sizeof(DWORD)) != sizeof(DWORD)) { + VerInt versionNum; + if (fVersion.read((char*)&versionNum, sizeof(VerInt)) != sizeof(VerInt)) { LOG(("Update Error: cant read version from file '%1'").arg(versionPath)); PsUpdateDownloader::clearAll(); return false; @@ -1587,19 +1282,25 @@ bool psCheckReadyUpdate() { } } +#ifdef Q_OS_WIN QString curUpdater = (cExeDir() + "Updater.exe"); QFileInfo updater(cWorkingDir() + "tupdates/ready/Updater.exe"); +#elif defined Q_OS_MAC + QString curUpdater = (cExeDir() + "Telegram.app/Contents/Frameworks/Updater"); + QFileInfo updater(cWorkingDir() + "tupdates/ready/Telegram.app/Contents/Frameworks/Updater"); +#endif if (!updater.exists()) { QFileInfo current(curUpdater); if (!current.exists()) { PsUpdateDownloader::clearAll(); return false; } - if (CopyFile(current.absoluteFilePath().toStdWString().c_str(), updater.absoluteFilePath().toStdWString().c_str(), TRUE) == FALSE) { + if (!QFile(current.absoluteFilePath()).copy(updater.absoluteFilePath())) { PsUpdateDownloader::clearAll(); return false; } } +#ifdef Q_OS_WIN if (CopyFile(updater.absoluteFilePath().toStdWString().c_str(), curUpdater.toStdWString().c_str(), FALSE) == FALSE) { PsUpdateDownloader::clearAll(); return false; @@ -1607,34 +1308,27 @@ bool psCheckReadyUpdate() { if (DeleteFile(updater.absoluteFilePath().toStdWString().c_str()) == FALSE) { PsUpdateDownloader::clearAll(); return false; - }*/ - return false; // TODO + } +#elif defined Q_OS_MAC + QFileInfo to(curUpdater); + QDir().mkpath(to.absolutePath()); + if (!objc_moveFile(updater.absoluteFilePath(), curUpdater)) { + PsUpdateDownloader::clearAll(); + return false; + } +#endif + return true; } void psPostprocessFile(const QString &name) { - /*std::wstring zoneFile = QDir::toNativeSeparators(name).toStdWString() + L":Zone.Identifier"; - HANDLE f = CreateFile(zoneFile.c_str(), GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); - if (f == INVALID_HANDLE_VALUE) { // :( - return; - } - - const char data[] = "[ZoneTransfer]\r\nZoneId=3\r\n"; - - DWORD written = 0; - BOOL result = WriteFile(f, data, sizeof(data), &written, NULL); - CloseHandle(f); - - if (!result || written != sizeof(data)) { // :( - return; - }*/ } void psOpenFile(const QString &name, bool openWith) { - objc_openFile(name.toUtf8().constData(), openWith); + objc_openFile(name, openWith); } void psShowInFolder(const QString &name) { - objc_showInFinder(name.toUtf8().constData(), QFileInfo(name).absolutePath().toUtf8().constData()); + objc_showInFinder(name, QFileInfo(name).absolutePath()); } void psFinish() { @@ -1642,69 +1336,15 @@ void psFinish() { } void psExecUpdater() { - /*QString targs = qsl("-update"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - - QString updater(QDir::toNativeSeparators(cExeDir() + "Updater.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Updater.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, updater.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(updater).arg(wdir).arg(long(r))); + if (!objc_execUpdater()) { QString readyPath = cWorkingDir() + qsl("tupdates/ready"); PsUpdateDownloader::deleteDir(readyPath); - }*/ + } } void psExecTelegram() { - /*QString targs = qsl("-noupdate -tosettings"); - if (cFromAutoStart()) targs += qsl(" -autostart"); - if (cDebug()) targs += qsl(" -debug"); - if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) targs += qsl(" -key \"") + cDataFile() + '"'; - - QString telegram(QDir::toNativeSeparators(cExeDir() + "Telegram.exe")), wdir(QDir::toNativeSeparators(cWorkingDir())); - - DEBUG_LOG(("Application Info: executing %1 %2").arg(cExeDir() + "Telegram.exe").arg(targs)); - HINSTANCE r = ShellExecute(0, 0, telegram.toStdWString().c_str(), targs.toStdWString().c_str(), wdir.isEmpty() ? 0 : wdir.toStdWString().c_str(), SW_SHOWNORMAL); - if (long(r) < 32) { - DEBUG_LOG(("Application Error: failed to execute %1, working directory: '%2', result: %3").arg(telegram).arg(wdir).arg(long(r))); - }*/ + objc_execTelegram(); } void psAutoStart(bool start, bool silent) { - /*WCHAR startupFolder[MAX_PATH]; - HRESULT hres = SHGetFolderPath(0, CSIDL_STARTUP, 0, SHGFP_TYPE_CURRENT, startupFolder); - if (SUCCEEDED(hres)) { - QString lnk = QString::fromWCharArray(startupFolder) + "\\Telegram.lnk"; - if (start) { - IShellLink* psl; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&psl); - if (SUCCEEDED(hres)) { - IPersistFile* ppf; - - QString exe = QDir::toNativeSeparators(QDir(cExeDir()).absolutePath() + "//Telegram.exe"), dir = QDir::toNativeSeparators(QDir(cWorkingDir()).absolutePath()); - psl->SetArguments(L"-autostart"); - psl->SetPath(exe.toStdWString().c_str()); - psl->SetWorkingDirectory(dir.toStdWString().c_str()); - psl->SetDescription(L"Telegram autorun link.\nYou can disable autorun in Telegram settings."); - - hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*)&ppf); - - if (SUCCEEDED(hres)) { - hres = ppf->Save(lnk.toStdWString().c_str(), TRUE); - ppf->Release(); - } else { - if (!silent) LOG(("App Error: could not create interface IID_IPersistFile %1").arg(hres)); - } - psl->Release(); - } else { - if (!silent) LOG(("App Error: could not create instance of IID_IShellLink %1").arg(hres)); - } - } else { - QFile::remove(lnk); - } - } else { - if (!silent) LOG(("App Error: could not get CSIDL_STARTUP folder %1").arg(hres)); - }*/ } diff --git a/Telegram/SourceFiles/pspecific_mac_p.h b/Telegram/SourceFiles/pspecific_mac_p.h index c6edd9349..b11bfc561 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.h +++ b/Telegram/SourceFiles/pspecific_mac_p.h @@ -24,14 +24,14 @@ public: PsMacWindowPrivate(); - void setWindowBadge(const char *utf8str); + void setWindowBadge(const QString &str); void startBounce(); void holdOnTop(WId winId); void showOverAll(WId winId); void activateWnd(WId winId); - void showNotify(unsigned long long peer, const char *utf8title, const char *subtitle, const char *utf8msg); - void clearNotifies(unsigned long long peer = 0); + void showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg); + void clearNotifies(uint64 peer = 0); void enableShadow(WId winId); @@ -48,10 +48,20 @@ public: }; -void objc_debugShowAlert(const char *utf8str); -void objc_outputDebugString(const char *utf8str); +void objc_debugShowAlert(const QString &str); +void objc_outputDebugString(const QString &str); int64 objc_idleTime(); -void objc_showInFinder(const char *utf8file, const char *utf8path); -void objc_openFile(const char *utf8file, bool openwith); +void objc_showInFinder(const QString &file, const QString &path); +void objc_openFile(const QString &file, bool openwith); void objc_finish(); +bool objc_execUpdater(); +void objc_execTelegram(); + +void objc_activateProgram(); +bool objc_moveFile(const QString &from, const QString &to); +void objc_deleteDir(const QString &dir); + +QString objc_appDataPath(); +QString objc_currentCountry(); +QString objc_currentLang(); diff --git a/Telegram/SourceFiles/pspecific_mac_p.mm b/Telegram/SourceFiles/pspecific_mac_p.mm index 5a0611fd3..3f3fbf7f2 100644 --- a/Telegram/SourceFiles/pspecific_mac_p.mm +++ b/Telegram/SourceFiles/pspecific_mac_p.mm @@ -26,21 +26,8 @@ Copyright (c) 2014 John Preston, https://tdesktop.com class QNSString { public: - QNSString(const QString &str) : _str([[NSString alloc] initWithUTF8String:str.toUtf8().constData()]) { + QNSString(const QString &str) : _str([NSString stringWithUTF8String:str.toUtf8().constData()]) { } - QNSString &operator=(const QNSString &other) { - if (this != &other) { - [_str release]; - _str = [other._str copy]; - } - return *this; - } - QNSString(const QNSString &other) : _str([other._str copy]) { - } - ~QNSString() { - [_str release]; - } - NSString *s() { return _str; } @@ -163,10 +150,8 @@ PsMacWindowPrivate::PsMacWindowPrivate() : data(new PsMacWindowData(this)) { [center setDelegate:data->notifyHandler]; } -void PsMacWindowPrivate::setWindowBadge(const char *utf8str) { - NSString *badgeString = [[NSString alloc] initWithUTF8String:utf8str]; - [[NSApp dockTile] setBadgeLabel:badgeString]; - [badgeString release]; +void PsMacWindowPrivate::setWindowBadge(const QString &str) { + [[NSApp dockTile] setBadgeLabel:QNSString(str).s()]; } void PsMacWindowPrivate::startBounce() { @@ -190,25 +175,15 @@ void PsMacWindowPrivate::activateWnd(WId winId) { [wnd orderFront:wnd]; } -void PsMacWindowPrivate::showNotify(unsigned long long peer, const char *utf8title, const char *utf8subtitle, const char *utf8msg) { +void PsMacWindowPrivate::showNotify(uint64 peer, const QString &title, const QString &subtitle, const QString &msg) { NSUserNotification *notification = [[NSUserNotification alloc] init]; - NSDictionary *uinfo = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]; - [notification setUserInfo:uinfo]; - [uinfo release]; + [notification setUserInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithUnsignedLongLong:peer],@"peer",[NSNumber numberWithUnsignedLongLong:cInstance()],@"inst",nil]]; - NSString *title = [[NSString alloc] initWithUTF8String:utf8title]; - [notification setTitle:title]; - [title release]; - - NSString *subtitle = [[NSString alloc] initWithUTF8String:utf8subtitle]; - [notification setSubtitle:subtitle]; - [subtitle release]; + [notification setTitle:QNSString(title).s()]; + [notification setSubtitle:QNSString(subtitle).s()]; + [notification setInformativeText:QNSString(msg).s()]; - NSString *msg = [[NSString alloc] initWithUTF8String:utf8msg]; - [notification setInformativeText:msg]; - [msg release]; - [notification setHasReplyButton:YES]; [notification setSoundName:nil]; @@ -238,18 +213,12 @@ void PsMacWindowPrivate::clearNotifies(unsigned long long peer) { } } -void objc_debugShowAlert(const char *utf8str) { - NSString *text = [[NSString alloc] initWithUTF8String: utf8str]; - NSAlert *alert = [NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", text]; - [alert runModal]; - [alert release]; - [text release]; +void objc_debugShowAlert(const QString &str) { + [[NSAlert alertWithMessageText:@"Debug Message" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", QNSString(str).s()] runModal]; } -void objc_outputDebugString(const char *utf8str) { - NSString *text = [[NSString alloc] initWithUTF8String:utf8str]; - NSLog(@"%@", text); - [text release]; +void objc_outputDebugString(const QString &str) { + NSLog(@"%@", QNSString(str).s()); } PsMacWindowPrivate::~PsMacWindowPrivate() { @@ -306,11 +275,8 @@ int64 objc_idleTime() { // taken from https://github.com/trueinteractions/tint/i return (result == err) ? -1 : int64(result); } -void objc_showInFinder(const char *utf8file, const char *utf8path) { - NSString *file = [[NSString alloc] initWithUTF8String:utf8file], *path = [[NSString alloc] initWithUTF8String:utf8path]; - [[NSWorkspace sharedWorkspace] selectFile:file inFileViewerRootedAtPath:path]; - [file release]; - [path release]; +void objc_showInFinder(const QString &file, const QString &path) { + [[NSWorkspace sharedWorkspace] selectFile:QNSString(file).s() inFileViewerRootedAtPath:QNSString(path).s()]; } @interface NSURL(CompareUrls) @@ -456,8 +422,8 @@ void objc_showInFinder(const char *utf8file, const char *utf8path) { @end -void objc_openFile(const char *utf8file, bool openwith) { - NSString *file = [[NSString alloc] initWithUTF8String:utf8file]; +void objc_openFile(const QString &f, bool openwith) { + NSString *file = QNSString(f).s(); if (openwith || [[NSWorkspace sharedWorkspace] openFile:file] == NO) { @try { NSURL *url = [NSURL fileURLWithPath:file]; @@ -558,7 +524,7 @@ void objc_openFile(const char *utf8file, bool openwith) { [openPanel setAllowsMultipleSelection:NO]; [openPanel setResolvesAliases:YES]; [openPanel setTitle:objc_lang(lng_mac_choose_app).s()]; - [openPanel setMessage:[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name]]; + [openPanel setMessage:[[objc_lang(lng_mac_choose_text).s() stringByReplacingOccurrencesOfString:@"{file}" withString:name] stringByAppendingFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]]; NSArray *appsPaths = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationDirectory inDomains:NSLocalDomainMask]; if ([appsPaths count]) [openPanel setDirectoryURL:[appsPaths firstObject]]; @@ -606,3 +572,93 @@ void objc_finish() { objcLang.clear(); } } + +BOOL _execUpdater(BOOL update = YES) { + NSString *path = @"", *args = @""; + @try { + path = [[NSBundle mainBundle] bundlePath]; + if (!path) { + LOG(("Could not get bundle path!!")); + return NO; + } + path = [path stringByAppendingString:@"/Contents/Frameworks/Updater"]; + + NSMutableArray *args = [[NSMutableArray alloc] initWithObjects:@"-workpath", QNSString(cWorkingDir()).s(), @"-tosettings", @"-procid", nil]; + [args addObject:[NSString stringWithFormat:@"%d", [[NSProcessInfo processInfo] processIdentifier]]]; + if (!update) [args addObject:@"-noupdate"]; + if (cFromAutoStart()) [args addObject:@"-autostart"]; + if (cDebug()) [args addObject:@"-debug"]; + if (cDataFile() != (cTestMode() ? qsl("data_test") : qsl("data"))) { + [args addObject:@"-key"]; + [args addObject:QNSString(cDataFile()).s()]; + } + + DEBUG_LOG(("Application Info: executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding]))); + if (![NSTask launchedTaskWithLaunchPath:path arguments:args]) { + LOG(("Task not launched while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([[args componentsJoinedByString:@" "] cStringUsingEncoding:NSUTF8StringEncoding]))); + return NO; + } + } + @catch (NSException *exception) { + LOG(("Exception caught while executing %1 %2").arg(QString::fromUtf8([path cStringUsingEncoding:NSUTF8StringEncoding])).arg(QString::fromUtf8([args cStringUsingEncoding:NSUTF8StringEncoding]))); + return NO; + } + @finally { + } + return YES; +} + +bool objc_execUpdater() { + return !!_execUpdater(); +} + +void objc_execTelegram() { + _execUpdater(NO); +} + +void objc_activateProgram() { + [NSApp activateIgnoringOtherApps:YES]; +} + +bool objc_moveFile(const QString &from, const QString &to) { + NSString *f = QNSString(from).s(), *t = QNSString(to).s(); + if ([[NSFileManager defaultManager] fileExistsAtPath:t]) { + NSData *data = [NSData dataWithContentsOfFile:f]; + if (data) { + if ([data writeToFile:t atomically:YES]) { + if ([[NSFileManager defaultManager] removeItemAtPath:f error:nil]) { + return true; + } + } + } + } else { + if ([[NSFileManager defaultManager] moveItemAtPath:f toPath:t error:nil]) { + return true; + } + } + return false; +} + +void objc_deleteDir(const QString &dir) { + [[NSFileManager defaultManager] removeItemAtPath:QNSString(dir).s() error:nil]; +} + +QString objc_appDataPath() { + NSURL *url = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; + if (url) { + return QString::fromUtf8([[url path] fileSystemRepresentation]) + '/' + QString::fromWCharArray(AppName) + '/'; + } + return QString(); +} + +QString objc_currentCountry() { + NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. + NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; + return countryCode ? QString::fromUtf8([countryCode cStringUsingEncoding:NSUTF8StringEncoding]) : QString(); +} + +QString objc_currentLang() { + NSLocale *currentLocale = [NSLocale currentLocale]; // get the current locale. + NSString *currentLang = [currentLocale objectForKey:NSLocaleLanguageCode]; + return currentLang ? QString::fromUtf8([currentLang cStringUsingEncoding:NSUTF8StringEncoding]) : QString(); +} diff --git a/Telegram/SourceFiles/settings.cpp b/Telegram/SourceFiles/settings.cpp index 411d7d42b..7fd4066fc 100644 --- a/Telegram/SourceFiles/settings.cpp +++ b/Telegram/SourceFiles/settings.cpp @@ -74,10 +74,13 @@ uint64 gInstance = 0.; #ifdef Q_OS_WIN DBIPlatform gPlatform = dbipWindows; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/win/tupdates/current")); #elif defined Q_OS_MAC DBIPlatform gPlatform = dbipMac; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/mac/tupdates/current")); #elif defined Q_OS_LINUX DBIPlatform gPlatform = dbipLinux; +QUrl gUpdateURL = QUrl(qsl("http://tdesktop.com/linux/tupdates/current")); #else #error Unknown platform #endif diff --git a/Telegram/SourceFiles/settings.h b/Telegram/SourceFiles/settings.h index 52bb4708d..48572950f 100644 --- a/Telegram/SourceFiles/settings.h +++ b/Telegram/SourceFiles/settings.h @@ -138,5 +138,6 @@ DeclareSetting(bool, CustomNotifies); DeclareReadSetting(uint64, Instance); DeclareReadSetting(DBIPlatform, Platform); +DeclareReadSetting(QUrl, UpdateURL); void settingsParseArgs(int argc, char *argv[]); diff --git a/Telegram/SourceFiles/stdafx.h b/Telegram/SourceFiles/stdafx.h index 49b2f0e36..6ac7aec17 100644 --- a/Telegram/SourceFiles/stdafx.h +++ b/Telegram/SourceFiles/stdafx.h @@ -34,7 +34,11 @@ Copyright (c) 2014 John Preston, https://tdesktop.com #include #include +#ifdef Q_OS_WIN // use Lzma SDK for win #include +#else +#include +#endif #if defined Q_OS_WIN #define _NEED_WIN_GENERATE_DUMP diff --git a/Telegram/SourceFiles/window.cpp b/Telegram/SourceFiles/window.cpp index 3356d7003..7d0f6e4db 100644 --- a/Telegram/SourceFiles/window.cpp +++ b/Telegram/SourceFiles/window.cpp @@ -450,6 +450,8 @@ bool Window::eventFilter(QObject *obj, QEvent *evt) { if (App::main()) { App::main()->mainStateChanged(state); } + } else if (obj == this && (evt->type() == QEvent::Move || evt->type() == QEvent::Resize)) { + psUpdatedPosition(); } return PsMainWindow::eventFilter(obj, evt); } diff --git a/Telegram/Telegram.pro b/Telegram/Telegram.pro index f21d06e91..1f9496cf2 100644 --- a/Telegram/Telegram.pro +++ b/Telegram/Telegram.pro @@ -194,6 +194,3 @@ LIBS += ./../../Libraries/libexif-0.6.20/libexif/.libs/libexif.a RESOURCES += \ ./SourceFiles/telegram.qrc -CONFIG(debug, debug|release) { - DEFINES += _DEBUG -} diff --git a/Telegram/Telegram.xcodeproj/project.pbxproj b/Telegram/Telegram.xcodeproj/project.pbxproj index aa926d49c..835dd6d1d 100644 --- a/Telegram/Telegram.xcodeproj/project.pbxproj +++ b/Telegram/Telegram.xcodeproj/project.pbxproj @@ -202,6 +202,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 07084688195445A700B5AE3A /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 07084684195445A600B5AE3A /* Updater.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = 07084678195445A600B5AE3A; + remoteInfo = Updater; + }; 07C3AF22194335970016CFF1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6DB9C3763D02B1415CD9D565 /* Project object */; @@ -226,6 +233,7 @@ 060A694B42A4555240009936 /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_plugin_qtga.pri"; sourceTree = ""; }; 06E379415713F34B83F99C35 /* app.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = app.cpp; path = SourceFiles/app.cpp; sourceTree = ""; }; 07055CC3194EE85B0008DEF6 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "./../../Libraries/openssl-xcode/libcrypto.a"; sourceTree = ""; }; + 07084684195445A600B5AE3A /* Updater.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = Updater.xcodeproj; sourceTree = SOURCE_ROOT; }; 075EB50EB07CF69FD62FB8DF /* /usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri */ = {isa = PBXFileReference; lastKnownFileType = text; path = "/usr/local/Qt-5.3.0/mkspecs/modules/qt_lib_sql_private.pri"; sourceTree = ""; }; 0771C4C94B623FC34BF62983 /* intro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = intro.cpp; path = SourceFiles/intro/intro.cpp; sourceTree = ""; }; 07C3AF24194335ED0016CFF1 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Telegram/Images.xcassets; sourceTree = SOURCE_ROOT; }; @@ -652,6 +660,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 07084685195445A600B5AE3A /* Products */ = { + isa = PBXGroup; + children = ( + 07084689195445A700B5AE3A /* Updater */, + ); + name = Products; + sourceTree = ""; + }; 130BDDB6FC4D60CF394D95AF /* GeneratedFiles */ = { isa = PBXGroup; children = ( @@ -1139,6 +1155,7 @@ E8C543AB96796ECAA2E65C57 /* Telegram */ = { isa = PBXGroup; children = ( + 07084684195445A600B5AE3A /* Updater.xcodeproj */, 2EB56BE3C2D93CDAB0C52E67 /* Sources */, 25B08E2869634E9BCBA333A2 /* Generated Sources */, 74B182DB50CB5611B5C1C297 /* Supporting Files */, @@ -1198,6 +1215,12 @@ mainGroup = E8C543AB96796ECAA2E65C57 /* Telegram */; productRefGroup = FE0A091FDBFB3E9C31B7A1BD /* Products */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = 07084685195445A600B5AE3A /* Products */; + ProjectRef = 07084684195445A600B5AE3A /* Updater.xcodeproj */; + }, + ); projectRoot = ""; targets = ( 7CCA95B9FCAD34D929431AD6 /* Telegram */, @@ -1207,6 +1230,16 @@ }; /* End PBXProject section */ +/* Begin PBXReferenceProxy section */ + 07084689195445A700B5AE3A /* Updater */ = { + isa = PBXReferenceProxy; + fileType = "compiled.mach-o.executable"; + path = Updater; + remoteRef = 07084688195445A700B5AE3A /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + /* Begin PBXResourcesBuildPhase section */ 07C3AF25194336160016CFF1 /* Resources */ = { isa = PBXResourcesBuildPhase; @@ -1476,7 +1509,7 @@ ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, - ./../../Libraries/lzma/C, + /usr/local/include, "./../../Libraries/libexif-0.6.20", "/usr/local/Qt-5.3.0/include", "/usr/local/Qt-5.3.0/include/QtMultimedia", @@ -1512,6 +1545,7 @@ "-Wall", "-W", "-fPIE", + "-D_WITH_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1532,6 +1566,7 @@ "-Wall", "-W", "-fPIE", + "-D_WITH_DEBUG", "-DQT_MULTIMEDIA_LIB", "-DQT_WIDGETS_LIB", "-DQT_NETWORK_LIB", @@ -1558,6 +1593,7 @@ "-L/usr/local/Qt-5.3.0/plugins/imageformats", "-lz", "-lm", + "-llzma", ); PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = ""; @@ -1596,7 +1632,7 @@ ./../../Libraries/QtStatic/qtbase/include, ./SourceFiles, ./GeneratedFiles, - ./../../Libraries/lzma/C, + /usr/local/include, "./../../Libraries/libexif-0.6.20", "/usr/local/Qt-5.3.0/include", "/usr/local/Qt-5.3.0/include/QtMultimedia", @@ -1681,6 +1717,7 @@ "-L/usr/local/Qt-5.3.0/plugins/imageformats", "-lz", "-lm", + "-llzma", ); PRODUCT_NAME = Telegram; QT_LIBRARY_SUFFIX = _debug; diff --git a/Telegram/Updater.xcodeproj/project.pbxproj b/Telegram/Updater.xcodeproj/project.pbxproj new file mode 100644 index 000000000..bc88eefa7 --- /dev/null +++ b/Telegram/Updater.xcodeproj/project.pbxproj @@ -0,0 +1,237 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 070846A619544CDD00B5AE3A /* updater_osx.m in Sources */ = {isa = PBXBuildFile; fileRef = 070846A519544CDD00B5AE3A /* updater_osx.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 07084676195445A600B5AE3A /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 07084678195445A600B5AE3A /* Updater */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Updater; sourceTree = BUILT_PRODUCTS_DIR; }; + 070846A519544CDD00B5AE3A /* updater_osx.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = updater_osx.m; path = SourceFiles/_other/updater_osx.m; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 07084675195445A600B5AE3A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0708466F195445A600B5AE3A = { + isa = PBXGroup; + children = ( + 0708467A195445A600B5AE3A /* Updater */, + 07084679195445A600B5AE3A /* Products */, + ); + sourceTree = ""; + }; + 07084679195445A600B5AE3A /* Products */ = { + isa = PBXGroup; + children = ( + 07084678195445A600B5AE3A /* Updater */, + ); + name = Products; + sourceTree = ""; + }; + 0708467A195445A600B5AE3A /* Updater */ = { + isa = PBXGroup; + children = ( + 070846A519544CDD00B5AE3A /* updater_osx.m */, + ); + path = Updater; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 07084677195445A600B5AE3A /* Updater */ = { + isa = PBXNativeTarget; + buildConfigurationList = 07084681195445A600B5AE3A /* Build configuration list for PBXNativeTarget "Updater" */; + buildPhases = ( + 07084674195445A600B5AE3A /* Sources */, + 07084675195445A600B5AE3A /* Frameworks */, + 07084676195445A600B5AE3A /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Updater; + productName = Updater; + productReference = 07084678195445A600B5AE3A /* Updater */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 07084670195445A600B5AE3A /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0510; + }; + buildConfigurationList = 07084673195445A600B5AE3A /* Build configuration list for PBXProject "Updater" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 0708466F195445A600B5AE3A; + productRefGroup = 07084679195445A600B5AE3A /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 07084677195445A600B5AE3A /* Updater */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXSourcesBuildPhase section */ + 07084674195445A600B5AE3A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 070846A619544CDD00B5AE3A /* updater_osx.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 0708467F195445A600B5AE3A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Telegram.app/Contents/Frameworks"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediateUpdater"; + ONLY_ACTIVE_ARCH = YES; + OTHER_CFLAGS = "-D_DEBUG"; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Debug; + }; + 07084680195445A600B5AE3A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CONFIGURATION_BUILD_DIR = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Telegram.app/Contents/Frameworks"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.9; + OBJROOT = "$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)IntermediateUpdater"; + SDKROOT = macosx; + SYMROOT = ../Mac; + }; + name = Release; + }; + 07084682195445A600B5AE3A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 07084683195445A600B5AE3A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 07084673195445A600B5AE3A /* Build configuration list for PBXProject "Updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0708467F195445A600B5AE3A /* Debug */, + 07084680195445A600B5AE3A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 07084681195445A600B5AE3A /* Build configuration list for PBXNativeTarget "Updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 07084682195445A600B5AE3A /* Debug */, + 07084683195445A600B5AE3A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 07084670195445A600B5AE3A /* Project object */; +} diff --git a/Telegram/packer_plugin_import.cpp b/Telegram/packer_plugin_import.cpp new file mode 100644 index 000000000..7c0d09542 --- /dev/null +++ b/Telegram/packer_plugin_import.cpp @@ -0,0 +1,13 @@ +// This file is autogenerated by qmake. It imports static plugin classes for +// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS. variables. +#include +Q_IMPORT_PLUGIN(QCocoaIntegrationPlugin) +Q_IMPORT_PLUGIN(QDDSPlugin) +Q_IMPORT_PLUGIN(QICNSPlugin) +Q_IMPORT_PLUGIN(QICOPlugin) +Q_IMPORT_PLUGIN(QJp2Plugin) +Q_IMPORT_PLUGIN(QMngPlugin) +Q_IMPORT_PLUGIN(QTgaPlugin) +Q_IMPORT_PLUGIN(QTiffPlugin) +Q_IMPORT_PLUGIN(QWbmpPlugin) +Q_IMPORT_PLUGIN(QWebpPlugin)