From 8633d999d691f7072a6a40679398750e1af5f850 Mon Sep 17 00:00:00 2001 From: kh1 Date: Wed, 23 Jan 2013 14:29:03 +0100 Subject: Make IFW compile with mingw. Change-Id: I0336e02ef701a2bc392bd385d1822bc51cee0c5c Reviewed-by: Kai Koehne --- installerfw.pri | 4 +- src/libs/7zip/7zip.pro | 1 + src/libs/7zip/win/CPP/Common/DynamicBuffer.h | 4 +- src/libs/installer/adminauthorization_win.cpp | 8 ++- src/libs/installer/binaryformat.cpp | 2 +- .../installer/createlocalrepositoryoperation.cpp | 2 +- src/libs/installer/createshortcutoperation.cpp | 7 ++- src/libs/installer/fileutils.cpp | 2 +- src/libs/installer/installer.pro | 4 ++ src/libs/installer/lib7z_facade.cpp | 2 +- src/libs/installer/link.cpp | 52 +++++++++------- src/libs/kdtools/kdsavefile.cpp | 10 ++- src/libs/kdtools/kdsysinfo_win.cpp | 72 +++++++++++++--------- src/libs/kdtools/kdupdaterupdateoperations.cpp | 2 +- src/sdk/sdk.pro | 6 +- tools/binarycreator/binarycreator.cpp | 2 + 16 files changed, 114 insertions(+), 66 deletions(-) diff --git a/installerfw.pri b/installerfw.pri index 97fd94e1b..904099965 100644 --- a/installerfw.pri +++ b/installerfw.pri @@ -37,6 +37,7 @@ LRELEASE = $$cleanPath($$toNativeSeparators($$[QT_INSTALL_BINS]/lrelease)) win32:RCC = $${RCC}.exe win32:LRELEASE = $${LRELEASE}.exe +win32-g++*:QMAKE_CXXFLAGS += -Wno-attributes INCLUDEPATH += \ $$IFW_SOURCE_TREE/src/libs/7zip \ @@ -69,7 +70,8 @@ GIT_SHA1 = $$system(git rev-list --abbrev-commit -n1 HEAD) DEFINES += QT_NO_CAST_FROM_ASCII "_GIT_SHA1_=$$GIT_SHA1" static { - equals(TEMPLATE, app):LIBS += -l7z + LIBS += -l7z + win32-g++*: LIBS += -lmpr -luuid macx:equals(TEMPLATE, app):CONFIG -= app_bundle win32:exists($$IFW_LIB_PATH/installer.lib):POST_TARGETDEPS += $$IFW_LIB_PATH/installer.lib diff --git a/src/libs/7zip/7zip.pro b/src/libs/7zip/7zip.pro index 9a10540e6..d09cbf9a5 100644 --- a/src/libs/7zip/7zip.pro +++ b/src/libs/7zip/7zip.pro @@ -10,6 +10,7 @@ DESTDIR = $$IFW_LIB_PATH include(7zip.pri) win32 { DEFINES += _CRT_SECURE_NO_WARNINGS + win32-g++*:QMAKE_CXXFLAGS += -w -fvisibility=hidden CONFIG += no_batch # this is needed because we have a same named *.c and *.cpp file -> 7in include($$7ZIP_BASE/win.pri) #this is 7zip } diff --git a/src/libs/7zip/win/CPP/Common/DynamicBuffer.h b/src/libs/7zip/win/CPP/Common/DynamicBuffer.h index bf52a7425..eaac123e1 100644 --- a/src/libs/7zip/win/CPP/Common/DynamicBuffer.h +++ b/src/libs/7zip/win/CPP/Common/DynamicBuffer.h @@ -20,7 +20,7 @@ template class CDynamicBuffer: public CBuffer size_t newCap = this->_capacity + delta; if (newCap < delta) newCap = this->_capacity + size; - SetCapacity(newCap); + this->SetCapacity(newCap); } public: CDynamicBuffer(): CBuffer() {}; @@ -31,7 +31,7 @@ public: this->Free(); if (buffer._capacity > 0) { - SetCapacity(buffer._capacity); + this->SetCapacity(buffer._capacity); memmove(this->_items, buffer._items, buffer._capacity * sizeof(T)); } return *this; diff --git a/src/libs/installer/adminauthorization_win.cpp b/src/libs/installer/adminauthorization_win.cpp index 731fe044f..8d1f8352e 100644 --- a/src/libs/installer/adminauthorization_win.cpp +++ b/src/libs/installer/adminauthorization_win.cpp @@ -45,6 +45,12 @@ #include #include +#ifdef Q_CC_MINGW +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +# endif +#endif + #include struct DeCoInitializer @@ -74,7 +80,7 @@ bool AdminAuthorization::authorize() bool AdminAuthorization::hasAdminRights() { - SID_IDENTIFIER_AUTHORITY authority = SECURITY_NT_AUTHORITY; + SID_IDENTIFIER_AUTHORITY authority = { SECURITY_NT_AUTHORITY }; PSID adminGroup; // Initialize SID. if (!AllocateAndInitializeSid(&authority, diff --git a/src/libs/installer/binaryformat.cpp b/src/libs/installer/binaryformat.cpp index 102a7bd87..50e4e24f3 100644 --- a/src/libs/installer/binaryformat.cpp +++ b/src/libs/installer/binaryformat.cpp @@ -311,7 +311,7 @@ bool Archive::copy(const QString &name) errno = 0; const QString absoluteFilePath = fileInfo.absoluteFilePath(); if (!fileInfo.exists() && !QDir().mkpath(absoluteFilePath)) { -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) char msg[128]; if (strerror_s(msg, sizeof msg, errno) != 0) setErrorString(tr("Could not create %1: %2").arg(name, QString::fromLocal8Bit(msg))); diff --git a/src/libs/installer/createlocalrepositoryoperation.cpp b/src/libs/installer/createlocalrepositoryoperation.cpp index b401efb5d..758064488 100644 --- a/src/libs/installer/createlocalrepositoryoperation.cpp +++ b/src/libs/installer/createlocalrepositoryoperation.cpp @@ -371,7 +371,7 @@ bool CreateLocalRepositoryOperation::undoOperation() errno = 0; const bool result = QDir::root().rmdir(createdDir.path()); if (!result) { -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) char msg[128]; if (strerror_s(msg, sizeof msg, errno) != 0) { setError(UserDefinedError, tr("Cannot remove directory %1: %2").arg(createdDir.path(), diff --git a/src/libs/installer/createshortcutoperation.cpp b/src/libs/installer/createshortcutoperation.cpp index 5142e65de..20be6bfa9 100644 --- a/src/libs/installer/createshortcutoperation.cpp +++ b/src/libs/installer/createshortcutoperation.cpp @@ -52,6 +52,11 @@ using namespace QInstaller; #ifdef Q_OS_WIN +#ifdef Q_CC_MINGW +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +# endif +#endif #include #include @@ -192,7 +197,7 @@ bool CreateShortcutOperation::performOperation() if (!created) { setError(UserDefinedError); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) char msg[128]; if (strerror_s(msg, sizeof msg, errno) != 0) { setErrorString(tr("Could not create folder %1: %2.").arg(QDir::toNativeSeparators(linkPath), diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp index b95ca4a1c..9c8e9e50b 100644 --- a/src/libs/installer/fileutils.cpp +++ b/src/libs/installer/fileutils.cpp @@ -256,7 +256,7 @@ void QInstaller::removeFiles(const QString &path, bool ignoreErrors) static QString errnoToQString(int error) { -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) char msg[128]; if (strerror_s(msg, sizeof msg, error) != 0) return QString::fromLocal8Bit(msg); diff --git a/src/libs/installer/installer.pro b/src/libs/installer/installer.pro index 1f19e3e0d..322c3551c 100644 --- a/src/libs/installer/installer.pro +++ b/src/libs/installer/installer.pro @@ -170,7 +170,11 @@ unix:!macx:SOURCES += adminauthorization_x11.cpp LIBS += -l7z win32 { SOURCES += adminauthorization_win.cpp + LIBS += -loleaut32 -luser32 # 7zip LIBS += -ladvapi32 -lpsapi # kdtools LIBS += -lole32 -lshell32 # createshortcutoperation + + win32-g++*:LIBS += -lmpr -luuid + win32-g++*:QMAKE_CXXFLAGS += -Wno-missing-field-initializers } diff --git a/src/libs/installer/lib7z_facade.cpp b/src/libs/installer/lib7z_facade.cpp index e987c7571..0c02890e2 100644 --- a/src/libs/installer/lib7z_facade.cpp +++ b/src/libs/installer/lib7z_facade.cpp @@ -185,7 +185,7 @@ static bool IsDST(const QDateTime& datetime = QDateTime()) { const time_t seconds = static_cast< time_t >(datetime.isValid() ? datetime.toTime_t() : QDateTime::currentDateTime().toTime_t()); -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) struct tm t; localtime_s(&t, &seconds); #else diff --git a/src/libs/installer/link.cpp b/src/libs/installer/link.cpp index 19b50aa49..28f8190d5 100644 --- a/src/libs/installer/link.cpp +++ b/src/libs/installer/link.cpp @@ -50,10 +50,19 @@ #endif #ifdef Q_OS_WIN +#ifdef Q_CC_MINGW +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +# endif +#else +# include +#endif + #include -#include +#include + +#if !defined(REPARSE_DATA_BUFFER_HEADER_SIZE) -// REPARSE_DATA_BUFFER structure from msdn help: http://msdn.microsoft.com/en-us/library/ff552012.aspx typedef struct _REPARSE_DATA_BUFFER { ULONG ReparseTag; USHORT ReparseDataLength; @@ -79,8 +88,9 @@ typedef struct _REPARSE_DATA_BUFFER { } GenericReparseBuffer; }; } REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER; +#define REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer) -#define _REPARSE_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(_REPARSE_DATA_BUFFER, GenericReparseBuffer) +#endif class FileHandleWrapper @@ -154,35 +164,31 @@ Link createJunction(const QString &linkPath, const QString &targetPath) return Link(linkPath); } - TCHAR szDestDir[1024] = L"\\??\\"; //you need this to create valid unicode junctions - - QString normalizedTargetPath = QString(targetPath).replace(QLatin1Char('/'), QLatin1Char('\\')); - //now we add the real absolute path - StringCchCat(szDestDir, 1024, (wchar_t*)normalizedTargetPath.utf16()); + const QString szDestDir = QString::fromLatin1("\\??\\").arg(targetPath).replace(QLatin1Char('/'), + QLatin1Char('\\')); // Allocates a block of memory for an array of num elements(1) and initializes all its bits to zero. - _REPARSE_DATA_BUFFER* reparseStructData = (_REPARSE_DATA_BUFFER*)calloc(1, + REPARSE_DATA_BUFFER* reparseStructData = (REPARSE_DATA_BUFFER*)calloc(1, MAXIMUM_REPARSE_DATA_BUFFER_SIZE); - const size_t destMountPointBytes = lstrlen(szDestDir) * sizeof(WCHAR); - + reparseStructData->Reserved = 0; reparseStructData->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; + reparseStructData->MountPointReparseBuffer.PrintNameLength = 0; + reparseStructData->MountPointReparseBuffer.SubstituteNameOffset = 0; + reparseStructData->MountPointReparseBuffer.SubstituteNameLength = szDestDir.length(); + reparseStructData->MountPointReparseBuffer.PrintNameOffset = szDestDir.length() + sizeof(WCHAR); - // Reserved(USHORT) + SubstituteNameOffset(USHORT) + SubstituteNameLength(USHORT) - // + PrintNameOffset(USHORT) + PrintNameLength(USHORT) + PathBuffer[1](WCHAR) uint spaceAfterGeneralData = sizeof(USHORT) * 5 + sizeof(WCHAR); //should be 12 - reparseStructData->ReparseDataLength = destMountPointBytes + spaceAfterGeneralData; - reparseStructData->Reserved = 0; - reparseStructData->MountPointReparseBuffer.SubstituteNameOffset = 0; - reparseStructData->MountPointReparseBuffer.SubstituteNameLength = destMountPointBytes; - // + sizeof(WCHAR) means \0 termination at the end of the string - reparseStructData->MountPointReparseBuffer.PrintNameOffset = destMountPointBytes + sizeof(WCHAR); - reparseStructData->MountPointReparseBuffer.PrintNameLength = 0; - StringCchCopy(reparseStructData->MountPointReparseBuffer.PathBuffer, 1024, szDestDir); + reparseStructData->ReparseDataLength = szDestDir.length() + spaceAfterGeneralData; +#ifndef Q_CC_MINGW + StringCchCopy(reparseStructData->MountPointReparseBuffer.PathBuffer, 1024, (wchar_t*)szDestDir.utf16()); +#else + wcsncpy(reparseStructData->MountPointReparseBuffer.PathBuffer, (wchar_t*)szDestDir.utf16(), 1024); +#endif DWORD bytesReturned; if (!::DeviceIoControl(dirHandle.handle(), FSCTL_SET_REPARSE_POINT, reparseStructData, - reparseStructData->ReparseDataLength + _REPARSE_DATA_BUFFER_HEADER_SIZE, 0, 0, + reparseStructData->ReparseDataLength + REPARSE_DATA_BUFFER_HEADER_SIZE, 0, 0, &bytesReturned, 0)) { qWarning() << QString::fromLatin1("Could not set the reparse point: for '%1' to %2; error: %3" ).arg(linkPath, targetPath).arg(GetLastError()); @@ -193,7 +199,7 @@ Link createJunction(const QString &linkPath, const QString &targetPath) bool removeJunction(const QString &path) { // Allocates a block of memory for an array of num elements(1) and initializes all its bits to zero. - _REPARSE_DATA_BUFFER* reparseStructData = (_REPARSE_DATA_BUFFER*)calloc(1, + REPARSE_DATA_BUFFER* reparseStructData = (REPARSE_DATA_BUFFER*)calloc(1, MAXIMUM_REPARSE_DATA_BUFFER_SIZE); reparseStructData->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT; diff --git a/src/libs/kdtools/kdsavefile.cpp b/src/libs/kdtools/kdsavefile.cpp index a0b3ed4e8..6af7427da 100644 --- a/src/libs/kdtools/kdsavefile.cpp +++ b/src/libs/kdtools/kdsavefile.cpp @@ -93,9 +93,13 @@ static QString makeAbsolute(const QString &path) static int myOpen(const QString &path, int flags, int mode) { #ifdef Q_OS_WIN - int fd; - _wsopen_s(&fd, reinterpret_cast(path.utf16()), flags, _SH_DENYRW, mode); - return fd; + int fd; +#ifdef Q_CC_MINGW + fd = _wsopen(reinterpret_cast(path.utf16()), flags, _SH_DENYRW, mode); +#else + _wsopen_s(&fd, reinterpret_cast(path.utf16()), flags, _SH_DENYRW, mode); +#endif + return fd; #else return open(QFile::encodeName(path).constData(), flags, mode); #endif diff --git a/src/libs/kdtools/kdsysinfo_win.cpp b/src/libs/kdtools/kdsysinfo_win.cpp index 383f6dd8c..10666c8e0 100644 --- a/src/libs/kdtools/kdsysinfo_win.cpp +++ b/src/libs/kdtools/kdsysinfo_win.cpp @@ -24,12 +24,21 @@ #include "link.h" +#ifdef Q_CC_MINGW +# ifndef _WIN32_WINNT +# define _WIN32_WINNT 0x0501 +# endif +#endif + #include #include #include #include + +#ifndef Q_CC_MINGW #pragma comment(lib, "mpr.lib") +#endif #include #include @@ -95,18 +104,26 @@ QList networkVolumeInfosFromMountPoints() Returns a list of volume info objects based on the given \a volumeGUID. The function also solves mounted volume folder paths. It does not return any network drive shares. */ -QList localVolumeInfosFromMountPoints(const QByteArray &volumeGUID) +QList localVolumeInfosFromMountPoints(PTCHAR volumeGUID) { QList volumes; DWORD bufferSize; - char volumeNames[1024] = ""; - if (GetVolumePathNamesForVolumeNameA(volumeGUID, volumeNames, ARRAYSIZE(volumeNames), &bufferSize)) { - QStringList mountedPaths = QString::fromLatin1(volumeNames, bufferSize).split(QLatin1Char(char(0)), - QString::SkipEmptyParts); + TCHAR volumeNames[MAX_PATH + 1] = { 0 }; + if (GetVolumePathNamesForVolumeName(volumeGUID, volumeNames, MAX_PATH, &bufferSize)) { + QStringList mountedPaths = +#ifdef UNICODE + QString::fromWCharArray(volumeNames, bufferSize).split(QLatin1Char(char(0)), QString::SkipEmptyParts); +#else + QString::fromLatin1(volumeNames, bufferSize).split(QLatin1Char(char(0)), QString::SkipEmptyParts); +#endif foreach (const QString &mountedPath, mountedPaths) { VolumeInfo info; info.setMountPath(mountedPath); +#ifdef UNICODE + info.setVolumeDescriptor(QString::fromWCharArray(volumeGUID)); +#else info.setVolumeDescriptor(QString::fromLatin1(volumeGUID)); +#endif volumes.append(info); } } @@ -116,11 +133,11 @@ QList localVolumeInfosFromMountPoints(const QByteArray &volumeGUID) QList mountedVolumes() { QList tmp; - char volumeGUID[MAX_PATH] = ""; - HANDLE handle = FindFirstVolumeA(volumeGUID, ARRAYSIZE(volumeGUID)); + TCHAR volumeGUID[MAX_PATH + 1] = { 0 }; + HANDLE handle = FindFirstVolume(volumeGUID, MAX_PATH); if (handle != INVALID_HANDLE_VALUE) { tmp += localVolumeInfosFromMountPoints(volumeGUID); - while (FindNextVolumeA(handle, volumeGUID, ARRAYSIZE(volumeGUID))) { + while (FindNextVolume(handle, volumeGUID, MAX_PATH)) { tmp += localVolumeInfosFromMountPoints(volumeGUID); } FindVolumeClose(handle); @@ -148,44 +165,42 @@ QList runningProcesses() HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (!snapshot) return param.processes; - PROCESSENTRY32 processStruct; - processStruct.dwSize = sizeof(PROCESSENTRY32); - bool foundProcess = Process32First(snapshot, &processStruct); - const DWORD bufferSize = 1024; - char driveBuffer[bufferSize]; + QStringList deviceList; + const DWORD bufferSize = 1024; + char buffer[bufferSize + 1] = { 0 }; if (QSysInfo::windowsVersion() <= QSysInfo::WV_5_2) { - DWORD size = GetLogicalDriveStringsA(bufferSize, driveBuffer); - deviceList = QString::fromLatin1(driveBuffer, size).split(QLatin1Char(char(0)), QString::SkipEmptyParts); + const DWORD size = GetLogicalDriveStringsA(bufferSize, buffer); + deviceList = QString::fromLatin1(buffer, size).split(QLatin1Char(char(0)), QString::SkipEmptyParts); } QLibrary kernel32(QLatin1String("Kernel32.dll")); kernel32.load(); - void *pQueryFullProcessImageNameA = kernel32.resolve("QueryFullProcessImageNameA"); + QueryFullProcessImageNamePtr pQueryFullProcessImageNamePtr = (QueryFullProcessImageNamePtr) kernel32 + .resolve("QueryFullProcessImageNameA"); QLibrary psapi(QLatin1String("Psapi.dll")); psapi.load(); - void *pGetProcessImageFileNamePtr = psapi.resolve("GetProcessImageFileNameA"); - QueryFullProcessImageNamePtr callPtr = (QueryFullProcessImageNamePtr) pQueryFullProcessImageNameA; - GetProcessImageFileNamePtr callPtrXp = (GetProcessImageFileNamePtr) pGetProcessImageFileNamePtr; + GetProcessImageFileNamePtr pGetProcessImageFileNamePtr = (GetProcessImageFileNamePtr) psapi + .resolve("GetProcessImageFileNameA"); + PROCESSENTRY32 processStruct; + processStruct.dwSize = sizeof(PROCESSENTRY32); + bool foundProcess = Process32First(snapshot, &processStruct); while (foundProcess) { HANDLE procHandle = OpenProcess(QSysInfo::windowsVersion() > QSysInfo::WV_5_2 - ? KDSYSINFO_PROCESS_QUERY_LIMITED_INFORMATION - : PROCESS_QUERY_INFORMATION, - false, - processStruct.th32ProcessID); - char buffer[1024]; - DWORD bufferSize = 1024; + ? KDSYSINFO_PROCESS_QUERY_LIMITED_INFORMATION : PROCESS_QUERY_INFORMATION, false, processStruct + .th32ProcessID); + bool succ = false; QString executablePath; - ProcessInfo info; + DWORD bufferSize = 1024; if (QSysInfo::windowsVersion() > QSysInfo::WV_5_2) { - succ = callPtr(procHandle, 0, buffer, &bufferSize); + succ = pQueryFullProcessImageNamePtr(procHandle, 0, buffer, &bufferSize); executablePath = QString::fromLatin1(buffer); } else if (pGetProcessImageFileNamePtr) { - succ = callPtrXp(procHandle, buffer, bufferSize); + succ = pGetProcessImageFileNamePtr(procHandle, buffer, bufferSize); executablePath = QString::fromLatin1(buffer); for (int i = 0; i < deviceList.count(); ++i) { executablePath.replace(QString::fromLatin1( "\\Device\\HarddiskVolume%1\\" ).arg(i + 1), @@ -196,6 +211,7 @@ QList runningProcesses() if (succ) { const quint32 pid = processStruct.th32ProcessID; param.seenIDs.append(pid); + ProcessInfo info; info.id = pid; info.name = executablePath; param.processes.append(info); diff --git a/src/libs/kdtools/kdupdaterupdateoperations.cpp b/src/libs/kdtools/kdupdaterupdateoperations.cpp index 05c46fe93..8270bba03 100644 --- a/src/libs/kdtools/kdupdaterupdateoperations.cpp +++ b/src/libs/kdtools/kdupdaterupdateoperations.cpp @@ -48,7 +48,7 @@ using namespace KDUpdater; static QString errnoToQString(int error) { -#ifdef Q_OS_WIN +#if defined(Q_OS_WIN) && !defined(Q_CC_MINGW) char msg[128]; if (strerror_s(msg, sizeof msg, error) != 0) return QString::fromLocal8Bit(msg); diff --git a/src/sdk/sdk.pro b/src/sdk/sdk.pro index 461670cb9..2beafa94d 100644 --- a/src/sdk/sdk.pro +++ b/src/sdk/sdk.pro @@ -82,8 +82,10 @@ SOURCES = installerbase.cpp \ win32 { # Force to overwrite the default manifest file with our own extended version. isEqual(QT_MAJOR_VERSION, 4) { - win32:RC_FILE = installerbase.rc - QMAKE_POST_LINK += $$quote(mt.exe -updateresource:$$IFW_APP_PATH/$${TARGET}.exe -manifest \"$${IFW_SOURCE_TREE}\\src\\sdk\\installerbase.manifest\") + !win32-g++* { + win32:RC_FILE = installerbase.rc + QMAKE_POST_LINK += $$quote(mt.exe -updateresource:$$IFW_APP_PATH/$${TARGET}.exe -manifest \"$${IFW_SOURCE_TREE}\\src\\sdk\\installerbase.manifest\") + } } else { RC_FILE = installerbase_qt5.rc QMAKE_MANIFEST = installerbase.manifest diff --git a/tools/binarycreator/binarycreator.cpp b/tools/binarycreator/binarycreator.cpp index c0b658a61..f3777b602 100644 --- a/tools/binarycreator/binarycreator.cpp +++ b/tools/binarycreator/binarycreator.cpp @@ -105,11 +105,13 @@ private: mutable QString backup; }; +#ifndef Q_OS_WIN static void chmod755(const QString &absolutFilePath) { QFile::setPermissions(absolutFilePath, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner | QFile::ReadGroup | QFile::ExeGroup | QFile::ReadOther | QFile::ExeOther); } +#endif static int assemble(Input input, const QString &configFile) { -- cgit v1.2.3