summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mkspecs/common/shell-unix.conf8
-rw-r--r--mkspecs/common/shell-win32.conf8
-rw-r--r--qmake/generators/makefile.cpp36
-rw-r--r--qmake/generators/makefile.h2
4 files changed, 24 insertions, 30 deletions
diff --git a/mkspecs/common/shell-unix.conf b/mkspecs/common/shell-unix.conf
index 17c3612fdc..63c435d037 100644
--- a/mkspecs/common/shell-unix.conf
+++ b/mkspecs/common/shell-unix.conf
@@ -7,8 +7,8 @@ QMAKE_COPY_DIR = $$QMAKE_COPY -R
QMAKE_MOVE = mv -f
QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
-QMAKE_CHK_DIR_EXISTS = test -d
-QMAKE_CHK_FILE_EXISTS = test -f
-QMAKE_CHK_EXISTS_GLUE = "|| "
-QMAKE_MKDIR = mkdir -p
+QMAKE_CHK_EXISTS = test -e %1 ||
+QMAKE_CHK_DIR_EXISTS = test -d # legacy
+QMAKE_MKDIR = mkdir -p # legacy
+QMAKE_MKDIR_CMD = test -d %1 || mkdir -p %1
QMAKE_STREAM_EDITOR = sed
diff --git a/mkspecs/common/shell-win32.conf b/mkspecs/common/shell-win32.conf
index 826e87e34f..77c9698388 100644
--- a/mkspecs/common/shell-win32.conf
+++ b/mkspecs/common/shell-win32.conf
@@ -5,10 +5,10 @@ QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_DEL_DIR = rmdir
-QMAKE_CHK_DIR_EXISTS = if not exist
-QMAKE_CHK_FILE_EXISTS = if not exist
-QMAKE_CHK_EXISTS_GLUE =
-QMAKE_MKDIR = mkdir
+QMAKE_CHK_EXISTS = if not exist %1
+QMAKE_CHK_DIR_EXISTS = if not exist # legacy
+QMAKE_MKDIR = mkdir # legacy
+QMAKE_MKDIR_CMD = if not exist %1 mkdir %1 & if not exist %1 exit 1
# xcopy copies the contained files if source is a directory. Deal with it.
CONFIG += copy_dir_files
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 55c819657a..3ea67fe6a5 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -92,18 +92,8 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const
QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) const
{
- QString ret = "@" + chkdir + " ";
- if(escape)
- ret += escapeFilePath(dir);
- else
- ret += dir;
- ret += " " + chkglue + "$(MKDIR) ";
- if(escape)
- ret += escapeFilePath(dir);
- else
- ret += dir;
- ret += " ";
- return ret;
+ QString edir = escape ? escapeFilePath(dir) : dir;
+ return "@" + makedir.arg(edir);
}
bool MakefileGenerator::mkdir(const QString &in_path) const
@@ -440,13 +430,17 @@ MakefileGenerator::init()
if (v["TARGET"].isEmpty())
warn_msg(WarnLogic, "TARGET is empty");
- chkdir = v["QMAKE_CHK_DIR_EXISTS"].join(' ');
- chkfile = v["QMAKE_CHK_FILE_EXISTS"].join(' ');
- if (chkfile.isEmpty()) // Backwards compat with Qt4 specs
- chkfile = isWindowsShell() ? "if not exist" : "test -f";
- chkglue = v["QMAKE_CHK_EXISTS_GLUE"].join(' ');
- if (chkglue.isEmpty()) // Backwards compat with Qt4 specs
- chkglue = isWindowsShell() ? "" : "|| ";
+ makedir = v["QMAKE_MKDIR_CMD"].join(' ');
+ chkexists = v["QMAKE_CHK_EXISTS"].join(' ');
+ if (makedir.isEmpty()) { // Backwards compat with Qt < 5.0.2 specs
+ if (isWindowsShell()) {
+ makedir = "if not exist %1 mkdir %1 & if not exist %1 exit 1";
+ chkexists = "if not exist %1";
+ } else {
+ makedir = "test -d %1 || mkdir -p %1";
+ chkexists = "test -e %1 ||";
+ }
+ }
ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"];
@@ -2398,8 +2392,8 @@ MakefileGenerator::writeSubTargetCall(QTextStream &t,
if (!in.isEmpty()) {
if (!in_directory.isEmpty())
t << "\n\t" << mkdir_p_asstring(out_directory);
- pfx = "( " + chkfile + " " + out + " " + chkglue
- + "$(QMAKE) " + in + buildArgs() + " -o " + out
+ pfx = "( " + chkexists.arg(out) +
+ + " $(QMAKE) " + in + buildArgs() + " -o " + out
+ " ) && ";
}
writeSubMakeCall(t, out_directory_cdin + pfx, makefilein);
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 2f3e73ff6b..a0186d3d99 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -81,7 +81,7 @@ class MakefileGenerator : protected QMakeSourceFileInfo
QString spec;
bool init_opath_already, init_already, no_io;
QHash<QString, bool> init_compiler_already;
- QString chkdir, chkfile, chkglue;
+ QString makedir, chkexists;
QString build_args(const QString &outdir=QString());
//internal caches