mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 04:57:23 +02:00
Merge branch 'master' of https://github.com/highfidelity/hifi into domaincheckin
This commit is contained in:
commit
aaee796aef
27 changed files with 451 additions and 272 deletions
|
@ -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
|
||||||
|
|
|
@ -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!!!')
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() {
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
41
scripts/simplifiedUI/defaultScripts.js
Normal file
41
scripts/simplifiedUI/defaultScripts.js
Normal 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();
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
|
@ -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)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
20
tools/ci-scripts/postbuild.py
Normal file
20
tools/ci-scripts/postbuild.py
Normal 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)
|
|
@ -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 don’t have Community or Professional edition of Visual Studio 2017, download [Visual Studio Community 2017](https://www.visualstudio.com/downloads/).
|
If you don’t 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**
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue