Merge branch 'master' of https://github.com/highfidelity/hifi into domaincheckin

This commit is contained in:
Roxanne Skelly 2019-05-24 09:38:37 -07:00
commit aaee796aef
27 changed files with 451 additions and 272 deletions

View file

@ -25,14 +25,13 @@ vcpkg_from_github(
HEAD_REF master HEAD_REF master
) )
vcpkg_configure_cmake( vcpkg_configure_cmake(
SOURCE_PATH ${SOURCE_PATH} SOURCE_PATH ${SOURCE_PATH}
OPTIONS OPTIONS
-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON -DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON -DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON
-DUSE_GLUT=0 -DUSE_GLUT=0
-DUSE_DX11=0 -DUSE_DX11=0
-DBUILD_DEMOS=OFF -DBUILD_DEMOS=OFF
-DBUILD_OPENGL3_DEMOS=OFF -DBUILD_OPENGL3_DEMOS=OFF
-DBUILD_BULLET3=OFF -DBUILD_BULLET3=OFF

View file

@ -258,18 +258,13 @@ endif()
url = 'NOT DEFINED' url = 'NOT DEFINED'
if platform.system() == 'Windows': if platform.system() == 'Windows':
# TODO: figure out how to download with versionId url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows2.tar.gz'
#url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz?versionId=Etx8novAe0.IxQ7AosLFtop7fZur.cx9'
url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-windows.tar.gz'
elif platform.system() == 'Darwin': elif platform.system() == 'Darwin':
#url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz?versionId=QrGxwssB.WwU_z3QCyG7ghP1_VjTkQeK'
url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-macos.tar.gz'
elif platform.system() == 'Linux': elif platform.system() == 'Linux':
if platform.linux_distribution()[1] == '16.04': if platform.linux_distribution()[1][:3] == '16.':
#url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz?versionId=c9j7PW4uBDPLif7DKmgIhorh9WBMjZRB'
url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-16.04.tar.gz'
elif platform.linux_distribution()[1] == '18.04': elif platform.linux_distribution()[1][:3] == '18.':
#url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz?versionId=Z3TojPFdb5pXdahF3oi85jjKocpL0xqw'
url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz' url = 'https://hifi-public.s3.amazonaws.com/dependencies/vcpkg/qt5-install-5.12.3-ubuntu-18.04.tar.gz'
else: else:
print('UNKNOWN LINUX VERSION!!!') print('UNKNOWN LINUX VERSION!!!')

View file

@ -60,7 +60,7 @@ Flickable {
HifiStylesUit.GraphikRegular { HifiStylesUit.GraphikRegular {
id: volumeControlsTitle id: volumeControlsTitle
text: "Volume Controls" text: "Volume Controls"
Layout.maximumWidth: parent.width Layout.preferredWidth: parent.width
height: paintedHeight height: paintedHeight
size: 22 size: 22
color: simplifiedUI.colors.text.white color: simplifiedUI.colors.text.white
@ -68,8 +68,7 @@ Flickable {
SimplifiedControls.Slider { SimplifiedControls.Slider {
id: peopleVolume id: peopleVolume
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
height: 30 height: 30
labelText: "People Volume" labelText: "People Volume"
@ -96,8 +95,7 @@ Flickable {
SimplifiedControls.Slider { SimplifiedControls.Slider {
id: environmentVolume id: environmentVolume
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: 2 Layout.topMargin: 2
height: 30 height: 30
labelText: "Environment Volume" labelText: "Environment Volume"
@ -125,8 +123,7 @@ Flickable {
SimplifiedControls.Slider { SimplifiedControls.Slider {
id: systemSoundVolume id: systemSoundVolume
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: 2 Layout.topMargin: 2
height: 30 height: 30
labelText: "System Sound Volume" labelText: "System Sound Volume"
@ -212,8 +209,7 @@ Flickable {
ListView { ListView {
id: inputDeviceListView id: inputDeviceListView
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
interactive: false interactive: false
height: contentItem.height height: contentItem.height
@ -228,7 +224,7 @@ Flickable {
id: inputDeviceCheckbox id: inputDeviceCheckbox
anchors.left: parent.left anchors.left: parent.left
width: parent.width - inputLevel.width width: parent.width - inputLevel.width
height: paintedHeight height: 16
wrapLabel: false wrapLabel: false
checked: selectedDesktop checked: selectedDesktop
text: model.devicename text: model.devicename
@ -251,6 +247,7 @@ Flickable {
} }
SimplifiedControls.Button { SimplifiedControls.Button {
id: audioLoopbackButton
property bool audioLoopedBack: AudioScriptingInterface.getLocalEcho() property bool audioLoopedBack: AudioScriptingInterface.getLocalEcho()
function startAudioLoopback() { function startAudioLoopback() {
@ -266,29 +263,23 @@ Flickable {
} }
} }
Timer { Component.onDestruction: stopAudioLoopback();
id: loopbackTimer
interval: 8000 onVisibleChanged: {
running: false if (!visible) {
repeat: false
onTriggered: {
stopAudioLoopback(); stopAudioLoopback();
} }
} }
id: testYourMicButton
enabled: !HMD.active enabled: !HMD.active
anchors.left: parent.left
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
width: 160 width: 160
height: 32 height: 32
text: audioLoopedBack ? "STOP TESTING" : "TEST YOUR MIC" text: audioLoopedBack ? "STOP TESTING" : "TEST YOUR MIC"
onClicked: { onClicked: {
if (audioLoopedBack) { if (audioLoopedBack) {
loopbackTimer.stop();
stopAudioLoopback(); stopAudioLoopback();
} else { } else {
loopbackTimer.restart();
startAudioLoopback(); startAudioLoopback();
} }
} }
@ -313,8 +304,7 @@ Flickable {
ListView { ListView {
id: outputDeviceListView id: outputDeviceListView
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
interactive: false interactive: false
height: contentItem.height height: contentItem.height
@ -329,7 +319,7 @@ Flickable {
id: outputDeviceCheckbox id: outputDeviceCheckbox
anchors.left: parent.left anchors.left: parent.left
width: parent.width width: parent.width
height: paintedHeight height: 16
checked: selectedDesktop checked: selectedDesktop
text: model.devicename text: model.devicename
wrapLabel: false wrapLabel: false
@ -381,7 +371,6 @@ Flickable {
id: testYourSoundButton id: testYourSoundButton
enabled: !HMD.active enabled: !HMD.active
anchors.left: parent.left
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
width: 160 width: 160
height: 32 height: 32

View file

@ -198,8 +198,7 @@ Flickable {
ListView { ListView {
id: inputDeviceListView id: inputDeviceListView
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
interactive: false interactive: false
height: contentItem.height height: contentItem.height
@ -214,8 +213,10 @@ Flickable {
id: inputDeviceCheckbox id: inputDeviceCheckbox
anchors.left: parent.left anchors.left: parent.left
width: parent.width - inputLevel.width width: parent.width - inputLevel.width
height: 16
checked: selectedHMD checked: selectedHMD
text: model.devicename text: model.devicename
wrapLabel: false
ButtonGroup.group: inputDeviceButtonGroup ButtonGroup.group: inputDeviceButtonGroup
onClicked: { onClicked: {
AudioScriptingInterface.setStereoInput(false); // the next selected audio device might not support stereo AudioScriptingInterface.setStereoInput(false); // the next selected audio device might not support stereo
@ -235,6 +236,7 @@ Flickable {
} }
SimplifiedControls.Button { SimplifiedControls.Button {
id: audioLoopbackButton
property bool audioLoopedBack: AudioScriptingInterface.getLocalEcho() property bool audioLoopedBack: AudioScriptingInterface.getLocalEcho()
function startAudioLoopback() { function startAudioLoopback() {
@ -250,29 +252,23 @@ Flickable {
} }
} }
Timer { Component.onDestruction: stopAudioLoopback();
id: loopbackTimer
interval: 8000 onVisibleChanged: {
running: false if (!visible) {
repeat: false
onTriggered: {
stopAudioLoopback(); stopAudioLoopback();
} }
} }
id: testYourMicButton
enabled: HMD.active enabled: HMD.active
anchors.left: parent.left
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
width: 160 width: 160
height: 32 height: 32
text: audioLoopedBack ? "STOP TESTING" : "TEST YOUR MIC" text: audioLoopedBack ? "STOP TESTING" : "TEST YOUR MIC"
onClicked: { onClicked: {
if (audioLoopedBack) { if (audioLoopedBack) {
loopbackTimer.stop();
stopAudioLoopback(); stopAudioLoopback();
} else { } else {
loopbackTimer.restart();
startAudioLoopback(); startAudioLoopback();
} }
} }
@ -297,8 +293,7 @@ Flickable {
ListView { ListView {
id: outputDeviceListView id: outputDeviceListView
anchors.left: parent.left Layout.preferredWidth: parent.width
anchors.right: parent.right
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
interactive: false interactive: false
height: contentItem.height height: contentItem.height
@ -313,11 +308,13 @@ Flickable {
id: outputDeviceCheckbox id: outputDeviceCheckbox
anchors.left: parent.left anchors.left: parent.left
width: parent.width width: parent.width
checked: selectedDesktop height: 16
checked: selectedHMD
text: model.devicename text: model.devicename
wrapLabel: false
ButtonGroup.group: outputDeviceButtonGroup ButtonGroup.group: outputDeviceButtonGroup
onClicked: { onClicked: {
AudioScriptingInterface.setOutputDevice(model.info, true); // `false` argument for Desktop mode setting AudioScriptingInterface.setOutputDevice(model.info, true); // `true` argument for VR mode setting
} }
} }
} }
@ -363,7 +360,6 @@ Flickable {
id: testYourSoundButton id: testYourSoundButton
enabled: HMD.active enabled: HMD.active
anchors.left: parent.left
Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin Layout.topMargin: simplifiedUI.margins.settings.settingsGroupTopMargin
width: 160 width: 160
height: 32 height: 32

View file

@ -3800,10 +3800,14 @@ void Application::handleSandboxStatus(QNetworkReply* reply) {
// If this is a first run we short-circuit the address passed in // If this is a first run we short-circuit the address passed in
if (_firstRun.get()) { if (_firstRun.get()) {
DependencyManager::get<AddressManager>()->goToEntry(); if (!_overrideEntry) {
sentTo = SENT_TO_ENTRY; DependencyManager::get<AddressManager>()->goToEntry();
_firstRun.set(false); sentTo = SENT_TO_ENTRY;
} else {
DependencyManager::get<AddressManager>()->loadSettings(addressLookupString);
sentTo = SENT_TO_PREVIOUS_LOCATION;
}
_firstRun.set(false);
} else { } else {
QString goingTo = ""; QString goingTo = "";
if (addressLookupString.isEmpty()) { if (addressLookupString.isEmpty()) {
@ -3819,7 +3823,7 @@ void Application::handleSandboxStatus(QNetworkReply* reply) {
DependencyManager::get<AddressManager>()->loadSettings(addressLookupString); DependencyManager::get<AddressManager>()->loadSettings(addressLookupString);
sentTo = SENT_TO_PREVIOUS_LOCATION; sentTo = SENT_TO_PREVIOUS_LOCATION;
} }
UserActivityLogger::getInstance().logAction("startup_sent_to", { UserActivityLogger::getInstance().logAction("startup_sent_to", {
{ "sent_to", sentTo }, { "sent_to", sentTo },
{ "sandbox_is_running", sandboxIsRunning }, { "sandbox_is_running", sandboxIsRunning },
@ -9354,6 +9358,19 @@ void Application::showUrlHandler(const QUrl& url) {
} }
}); });
} }
void Application::overrideEntry(){
_overrideEntry = true;
}
void Application::forceDisplayName(const QString& displayName) {
getMyAvatar()->setDisplayName(displayName);
}
void Application::forceLoginWithTokens(const QString& tokens) {
DependencyManager::get<AccountManager>()->setAccessTokens(tokens);
Setting::Handle<bool>(KEEP_ME_LOGGED_IN_SETTING_NAME, true).set(true);
}
void Application::setConfigFileURL(const QString& fileUrl) {
DependencyManager::get<AccountManager>()->setConfigFileURL(fileUrl);
}
#if defined(Q_OS_ANDROID) #if defined(Q_OS_ANDROID)
void Application::beforeEnterBackground() { void Application::beforeEnterBackground() {

View file

@ -356,6 +356,11 @@ public:
void openDirectory(const QString& path); void openDirectory(const QString& path);
void overrideEntry();
void forceDisplayName(const QString& displayName);
void forceLoginWithTokens(const QString& tokens);
void setConfigFileURL(const QString& fileUrl);
signals: signals:
void svoImportRequested(const QString& url); void svoImportRequested(const QString& url);
@ -828,5 +833,6 @@ private:
bool _resumeAfterLoginDialogActionTaken_WasPostponed { false }; bool _resumeAfterLoginDialogActionTaken_WasPostponed { false };
bool _resumeAfterLoginDialogActionTaken_SafeToRun { false }; bool _resumeAfterLoginDialogActionTaken_SafeToRun { false };
bool _startUpFinished { false }; bool _startUpFinished { false };
bool _overrideEntry { false };
}; };
#endif // hifi_Application_h #endif // hifi_Application_h

View file

@ -521,6 +521,7 @@ void AvatarManager::buildPhysicsTransaction(PhysicsEngine::Transaction& transact
} }
} }
} }
_otherAvatarsToChangeInPhysics.clear();
} }
void AvatarManager::handleProcessedPhysicsTransaction(PhysicsEngine::Transaction& transaction) { void AvatarManager::handleProcessedPhysicsTransaction(PhysicsEngine::Transaction& transaction) {
@ -645,7 +646,7 @@ void AvatarManager::clearOtherAvatars() {
} }
void AvatarManager::deleteAllAvatars() { void AvatarManager::deleteAllAvatars() {
assert(_otherAvatarsToChangeInPhysics.empty()); _otherAvatarsToChangeInPhysics.clear();
QReadLocker locker(&_hashLock); QReadLocker locker(&_hashLock);
AvatarHash::iterator avatarIterator = _avatarHash.begin(); AvatarHash::iterator avatarIterator = _avatarHash.begin();
while (avatarIterator != _avatarHash.end()) { while (avatarIterator != _avatarHash.end()) {

View file

@ -83,6 +83,8 @@ int main(int argc, const char* argv[]) {
QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run"); QCommandLineOption allowMultipleInstancesOption("allowMultipleInstances", "Allow multiple instances to run");
QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache <dir>", "dir"); QCommandLineOption overrideAppLocalDataPathOption("cache", "set test cache <dir>", "dir");
QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts <path>", "path"); QCommandLineOption overrideScriptsPathOption(SCRIPTS_SWITCH, "set scripts <path>", "path");
QCommandLineOption responseTokensOption("tokens", "set response tokens <json>", "json");
QCommandLineOption displayNameOption("displayName", "set user display name <string>", "string");
parser.addOption(urlOption); parser.addOption(urlOption);
parser.addOption(noLauncherOption); parser.addOption(noLauncherOption);
@ -93,6 +95,8 @@ int main(int argc, const char* argv[]) {
parser.addOption(overrideAppLocalDataPathOption); parser.addOption(overrideAppLocalDataPathOption);
parser.addOption(overrideScriptsPathOption); parser.addOption(overrideScriptsPathOption);
parser.addOption(allowMultipleInstancesOption); parser.addOption(allowMultipleInstancesOption);
parser.addOption(responseTokensOption);
parser.addOption(displayNameOption);
if (!parser.parse(arguments)) { if (!parser.parse(arguments)) {
std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam std::cout << parser.errorText().toStdString() << std::endl; // Avoid Qt log spam
@ -120,8 +124,10 @@ int main(int argc, const char* argv[]) {
static const QString APPLICATION_CONFIG_FILENAME = "config.json"; static const QString APPLICATION_CONFIG_FILENAME = "config.json";
QDir applicationDir(applicationPath); QDir applicationDir(applicationPath);
QFile configFile(applicationDir.filePath(APPLICATION_CONFIG_FILENAME)); QString configFileName = applicationDir.filePath(APPLICATION_CONFIG_FILENAME);
QFile configFile(configFileName);
QString launcherPath;
if (configFile.exists()) { if (configFile.exists()) {
if (!configFile.open(QIODevice::ReadOnly)) { if (!configFile.open(QIODevice::ReadOnly)) {
qWarning() << "Found application config, but could not open it"; qWarning() << "Found application config, but could not open it";
@ -134,7 +140,7 @@ int main(int argc, const char* argv[]) {
qWarning() << "Found application config, but could not parse it: " << error.errorString(); qWarning() << "Found application config, but could not parse it: " << error.errorString();
} else { } else {
static const QString LAUNCHER_PATH_KEY = "launcherPath"; static const QString LAUNCHER_PATH_KEY = "launcherPath";
QString launcherPath = doc.object()[LAUNCHER_PATH_KEY].toString(); launcherPath = doc.object()[LAUNCHER_PATH_KEY].toString();
if (!launcherPath.isEmpty()) { if (!launcherPath.isEmpty()) {
if (!parser.isSet(noLauncherOption)) { if (!parser.isSet(noLauncherOption)) {
qDebug() << "Found a launcherPath in application config. Starting launcher."; qDebug() << "Found a launcherPath in application config. Starting launcher.";
@ -146,6 +152,7 @@ int main(int argc, const char* argv[]) {
qDebug() << "Found a launcherPath in application config, but the launcher" qDebug() << "Found a launcherPath in application config, but the launcher"
" has been suppressed. Continuing normal execution."; " has been suppressed. Continuing normal execution.";
} }
configFile.close();
} }
} }
} }
@ -398,6 +405,24 @@ int main(int argc, const char* argv[]) {
printSystemInformation(); printSystemInformation();
auto appPointer = dynamic_cast<Application*>(&app);
if (appPointer) {
if (parser.isSet(urlOption)) {
appPointer->overrideEntry();
}
if (parser.isSet(displayNameOption)) {
QString displayName = QString(parser.value(displayNameOption));
appPointer->forceDisplayName(displayName);
}
if (!launcherPath.isEmpty()) {
appPointer->setConfigFileURL(configFileName);
}
if (parser.isSet(responseTokensOption)) {
QString tokens = QString(parser.value(responseTokensOption));
appPointer->forceLoginWithTokens(tokens);
}
}
QTranslator translator; QTranslator translator;
translator.load("i18n/interface_en"); translator.load("i18n/interface_en");
app.installTranslator(&translator); app.installTranslator(&translator);

View file

@ -2162,6 +2162,8 @@ qint64 AudioClient::AudioOutputIODevice::readData(char * data, qint64 maxSize) {
} }
bytesWritten = framesPopped * AudioConstants::SAMPLE_SIZE * deviceChannelCount; bytesWritten = framesPopped * AudioConstants::SAMPLE_SIZE * deviceChannelCount;
assert(bytesWritten <= maxSize);
} else { } else {
// nothing on network, don't grab anything from injectors, and just return 0s // nothing on network, don't grab anything from injectors, and just return 0s
memset(data, 0, maxSize); memset(data, 0, maxSize);
@ -2174,7 +2176,6 @@ qint64 AudioClient::AudioOutputIODevice::readData(char * data, qint64 maxSize) {
_audio->_audioFileWav.addRawAudioChunk(reinterpret_cast<char*>(scratchBuffer), bytesWritten); _audio->_audioFileWav.addRawAudioChunk(reinterpret_cast<char*>(scratchBuffer), bytesWritten);
} }
int bytesAudioOutputUnplayed = _audio->_audioOutput->bufferSize() - _audio->_audioOutput->bytesFree(); int bytesAudioOutputUnplayed = _audio->_audioOutput->bufferSize() - _audio->_audioOutput->bytesFree();
float msecsAudioOutputUnplayed = bytesAudioOutputUnplayed / (float)_audio->_outputFormat.bytesForDuration(USECS_PER_MSEC); float msecsAudioOutputUnplayed = bytesAudioOutputUnplayed / (float)_audio->_outputFormat.bytesForDuration(USECS_PER_MSEC);
_audio->_stats.updateOutputMsUnplayed(msecsAudioOutputUnplayed); _audio->_stats.updateOutputMsUnplayed(msecsAudioOutputUnplayed);

View file

@ -364,10 +364,19 @@ int InboundAudioStream::popSamples(int maxSamples, bool allOrNothing) {
// buffer calculations. // buffer calculations.
setToStarved(); setToStarved();
_consecutiveNotMixedCount++; _consecutiveNotMixedCount++;
//Kick PLC to generate a filler frame, reducing 'click'
lostAudioData(allOrNothing ? (maxSamples - samplesAvailable) / _ringBuffer.getNumFrameSamples() : 1); // use PLC to generate extrapolated audio data, to reduce clicking
samplesPopped = _ringBuffer.samplesAvailable(); if (allOrNothing) {
if (samplesPopped) { int samplesNeeded = maxSamples - samplesAvailable;
int packetsNeeded = (samplesNeeded + _ringBuffer.getNumFrameSamples() - 1) / _ringBuffer.getNumFrameSamples();
lostAudioData(packetsNeeded);
} else {
lostAudioData(1);
}
samplesAvailable = _ringBuffer.samplesAvailable();
if (samplesAvailable > 0) {
samplesPopped = std::min(samplesAvailable, maxSamples);
popSamplesNoCheck(samplesPopped); popSamplesNoCheck(samplesPopped);
} else { } else {
// No samples available means a packet is currently being // No samples available means a packet is currently being

View file

@ -97,6 +97,7 @@ void AccountManager::logout() {
// remove this account from the account settings file // remove this account from the account settings file
removeAccountFromFile(); removeAccountFromFile();
saveLoginStatus(false);
emit logoutComplete(); emit logoutComplete();
// the username has changed to blank // the username has changed to blank
@ -650,6 +651,39 @@ void AccountManager::refreshAccessToken() {
} }
} }
void AccountManager::setAccessTokens(const QString& response) {
QJsonDocument jsonResponse = QJsonDocument::fromJson(response.toUtf8());
const QJsonObject& rootObject = jsonResponse.object();
if (!rootObject.contains("error")) {
// construct an OAuthAccessToken from the json object
if (!rootObject.contains("access_token") || !rootObject.contains("expires_in")
|| !rootObject.contains("token_type")) {
// TODO: error handling - malformed token response
qCDebug(networking) << "Received a response for password grant that is missing one or more expected values.";
} else {
// clear the path from the response URL so we have the right root URL for this access token
QUrl rootURL = rootObject.contains("url") ? rootObject["url"].toString() : _authURL;
rootURL.setPath("");
qCDebug(networking) << "Storing an account with access-token for" << qPrintable(rootURL.toString());
_accountInfo = DataServerAccountInfo();
_accountInfo.setAccessTokenFromJSON(rootObject);
emit loginComplete(rootURL);
persistAccountToFile();
saveLoginStatus(true);
requestProfile();
}
} else {
// TODO: error handling
qCDebug(networking) << "Error in response for password grant -" << rootObject["error_description"].toString();
emit loginFailed();
}
}
void AccountManager::requestAccessTokenFinished() { void AccountManager::requestAccessTokenFinished() {
QNetworkReply* requestReply = reinterpret_cast<QNetworkReply*>(sender()); QNetworkReply* requestReply = reinterpret_cast<QNetworkReply*>(sender());
@ -895,3 +929,34 @@ void AccountManager::handleKeypairGenerationError() {
void AccountManager::setLimitedCommerce(bool isLimited) { void AccountManager::setLimitedCommerce(bool isLimited) {
_limitedCommerce = isLimited; _limitedCommerce = isLimited;
} }
void AccountManager::saveLoginStatus(bool isLoggedIn) {
if (!_configFileURL.isEmpty()) {
QFile configFile(_configFileURL);
configFile.open(QIODevice::ReadOnly | QIODevice::Text);
QJsonParseError error;
QJsonDocument jsonDocument = QJsonDocument::fromJson(configFile.readAll(), &error);
configFile.close();
QString launcherPath;
if (error.error == QJsonParseError::NoError) {
QJsonObject rootObject = jsonDocument.object();
if (rootObject.contains("launcherPath")) {
launcherPath = rootObject["launcherPath"].toString();
}
if (rootObject.contains("loggedIn")) {
rootObject["loggedIn"] = isLoggedIn;
}
jsonDocument = QJsonDocument(rootObject);
}
configFile.open(QFile::WriteOnly | QFile::Text | QFile::Truncate);
configFile.write(jsonDocument.toJson());
configFile.close();
if (!isLoggedIn && !launcherPath.isEmpty()) {
QProcess launcher;
launcher.setProgram(launcherPath);
launcher.startDetached();
qApp->quit();
}
}
}

View file

@ -102,6 +102,10 @@ public:
bool getLimitedCommerce() { return _limitedCommerce; } bool getLimitedCommerce() { return _limitedCommerce; }
void setLimitedCommerce(bool isLimited); void setLimitedCommerce(bool isLimited);
void setAccessTokens(const QString& response);
void setConfigFileURL(const QString& fileURL) { _configFileURL = fileURL; }
void saveLoginStatus(bool isLoggedIn);
public slots: public slots:
void requestAccessToken(const QString& login, const QString& password); void requestAccessToken(const QString& login, const QString& password);
void requestAccessTokenWithSteam(QByteArray authSessionTicket); void requestAccessTokenWithSteam(QByteArray authSessionTicket);
@ -162,6 +166,7 @@ private:
QUuid _sessionID { QUuid::createUuid() }; QUuid _sessionID { QUuid::createUuid() };
bool _limitedCommerce { false }; bool _limitedCommerce { false };
QString _configFileURL;
}; };
#endif // hifi_AccountManager_h #endif // hifi_AccountManager_h

View file

@ -0,0 +1,41 @@
"use strict";
/* jslint vars: true, plusplus: true */
//
// defaultScripts.js
//
// Authors: Zach Fox
// Created: 2019-05-23
// Copyright 2019 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
var DEFAULT_SCRIPTS_PATH_PREFIX = ScriptDiscoveryService.defaultScriptsPath + "/";
var DEFAULT_SCRIPTS_SEPARATE = [
DEFAULT_SCRIPTS_PATH_PREFIX + "system/controllers/controllerScripts.js",
Script.resolvePath("simplifiedUI.js")
];
function loadSeparateDefaults() {
for (var i in DEFAULT_SCRIPTS_SEPARATE) {
Script.load(DEFAULT_SCRIPTS_SEPARATE[i]);
}
}
var DEFAULT_SCRIPTS_COMBINED = [
DEFAULT_SCRIPTS_PATH_PREFIX + "system/request-service.js",
DEFAULT_SCRIPTS_PATH_PREFIX + "system/progress.js",
DEFAULT_SCRIPTS_PATH_PREFIX + "system/away.js"
];
function runDefaultsTogether() {
for (var i in DEFAULT_SCRIPTS_COMBINED) {
Script.include(DEFAULT_SCRIPTS_COMBINED[i]);
}
loadSeparateDefaults();
}
runDefaultsTogether();

View file

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View file

@ -5,7 +5,7 @@
// simplifiedUI.js // simplifiedUI.js
// //
// Authors: Wayne Chen & Zach Fox // Authors: Wayne Chen & Zach Fox
// Created on: 5/1/2019 // Created: 2019-05-01
// Copyright 2019 High Fidelity, Inc. // Copyright 2019 High Fidelity, Inc.
// //
// Distributed under the Apache License, Version 2.0. // Distributed under the Apache License, Version 2.0.
@ -103,6 +103,8 @@ var AVATAR_APP_PRESENTATION_MODE = Desktop.PresentationMode.NATIVE;
var AVATAR_APP_WIDTH_PX = 480; var AVATAR_APP_WIDTH_PX = 480;
var AVATAR_APP_HEIGHT_PX = 615; var AVATAR_APP_HEIGHT_PX = 615;
var avatarAppWindow = false; var avatarAppWindow = false;
var POPOUT_SAFE_MARGIN_X = 30;
var POPOUT_SAFE_MARGIN_Y = 30;
function toggleAvatarApp() { function toggleAvatarApp() {
if (avatarAppWindow) { if (avatarAppWindow) {
avatarAppWindow.close(); avatarAppWindow.close();
@ -119,6 +121,10 @@ function toggleAvatarApp() {
size: { size: {
x: AVATAR_APP_WIDTH_PX, x: AVATAR_APP_WIDTH_PX,
y: AVATAR_APP_HEIGHT_PX y: AVATAR_APP_HEIGHT_PX
},
position: {
x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - AVATAR_APP_WIDTH_PX / 2),
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - AVATAR_APP_HEIGHT_PX / 2)
} }
}); });
@ -181,6 +187,10 @@ function toggleSettingsApp() {
size: { size: {
x: SETTINGS_APP_WIDTH_PX, x: SETTINGS_APP_WIDTH_PX,
y: SETTINGS_APP_HEIGHT_PX y: SETTINGS_APP_HEIGHT_PX
},
position: {
x: Math.max(Window.x + POPOUT_SAFE_MARGIN_X, Window.x + Window.innerWidth / 2 - SETTINGS_APP_WIDTH_PX / 2),
y: Math.max(Window.y + POPOUT_SAFE_MARGIN_Y, Window.y + Window.innerHeight / 2 - SETTINGS_APP_HEIGHT_PX / 2)
} }
}); });

View file

@ -0,0 +1,20 @@
# Post build script
import os
import sys
SOURCE_PATH = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..', '..'))
BUILD_PATH = os.path.join(SOURCE_PATH, 'build')
# FIXME move the helper python modules somewher other than the root of the repo
sys.path.append(SOURCE_PATH)
import hifi_utils
#for var in sys.argv:
# print("{}".format(var))
#for var in os.environ:
# print("{} = {}".format(var, os.environ[var]))
print("Create ZIP version of installer archive")
hifi_utils.executeSubprocess(['cpack', '-G', 'ZIP'], folder=BUILD_PATH)

View file

@ -1,235 +1,235 @@
# General # General
This document describes the process to build Qt 5.12.3. This document describes the process to build Qt 5.12.3.
Note that there are two patches. The first (to qfloat16.h) is needed to compile QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this. Note that there are two patches. The first (to qfloat16.h) is needed to compile QT 5.12.3 on Visual Studio 2017 due to a bug in Visual Studio (*bitset* will not compile. Note that there is a change in CMakeLists.txt to support this.
The second patch is to OpenSL ES audio. The second patch is to OpenSL ES audio.
## Requirements ## Requirements
### Windows ### Windows
1. Visual Studio 2017 1. Visual Studio 2017
If you dont have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/). If you dont have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/).
Install with defaults Install with defaults
1. python 2.7.16 1. python 2.7.16
Check if needed running `python --version` - should return python 2.7.x Check if needed running `python --version` - should return python 2.7.x
Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi Install from https://www.python.org/ftp/python/2.7.16/python-2.7.16.amd64.msi
Add path to python executable to PATH. Add path to python executable to PATH.
NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable. NOTE: REMOVE python 3 from PATH. Our regular build uses python 3. This will still work, because HIFI_PYTHON_EXEC points to the python 3 executable.
Verify that python runs python 2.7 (run “python --version”) Verify that python runs python 2.7 (run “python --version”)
1. git >= 1.6 1. git >= 1.6
Check if needed `git --version` Check if needed `git --version`
Download from https://git-scm.com/download/win Download from https://git-scm.com/download/win
Verify by entering `git --version` Verify by entering `git --version`
1. perl >= 5.14 1. perl >= 5.14
Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\ Install from Strawberry Perl - http://strawberryperl.com/ - 5.28.1.1 64 bit to C:\Strawberry\
Verify by running `perl --version` Verify by running `perl --version`
1. flex and bison 1. flex and bison
Download from https://sourceforge.net/projects/winflexbison/files/latest/download Download from https://sourceforge.net/projects/winflexbison/files/latest/download
Uncompress in C:\flex_bison Uncompress in C:\flex_bison
Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe Rename win-bison.exe to bison.exe and win-flex.exe to flex.exe
Add C:\flex_bison to PATH Add C:\flex_bison to PATH
Verify by running `flex --version` Verify by running `flex --version`
Verify by running `bison --version` Verify by running `bison --version`
1. gperf 1. gperf
Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php Install from http://gnuwin32.sourceforge.net/downlinks/gperf.php
Add C:\Program Files (x86)\GnuWin32\bin to PATH Add C:\Program Files (x86)\GnuWin32\bin to PATH
Verify by running `gperf --version` Verify by running `gperf --version`
1. 7-zip 1. 7-zip
Download from https://www.7-zip.org/download.html Download from https://www.7-zip.org/download.html
1. Bash shell 1. Bash shell
From *Settings* select *Update & Security* From *Settings* select *Update & Security*
Select *For Developers* Select *For Developers*
Enable *Developer mode* Enable *Developer mode*
Restart PC Restart PC
Open Control Panel and select *Programs and Features* Open Control Panel and select *Programs and Features*
Select *Turn Windows features on or off* Select *Turn Windows features on or off*
Check *Windows Subsystem for Linux* Check *Windows Subsystem for Linux*
Click *Restart now* Click *Restart now*
Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version Download from the Microsoft Store - Search for *bash* and choose the latest Ubuntu version
[First run will take a few minutes] [First run will take a few minutes]
Enter a user name - all small letters (this is used for *sudo* commands) Enter a user name - all small letters (this is used for *sudo* commands)
Choose a password Choose a password
### Linux ### Linux
Tested on Ubuntu 16.04 and 18.04. Tested on Ubuntu 16.04 and 18.04.
**16.04 NEEDED FOR JENKINS~~ ** **16.04 NEEDED FOR JENKINS~~ **
1. qt5 requirements 1. qt5 requirements
edit /etc/apt/sources.list (edit as root) edit /etc/apt/sources.list (edit as root)
replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`) replace all *# deb-src* with *deb-src* (in vi `1,$s/# deb-src/deb-src/`)
`sudo apt-get update -y` `sudo apt-get update -y`
`sudo apt-get upgrade -y` `sudo apt-get upgrade -y`
`sudo apt-get build-dep qt5-default -y` `sudo apt-get build-dep qt5-default -y`
1. git >= 1.6 1. git >= 1.6
Check if needed `git --version` Check if needed `git --version`
`sudo apt-get install git -y` `sudo apt-get install git -y`
Verify again Verify again
1. python 1. python
Check if needed `python --version` - should return python 2.7.x Check if needed `python --version` - should return python 2.7.x
`sudo apt-get install python -y` (not python 3!) `sudo apt-get install python -y` (not python 3!)
Verify again Verify again
1. gperf 1. gperf
Check if needed `gperf --version` Check if needed `gperf --version`
`sudo apt-get install gperf -y` `sudo apt-get install gperf -y`
Verify again Verify again
1. bison and flex 1. bison and flex
Check if needed `flex --version` and `bison --version` Check if needed `flex --version` and `bison --version`
`sudo apt-get install flex bison -y` `sudo apt-get install flex bison -y`
Verify again Verify again
1. pkg-config (needed for qtwebengine) 1. pkg-config (needed for qtwebengine)
Check if needed `pkg-config --version` Check if needed `pkg-config --version`
`sudo apt-get install pkg-config -y` `sudo apt-get install pkg-config -y`
Verify again Verify again
1. OpenGL 1. OpenGL
Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"` Verify (first install mesa-utils - `sudo apt install mesa-utils -y`) by `glxinfo | grep "OpenGL version"`
`sudo apt-get install libgl1-mesa-dev -y` `sudo apt-get install libgl1-mesa-dev -y`
`sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0` `sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so.346.35 /usr/lib/x86_64-linux-gnu/libGL.so.1.2.0`
Verify again Verify again
1. make 1. make
Check if needed `make --version` Check if needed `make --version`
`sudo apt-get install make -y` `sudo apt-get install make -y`
Verify again Verify again
1. g++ 1. g++
Check if needed Check if needed
`g++ --version` `g++ --version`
`sudo apt-get install g++ -y` `sudo apt-get install g++ -y`
Verify again Verify again
1. dbus-1 (needed for qtwebengine) 1. dbus-1 (needed for qtwebengine)
`sudo apt-get install libdbus-glib-1-dev -y` `sudo apt-get install libdbus-glib-1-dev -y`
1. nss (needed for qtwebengine) 1. nss (needed for qtwebengine)
`sudo apt-get install libnss3-dev -y` `sudo apt-get install libnss3-dev -y`
### Mac ### Mac
1. git >= 1.6 1. git >= 1.6
Check if needed `git --version` Check if needed `git --version`
Install from https://git-scm.com/download/mac Install from https://git-scm.com/download/mac
Verify again Verify again
1. pkg-config 1. pkg-config
brew fontconfig dbus-glib stall pkg-config brew fontconfig dbus-glib stall pkg-config
1. dbus-1 1. dbus-1
brew install dbus-glib brew install dbus-glib
## Build Process ## Build Process
### General ### General
qt is cloned to the qt5 folder. qt is cloned to the qt5 folder.
The build is performed in the qt5-build folder. The build is performed in the qt5-build folder.
Build products are installed to the qt5-install folder. Build products are installed to the qt5-install folder.
Before running configure, make sure that the qt5-build folder is empty. Before running configure, make sure that the qt5-build folder is empty.
**Only run the git patches once!!!** **Only run the git patches once!!!**
### Windows ### Windows
Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*. Before building, verify that **HIFI_VCPKG_BASE_VERSION** points to a *vcpkg* folder containing *packages\openssl-windows_x64-windows*.
If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*. If not, follow https://github.com/highfidelity/vcpkg to install *vcpkg* and then *openssl*.
#### Preparing source files #### Preparing source files
`git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch` `git clone --recursive https://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch`
* Copy the **patches** folder to qt5
* Copy the **qt5vars.bat** file to qt5
* Apply the two patches to Qt
`cd qt5` * Copy the **patches** folder to qt5
`git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch` * Copy the **qt5vars.bat** file to qt5
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch` * Apply the two patches to Qt
`cd ..`
#### Configuring
`mkdir qt5-install`
`mkdir qt5-build`
`cd qt5-build`
run `..\qt5\qt5vars.bat` `cd qt5`
`cd ..\..\qt5-build` `git apply --ignore-space-change --ignore-whitespace patches/qfloat16.patch`
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch`
`..\qt5\configure -force-debug-info -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install`
#### Make
`nmake`
`nmake install`
#### Fixing
The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html)
1. Open a bash terminal
1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`)
1. Run the following command
`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;`
1. Copy *qt.conf* to *qt5-install\bin*
#### Uploading
Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip)
Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip)
Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/
### Linux
#### Preparing source files
`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch`
* Copy the **patches** folder to qt5
* Apply one patch to Qt
`cd qt5`
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch`
`cd ..` `cd ..`
#### Configuring #### Configuring
`mkdir qt5-install` `mkdir qt5-install`
`mkdir qt5-build` `mkdir qt5-build`
`cd qt5-build` `cd qt5-build`
*Ubuntu 16.04* run `..\qt5\qt5vars.bat`
`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install` `cd ..\..\qt5-build`
*Ubuntu 18.04* `..\qt5\configure -force-debug-info -opensource -confirm-license -opengl desktop -platform win32-msvc -openssl-linked OPENSSL_LIBS="-lssleay32 -llibeay32" -I %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\include -L %HIFI_VCPKG_BASE_VERSION%\packages\openssl-windows_x64-windows\lib -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ..\qt5-install`
`../qt5/configure -force-debug-info -release -opensource -confirm-license -gdb-index -recheck-all -nomake tests -nomake examples -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -c++std c++14 -prefix ../qt5-install`
???`../qt5/configure -opensource -confirm-license -gdb-index -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install`
#### Make
`make`
????*Ubuntu 18.04 only*
????`make module-qtwebengine`
????`make module-qtscript`
*Both*
`make install`
#### Fixing
1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html)
`cd ../qt5-install`
`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;`
1. Copy *qt.conf* to *qt5-install\bin*
#### Uploading
*Ubuntu 16.04*
1. Return to the home folder
`cd ..`
1. Open a python 3 shell
`python3`
1. Run the following snippet:
`import os`
`import tarfile`
`filename=tarfile.open("qt5-install.tar.gz", "w:gz")`
`filename.add("qt5-install", os.path.basename("qt5-install"))`
`exit()`
1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04
*Ubuntu 18.04*
``tar -zcvf qt5-install.tar.gz qt5-install`
1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04
1. ### Mac
#### Preparing source files
git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch
* Copy the **patches** folder to qt5
* Apply one patch to Qt
`cd qt5`
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch`
`cd ..`
#### Configuring
`mkdir qt5-install`
`mkdir qt5-build`
`cd ../qt5-build`
`../qt5/configure -force-debug-info -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install`
#### Make #### Make
`make` `nmake`
`make install` `nmake install`
#### Fixing #### Fixing
1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html) The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html)
`cd ../qt5-install` 1. Open a bash terminal
`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;` 1. `cd` to the *qt5-install* folder (e.g. `cd /mnt/d/qt5-install/`)
`cd ..` 1. Run the following command
1. Copy *qt.conf* to *qt5-install\bin* `find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;`
1. Copy *qt.conf* to *qt5-install\bin*
#### Uploading #### Uploading
`tar -zcvf qt5-install.tar.gz qt5-install` Create a tar file called qt5-install.tar from the qt5-install folder (e.g. using 7-zip)
Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/ Create a gzip file called qt5-install.tar.gz from the qt5-install.tar file just created (e.g. using 7-zip)
Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Windows/
### Linux
#### Preparing source files
`git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch`
* Copy the **patches** folder to qt5
* Apply one patch to Qt
`cd qt5`
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch`
`cd ..`
#### Configuring
`mkdir qt5-install`
`mkdir qt5-build`
`cd qt5-build`
*Ubuntu 16.04*
`../qt5/configure -opensource -confirm-license -platform linux-g++-64 -qt-zlib -qt-libjpeg -qt-libpng -qt-xcb -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -no-egl -no-icu -prefix ../qt5-install`
*Ubuntu 18.04*
`../qt5/configure -force-debug-info -release -opensource -confirm-license -gdb-index -recheck-all -nomake tests -nomake examples -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -c++std c++14 -prefix ../qt5-install`
???`../qt5/configure -opensource -confirm-license -gdb-index -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install`
#### Make
`make`
????*Ubuntu 18.04 only*
????`make module-qtwebengine`
????`make module-qtscript`
*Both*
`make install`
#### Fixing
1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html)
`cd ../qt5-install`
`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;`
1. Copy *qt.conf* to *qt5-install\bin*
#### Uploading
*Ubuntu 16.04*
1. Return to the home folder
`cd ..`
1. Open a python 3 shell
`python3`
1. Run the following snippet:
`import os`
`import tarfile`
`filename=tarfile.open("qt5-install.tar.gz", "w:gz")`
`filename.add("qt5-install", os.path.basename("qt5-install"))`
`exit()`
1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/16.04
*Ubuntu 18.04*
``tar -zcvf qt5-install.tar.gz qt5-install`
1. Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Ubuntu/18.04
1. ### Mac
#### Preparing source files
git clone --recursive git://code.qt.io/qt/qt5.git -b 5.12.3 --single-branch
* Copy the **patches** folder to qt5
* Apply one patch to Qt
`cd qt5`
`git apply --ignore-space-change --ignore-whitespace patches/aec.patch`
`cd ..`
#### Configuring
`mkdir qt5-install`
`mkdir qt5-build`
`cd ../qt5-build`
`../qt5/configure -force-debug-info -opensource -confirm-license -qt-zlib -qt-libjpeg -qt-libpng -qt-freetype -qt-pcre -qt-harfbuzz -nomake examples -nomake tests -skip qttranslations -skip qtserialport -skip qt3d -skip qtlocation -skip qtwayland -skip qtsensors -skip qtgamepad -skip qtspeech -skip qtcharts -skip qtx11extras -skip qtmacextras -skip qtvirtualkeyboard -skip qtpurchasing -skip qtdatavis3d -no-warnings-are-errors -no-pch -prefix ../qt5-install`
#### Make
`make`
`make install`
#### Fixing
1. The *.prl* files have an absolute path that needs to be removed (see http://www.linuxfromscratch.org/blfs/view/stable-systemd/x/qtwebengine.html)
`cd ../qt5-install`
`find . -name \*.prl -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \;`
`cd ..`
1. Copy *qt.conf* to *qt5-install\bin*
#### Uploading
`tar -zcvf qt5-install.tar.gz qt5-install`
Upload qt5-install.tar.gz to https://hifi-qa.s3.amazonaws.com/qt5/Mac/
## Problems ## Problems
*configure* errors, if any, may be viewed in **config.log** and **config.summary** *configure* errors, if any, may be viewed in **config.log** and **config.summary**

View file

@ -1,6 +1,6 @@
@echo off @echo off
REM Set up \Microsoft Visual Studio 2015, where <arch> is \c amd64, \c x86, etc. REM Set up \Microsoft Visual Studio 2017, where <arch> is \c amd64, \c x86, etc.
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64 CALL "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
REM Edit this location to point to the source code of Qt REM Edit this location to point to the source code of Qt