Merge with develop

--HG--
branch : compatibility-develop
This commit is contained in:
kervala 2016-10-21 14:27:31 +02:00
commit 7363803b2c
13 changed files with 121 additions and 123 deletions

View file

@ -56,33 +56,37 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
LIST(APPEND _FLAGS " -I\"${item}\"")
ENDFOREACH()
# NOTE: As cmake files (eg FindQT4) may now use generator expressions around their defines that evaluate
# to an empty string, wrap all "items" in an expression that outputs a -D IFF the generated
# expression is not empty.
# Required for CMake 2.6
SET(GLOBAL_DEFINITIONS)
GET_DIRECTORY_PROPERTY(DEFINITIONS COMPILE_DEFINITIONS)
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
GET_DIRECTORY_PROPERTY(DEFINITIONS COMPILE_DEFINITIONS_${_UPPER_BUILD})
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
GET_DIRECTORY_PROPERTY(DEFINITIONS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS)
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
GET_DIRECTORY_PROPERTY(DEFINITIONS DIRECTORY ${CMAKE_SOURCE_DIR} COMPILE_DEFINITIONS_${_UPPER_BUILD})
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
@ -106,14 +110,14 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
GET_TARGET_PROPERTY(DEFINITIONS ${_target} COMPILE_DEFINITIONS)
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
GET_TARGET_PROPERTY(DEFINITIONS ${_target} COMPILE_DEFINITIONS_${_UPPER_BUILD})
IF(DEFINITIONS)
FOREACH(item ${DEFINITIONS})
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
@ -135,10 +139,7 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
IF(_DEFINITIONS)
FOREACH(item ${_DEFINITIONS})
# don't use dynamic expressions
IF(NOT item MATCHES "\\$<")
LIST(APPEND GLOBAL_DEFINITIONS " -D${item}")
ENDIF()
LIST(APPEND GLOBAL_DEFINITIONS "$<$<BOOL:${item}>:-D$<JOIN:${item},-D>>")
ENDFOREACH()
ENDIF()
ENDIF()
@ -149,7 +150,7 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
IF(GLOBAL_DEFINITIONS MATCHES "QT_CORE_LIB")
# Hack to define missing QT_NO_DEBUG with Qt 5.2
IF(_UPPER_BUILD STREQUAL "RELEASE")
LIST(APPEND GLOBAL_DEFINITIONS " -DQT_NO_DEBUG")
LIST(APPEND GLOBAL_DEFINITIONS "-DQT_NO_DEBUG")
ENDIF()
# Qt5_POSITION_INDEPENDENT_CODE should be true if Qt was compiled with PIC
@ -162,8 +163,6 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
ENDIF()
ENDIF()
LIST(APPEND _FLAGS " ${GLOBAL_DEFINITIONS}")
IF(CMAKE_VERSION VERSION_LESS "3.3.0")
GET_DIRECTORY_PROPERTY(_directory_flags DEFINITIONS)
GET_DIRECTORY_PROPERTY(_directory_definitions DIRECTORY ${CMAKE_SOURCE_DIR} DEFINITIONS)
@ -180,6 +179,9 @@ MACRO(PCH_SET_COMPILE_FLAGS _target)
SEPARATE_ARGUMENTS(_FLAGS)
ENDIF()
# Already in list form and items may contain non-leading spaces that should not be split on
LIST(INSERT _FLAGS 0 "${GLOBAL_DEFINITIONS}")
IF(CLANG)
# Determining all architectures and get common flags
SET(_ARCH_NEXT)

View file

@ -1429,22 +1429,27 @@ int getLastError()
std::string formatErrorMessage(int errorCode)
{
#ifdef NL_OS_WINDOWS
LPVOID lpMsgBuf;
FormatMessage(
LPVOID lpMsgBuf = NULL;
DWORD len = FormatMessageW(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
errorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
(LPWSTR) &lpMsgBuf,
0,
NULL
);
string ret = (char*)lpMsgBuf;
// empty buffer, an error occured
if (len == 0) return toString("FormatMessage returned error %d", getLastError());
// convert wchar_t* to std::string
string ret = wideToUtf8(lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
LocalFree(lpMsgBuf);
return ret;
#else

View file

@ -505,59 +505,6 @@ QString CConfigFile::getParentDirectory()
return current.absolutePath();
}
QString CConfigFile::getOldInstallationDirectory()
{
// HKEY_CURRENT_USER/SOFTWARE/Nevrax/RyzomInstall/InstallId=1917716796 (string)
#if defined(Q_OS_WIN)
// NSIS previous official installer
#ifdef Q_OS_WIN64
// use WOW6432Node in 64 bits (64 bits OS and 64 bits Installer) because Ryzom old installer was in 32 bits
QSettings settings("HKEY_LOCAL_MACHINE\\Software\\WOW6432Node\\Nevrax\\Ryzom", QSettings::NativeFormat);
#else
QSettings settings("HKEY_LOCAL_MACHINE\\Software\\Nevrax\\Ryzom", QSettings::NativeFormat);
#endif
if (settings.contains("Ryzom Install Path"))
{
return QDir::fromNativeSeparators(settings.value("Ryzom Install Path").toString());
}
// check default directory if registry key not found
return CConfigFile::has64bitsOS() ? "C:/Program Files (x86)/Ryzom":"C:/Program Files/Ryzom";
#elif defined(Q_OS_MAC)
return "/Applications/Ryzom.app";
#else
return QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.ryzom";
#endif
}
QString CConfigFile::getOldInstallationLanguage()
{
#if defined(Q_OS_WIN)
// NSIS previous official installer
#ifdef Q_OS_WIN64
// use WOW6432Node in 64 bits (64 bits OS and 64 bits Installer) because Ryzom old installer was in 32 bits
QSettings settings("HKEY_LOCAL_MACHINE\\Software\\WOW6432Node\\Nevrax\\Ryzom", QSettings::NativeFormat);
#else
QSettings settings("HKEY_LOCAL_MACHINE\\Software\\Nevrax\\Ryzom", QSettings::NativeFormat);
#endif
QString key = "Language";
if (settings.contains(key))
{
QString languageCode = settings.value(key).toString();
// 1036 = French (France), 1033 = English (USA), 1031 = German
if (languageCode == "1036") return "fr";
if (languageCode == "1031") return "de";
if (languageCode == "1033") return "en";
}
#endif
return "";
}
QString CConfigFile::getNewInstallationLanguage()
{
#if defined(Q_OS_WIN)
@ -745,6 +692,9 @@ int CConfigFile::compareInstallersVersion() const
QString installedVersion = getVersionFromExecutable(installerDst);
// if unable to get version, copy it
if (installedVersion.isEmpty()) return 1;
nlinfo("%s version is %s", Q2C(installerDst), Q2C(installedVersion));
QString newVersion = QApplication::applicationVersion();
@ -892,8 +842,13 @@ OperationStep CConfigFile::getInstallNextStep() const
// only show wizard if installation directory undefined
if (getInstallationDirectory().isEmpty())
{
QString currentDirectory;
#ifdef Q_OS_WIN32
// only under Windows
// if launched from current directory, it means we just patched files
QString currentDirectory = getCurrentDirectory();
currentDirectory = getCurrentDirectory();
if (!isRyzomInstalledIn(currentDirectory))
{
@ -905,6 +860,7 @@ OperationStep CConfigFile::getInstallNextStep() const
currentDirectory.clear();
}
}
#endif
// install or migrate depending if Ryzom was found in current directory
return currentDirectory.isEmpty() ? ShowInstallWizard:ShowMigrateWizard;

View file

@ -90,9 +90,7 @@ public:
// default directories
static QString getCurrentDirectory();
static QString getParentDirectory();
static QString getOldInstallationDirectory();
static QString getNewInstallationDirectory();
static QString getOldInstallationLanguage();
static QString getNewInstallationLanguage();
// status of installation

View file

@ -182,12 +182,12 @@ bool CFilesCopier::copyFiles(const FilesToCopy &files)
if (!QFile::setPermissions(file.dst, file.permissions))
{
qDebug() << "Unable to change permissions of " << file.dst;
nlwarning("Unable to change permissions of %s", Q2C(file.dst));
}
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(file.dst), file.date))
{
qDebug() << "Unable to change date of " << file.dst;
nlwarning("Unable to change date of %s", Q2C(file.dst));
}
}

View file

@ -289,7 +289,7 @@ bool CFilesExtractor::exec()
return extractBnp();
}
qDebug() << "Unsupported format";
nlwarning("Unsupported format");
return false;
}
@ -319,6 +319,8 @@ bool CFilesExtractor::extract7z()
if (!inFile.open())
{
nlwarning("Unable to open %s", Q2C(m_sourceFile));
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to open %1").arg(m_sourceFile));
return false;
}
@ -451,14 +453,21 @@ bool CFilesExtractor::extract7z()
if (res != SZ_OK) break;
QString destSubPath = QFileInfo(destPath).absolutePath();
// create file directory
QDir().mkpath(QFileInfo(destPath).absolutePath());
if (!QDir().mkpath(destSubPath))
{
nlwarning("Unable to create directory %s", Q2C(destSubPath));
}
// create file
QFile outFile(destPath);
if (!outFile.open(QFile::WriteOnly))
{
nlwarning("Unable to open file %s", Q2C(destPath));
error = QApplication::tr("Unable to open output file %1").arg(destPath);
res = SZ_ERROR_FAIL;
break;
@ -480,6 +489,8 @@ bool CFilesExtractor::extract7z()
if (offset != outSizeProcessed)
{
nlwarning("Unable to write output file %s (%u bytes written but expecting %u bytes)", Q2C(destPath), (uint32)offset, (uint32)outSizeProcessed);
error = QApplication::tr("Unable to write output file %1 (%2 bytes written but expecting %3 bytes)").arg(destPath).arg(offset).arg(outSizeProcessed);
res = SZ_ERROR_FAIL;
break;
@ -500,7 +511,7 @@ bool CFilesExtractor::extract7z()
// set modification time
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(destPath), modificationTime))
{
qDebug() << "Unable to change date of " << destPath;
nlwarning("Unable to change date of %s", Q2C(destPath));
}
}
@ -571,12 +582,16 @@ bool CFilesExtractor::extractZip()
if (!baseDir.mkpath(fi.filePath))
{
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to create directory %1").arg(absPath));
nlwarning("Unable to create directory %s", Q2C(fi.filePath));
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to create directory %1").arg(fi.filePath));
return false;
}
if (!QFile::setPermissions(absPath, fi.permissions))
{
nlwarning("Unable to change permissions of %s", Q2C(absPath));
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to set permissions of %1").arg(absPath));
return false;
}
@ -609,19 +624,25 @@ bool CFilesExtractor::extractZip()
if (!f.open(QIODevice::WriteOnly))
{
nlwarning("Unable to open %s", Q2C(absPath));
if (m_listener) m_listener->operationFail(QApplication::tr("Unable to open %1").arg(absPath));
return false;
}
currentSize += f.write(reader.fileData(fi.filePath));
f.setPermissions(fi.permissions);
if (!f.setPermissions(fi.permissions))
{
nlwarning("Unable to change permissions of %s", Q2C(absPath));
}
f.close();
// set the right modification date
if (!NLMISC::CFile::setFileModificationDate(qToUtf8(absPath), fi.lastModified.toTime_t()))
{
qDebug() << "Unable to change date of " << absPath;
nlwarning("Unable to change date of %s", Q2C(absPath));
}
if (m_listener) m_listener->operationProgress(currentSize, QFileInfo(absPath).fileName());
@ -692,18 +713,26 @@ bool CFilesExtractor::extractBnp()
}
catch(const NLMISC::EDiskFullError &e)
{
nlwarning("Disk full when extracting %s to %s", Q2C(m_sourceFile), Q2C(m_destinationDirectory));
error = QApplication::tr("disk full");
}
catch(const NLMISC::EWriteError &e)
{
nlwarning("Write error when extracting %s to %s", Q2C(m_sourceFile), Q2C(m_destinationDirectory));
error = QApplication::tr("unable to write %1").arg(qFromUtf8(e.Filename));
}
catch(const NLMISC::EReadError &e)
{
nlwarning("Read error when extracting %s to %s", Q2C(m_sourceFile), Q2C(m_destinationDirectory));
error = QApplication::tr("unable to read %1").arg(qFromUtf8(e.Filename));
}
catch(const std::exception &e)
{
nlwarning("Unknown exception when extracting %s to %s", Q2C(m_sourceFile), Q2C(m_destinationDirectory));
error = QApplication::tr("failed (%1)").arg(qFromUtf8(e.what()));
}

View file

@ -64,13 +64,13 @@ bool copyInstallerFiles(const QStringList &files, const QString &destination)
{
if (!QFile::remove(dstPath))
{
qDebug() << "Unable to delete" << dstPath;
nlwarning("Unable to delete %s", Q2C(dstPath));
}
}
if (!QFile::copy(srcPath, dstPath))
{
qDebug() << "Unable to copy" << srcPath << "to" << dstPath;
nlwarning("Unable to copy %s to %s", Q2C(srcPath), Q2C(dstPath));
return false;
}
@ -248,12 +248,15 @@ int main(int argc, char *argv[])
if (step == ShowMigrateWizard)
{
nlinfo("Display migration dialog");
#ifdef Q_OS_WIN32
CMigrateDialog dialog;
if (!dialog.exec()) return 1;
step = config.getInstallNextStep();
#else
nlwarning("Migration disabled under Linux and OS X");
#endif
}
else if (step == ShowInstallWizard)
{
@ -307,6 +310,8 @@ int main(int argc, char *argv[])
#endif
if (QProcess::startDetached(config.getInstallerInstalledFilePath())) return 0;
nlwarning("Unable to restart Installer %s", Q2C(config.getInstallerInstalledFilePath()));
#endif
}

View file

@ -16,6 +16,9 @@
#include "stdpch.h"
#include "migratedialog.h"
#ifdef Q_OS_WIN32
#include "configfile.h"
#include "utils.h"
@ -49,12 +52,6 @@ CMigrateDialog::CMigrateDialog():QDialog()
// update default destination
onDestinationDefaultButtonClicked();
#ifdef Q_OS_MAC
// only 64 bits for OS X
clientArchGroupBox->setVisible(false);
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#elif defined(Q_OS_WIN32)
// both 32 and 64 bits are working under Windows 64 bits
// check whether OS architecture is 32 or 64 bits
@ -72,22 +69,6 @@ CMigrateDialog::CMigrateDialog():QDialog()
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
}
#else
// only use the current architecture for Linux
clientArchGroupBox->setVisible(false);
#ifdef _LP64
// only 64 bits is available
clientArch64RadioButton->setChecked(true);
clientArch32RadioButton->setChecked(false);
#else
// only 32 bits is available
clientArch64RadioButton->setChecked(false);
clientArch32RadioButton->setChecked(true);
#endif
#endif
const CServer &server = CConfigFile::getInstance()->getServer();
@ -198,3 +179,5 @@ void CMigrateDialog::accept()
QDialog::accept();
}
#endif

View file

@ -17,6 +17,8 @@
#ifndef MIGRATEDIALOG_H
#define MIGRATEDIALOG_H
#if defined(Q_OS_WIN32) || defined(Q_MOC_RUN)
#include "ui_migratedialog.h"
/**
@ -48,3 +50,5 @@ private:
};
#endif
#endif

View file

@ -141,7 +141,7 @@ void COperationDialog::processInstallNextStep()
if (m_operationStepCounter > 10)
{
qDebug() << "possible infinite loop" << m_operationStep << m_operationStepCounter;
nlwarning("Possible infinite loop, step %s %d times", Q2C(stepToString(m_operationStep)), m_operationStepCounter);
}
switch(step)
@ -205,7 +205,8 @@ void COperationDialog::processInstallNextStep()
default:
// cases already managed in main.cpp
qDebug() << "Shouldn't happen, step" << step;
nlwarning("Shouldn't happen, step %s", Q2C(stepToString(step)));
break;
}
}
@ -706,14 +707,14 @@ void COperationDialog::launchUpgradeScript(const QString &directory, const QStri
if (!QFile::setPermissions(upgradeScript, permissions))
{
qDebug() << "Unable to set executable flag to" << upgradeScript;
nlwarning("Unable to set executable flag to %s", Q2C(upgradeScript));
}
process.start(upgradeScript);
while (process.waitForFinished())
{
qDebug() << "waiting";
nlwarning("Waiting end of %s", Q2C(upgradeScript));
}
}
@ -764,7 +765,7 @@ void COperationDialog::copyInstaller()
if (!path.isEmpty() && !QDir().mkpath(path))
{
qDebug() << "Unable to create directory" << path;
nlwarning("Unable to create directory %s", Q2C(path));
}
// create installer link in menu
@ -785,7 +786,7 @@ void COperationDialog::copyInstaller()
// create icon if not exists
if (!QFile::exists(icon) && !writeResource(":/icons/ryzom.png", icon))
{
qDebug() << "Unable to create" << icon;
nlwarning("Unable to create icon %s", Q2C(icon));
}
#endif
@ -1215,7 +1216,7 @@ void COperationDialog::deleteComponentsDownloadedFiles()
{
if (!QFile::remove(dir.filePath(file)))
{
qDebug() << "Unable to delete" << file;
nlwarning("Unable to delete file %s", Q2C(file));
}
}

View file

@ -128,7 +128,7 @@ void CProfile::createShortcuts() const
// create desktop shortcut
if (!createShortcut(shortcut, name, exe, profileArguments, icon, workingDir))
{
qDebug() << "Unable to create desktop shortcut";
nlwarning("Unable to create desktop shortcut");
}
}
@ -142,7 +142,7 @@ void CProfile::createShortcuts() const
// create menu shortcut
if (!createShortcut(shortcut, name, exe, profileArguments, icon, workingDir))
{
qDebug() << "Unable to create shortcut for client in menu";
nlwarning("Unable to create shortcut for client in menu");
}
}
}

View file

@ -94,7 +94,7 @@ void CProfilesDialog::onDeleteProfile()
void CProfilesDialog::onProfileClicked(const QModelIndex &index)
{
qDebug() << "clicked on" << index;
nlwarning("Clicked on profile %d", index.row());
displayProfile(index.row());
}

View file

@ -192,7 +192,7 @@ bool createShortcut(const QString &shortcut, const QString &name, const QString
if (FAILED(hres))
{
qDebug() << "Unable to create shortcut" << path;
nlwarning("Unable to create shortcut %s", Q2C(path));
}
ppf->Release();
@ -409,26 +409,41 @@ QString appendShortcutExtension(const QString &shortcut)
QString getVersionFromExecutable(const QString &path)
{
// check if file exists
if (!QFile::exists(path)) return "";
if (!QFile::exists(path))
{
nlwarning("Unable to find %s", Q2C(path));
return "";
}
#ifndef Q_OS_WIN32
// fix executable permissions under UNIX
QFile::setPermissions(path, QFile::permissions(path) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther);
if (!QFile::setPermissions(path, QFile::permissions(path) | QFile::ExeGroup | QFile::ExeUser | QFile::ExeOther))
{
nlwarning("Unable to set executable permissions to %s", Q2C(path));
}
#endif
// launch executable with --version argument
QProcess process;
process.setProcessChannelMode(QProcess::MergedChannels);
process.start(path, QStringList() << "--version", QIODevice::ReadWrite);
process.start(path, QStringList() << "--version", QIODevice::ReadOnly);
if (!process.waitForStarted()) return "";
if (!process.waitForStarted())
{
nlwarning("Unable to start %s", Q2C(path));
return "";
}
QByteArray data;
// read all output
while (process.waitForReadyRead(1000)) data.append(process.readAll());
if (!data.isEmpty())
if (data.isEmpty())
{
nlwarning("%s --version didn't return any data", Q2C(path));
}
else
{
QString versionString = QString::fromUtf8(data);