Changeset 561 for trunk/qmake/generators/makefile.cpp
- Timestamp:
- Feb 11, 2010, 11:19:06 PM (15 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to (toggle deleted branches)
/branches/vendor/nokia/qt/4.6.1 merged eligible /branches/vendor/nokia/qt/current merged eligible /branches/vendor/trolltech/qt/current 3-149
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
trunk/qmake/generators/makefile.cpp
r535 r561 2 2 ** 3 3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). 4 ** Contact: Qt Software Information (qt-info@nokia.com) 4 ** All rights reserved. 5 ** Contact: Nokia Corporation (qt-info@nokia.com) 5 6 ** 6 7 ** This file is part of the qmake application of the Qt Toolkit. … … 21 22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 22 23 ** 23 ** In addition, as a special exception, Nokia gives you certain 24 ** additional rights. These rights are described in the Nokia Qt LGPL 25 ** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this 26 ** package. 24 ** In addition, as a special exception, Nokia gives you certain additional 25 ** rights. These rights are described in the Nokia Qt LGPL Exception 26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 27 27 ** 28 28 ** GNU General Public License Usage … … 34 34 ** met: http://www.gnu.org/copyleft/gpl.html. 35 35 ** 36 ** If you are unsure which license is appropriate for your use, please37 ** contact the sales department at qt-sales@nokia.com.36 ** If you have questions regarding the use of this file, please contact 37 ** Nokia at qt-info@nokia.com. 38 38 ** $QT_END_LICENSE$ 39 39 ** … … 122 122 if(path.startsWith(QDir::separator())) { 123 123 d.cd(QString(QDir::separator())); 124 path = path.right(path.length() -1);124 path.remove(0, 1); 125 125 } 126 126 bool ret = true; … … 130 130 if(QFile::exists(path.left(3))) { 131 131 d.cd(path.left(3)); 132 path = path.right(path.length() -3);132 path.remove(0, 3); 133 133 } else { 134 134 warn_msg(WarnLogic, "Cannot access drive '%s' (%s)", … … 202 202 v.contains("QMAKE_ABSOLUTE_SOURCE_ROOT")) { 203 203 QString root = v["QMAKE_ABSOLUTE_SOURCE_ROOT"].first(); 204 root = Option::fixPathToTargetOS(root);204 root = QDir::fromNativeSeparators(root); 205 205 if(!root.isEmpty()) { 206 206 QFileInfo fi = fileInfo(Option::mkfile::cachefile); … … 208 208 QString cache_r = fi.path(), pwd = Option::output_dir; 209 209 if(pwd.startsWith(cache_r) && !pwd.startsWith(root)) { 210 pwd = Option::fixPathToTargetOS(root + pwd.mid(cache_r.length()));210 pwd = root + pwd.mid(cache_r.length()); 211 211 if(exists(pwd)) 212 212 v.insert("QMAKE_ABSOLUTE_SOURCE_PATH", QStringList(pwd)); … … 218 218 if(!v["QMAKE_ABSOLUTE_SOURCE_PATH"].isEmpty()) { 219 219 QString &asp = v["QMAKE_ABSOLUTE_SOURCE_PATH"].first(); 220 asp = Option::fixPathToTargetOS(asp);220 asp = QDir::fromNativeSeparators(asp); 221 221 if(asp.isEmpty() || asp == Option::output_dir) //if they're the same, why bother? 222 222 v["QMAKE_ABSOLUTE_SOURCE_PATH"].clear(); … … 244 244 #endif 245 245 { 246 if( pathRef.right(Option::dir_sep.length()) != Option::dir_sep)246 if(!pathRef.endsWith(Option::dir_sep)) 247 247 pathRef += Option::dir_sep; 248 248 } … … 276 276 if(slash != -1) { 277 277 path = path.left(slash); 278 if(path != "." && 279 !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) 280 warn_msg(WarnLogic, "%s: Cannot access directory '%s'", 281 (*it).toLatin1().constData(), path.toLatin1().constData()); 278 // Make out path only if it does not contain makefile variables 279 if(!path.contains("${")) 280 if(path != "." && 281 !mkdir(fileFixify(path, qmake_getpwd(), Option::output_dir))) 282 warn_msg(WarnLogic, "%s: Cannot access directory '%s'", 283 (*it).toLatin1().constData(), path.toLatin1().constData()); 282 284 } 283 285 } … … 290 292 v.remove("DESTDIR"); 291 293 } 292 QDir::current().cd(currentDir);293 294 } 294 295 … … 346 347 if(exists(real_dir + QDir::separator() + val)) { 347 348 QString dir = (*vpath_it); 348 if( dir.right(Option::dir_sep.length()) != Option::dir_sep)349 if(!dir.endsWith(Option::dir_sep)) 349 350 dir += Option::dir_sep; 350 351 val = dir + val; … … 365 366 if(!(flags & VPATH_NoFixify)) 366 367 real_dir = fileFixify(real_dir, qmake_getpwd(), Option::output_dir); 367 regex = regex.right(regex.length() -dir.length());368 regex.remove(0, dir.length()); 368 369 } 369 370 if(real_dir.isEmpty() || exists(real_dir)) { … … 725 726 QString cache_file; 726 727 if(!project->isEmpty("QMAKE_INTERNAL_CACHE_FILE")) { 727 cache_file = Option::fixPathToLocalOS(project->first("QMAKE_INTERNAL_CACHE_FILE"));728 cache_file = QDir::fromNativeSeparators(project->first("QMAKE_INTERNAL_CACHE_FILE")); 728 729 } else { 729 730 cache_file = ".qmake.internal.cache"; … … 731 732 cache_file += ".BUILD." + project->first("BUILD_PASS"); 732 733 } 733 if(cache_file.indexOf( QDir::separator()) == -1)734 cache_file.prepend(Option::output_dir + QDir::separator());734 if(cache_file.indexOf('/') == -1) 735 cache_file.prepend(Option::output_dir + '/'); 735 736 QMakeSourceFileInfo::setCacheFile(cache_file); 736 737 } … … 789 790 if(regex.lastIndexOf(Option::dir_sep) != -1) { 790 791 dir = regex.left(regex.lastIndexOf(Option::dir_sep) + 1); 791 regex = regex.right(regex.length() -dir.length());792 regex.remove(0, dir.length()); 792 793 } 793 794 QStringList files = QDir(dir).entryList(QStringList(regex)); … … 939 940 int slsh = target.lastIndexOf(Option::dir_sep); 940 941 if(slsh != -1) 941 target = target.right(target.length() - slsh -1);942 target.remove(0, slsh + 1); 942 943 QString bdir = Option::output_dir; 943 944 if(bdir.isEmpty()) … … 968 969 if(project->isActiveConfig("staticlib") || project->isActiveConfig("explicitlib") || 969 970 !project->isEmpty("PRL_EXPORT_LIBS")) { 971 if(project->isActiveConfig("staticlib")) 972 libs << "QMAKE_LIBS_PRIVATE"; 970 973 t << "QMAKE_PRL_LIBS = "; 971 974 if (!project->isEmpty("PRL_EXPORT_LIBS")) { … … 1066 1069 int slsh = ret.lastIndexOf(Option::dir_sep); 1067 1070 if(slsh != -1) 1068 ret = ret.right(ret.length() -slsh);1071 ret.remove(0, slsh); 1069 1072 if(!ret.endsWith(Option::prl_ext)) { 1070 1073 int dot = ret.indexOf('.'); 1071 1074 if(dot != -1) 1072 ret = ret.left(dot);1075 ret.truncate(dot); 1073 1076 ret += Option::prl_ext; 1074 1077 } … … 1269 1272 if(slsh != -1) { 1270 1273 dirstr = filestr.left(slsh+1); 1271 filestr = filestr.right(filestr.length() - slsh -1);1272 } 1273 if( dirstr.right(Option::dir_sep.length()) != Option::dir_sep)1274 filestr.remove(0, slsh+1); 1275 } 1276 if(!dirstr.endsWith(Option::dir_sep)) 1274 1277 dirstr += Option::dir_sep; 1275 1278 if(exists(wild)) { //real file … … 1371 1374 for(QStringList::ConstIterator pit = dirs.begin(); pit != dirs.end(); ++pit) { 1372 1375 QString tmp_dst = fileFixify((*pit), FileFixifyAbsolute, false); 1373 if (!isDosLikeShell() && tmp_dst.right(1) != Option::dir_sep)1376 if (!isDosLikeShell() && !tmp_dst.endsWith(Option::dir_sep)) 1374 1377 tmp_dst += Option::dir_sep; 1375 1378 t << mkdir_p_asstring(filePrefixRoot(root, tmp_dst)) << "\n\t"; … … 1522 1525 } 1523 1526 if(val.isEmpty() && var.startsWith(QLatin1String("QMAKE_VAR_FIRST_"))) { 1524 const QString varname = var.mid(1 2);1527 const QString varname = var.mid(16); 1525 1528 val += project->first(varname); 1526 1529 } … … 1610 1613 if(!file.isNull()) { 1611 1614 QMakeSourceFileInfo::addSourceFile(file, QMakeSourceFileInfo::SEEK_MOCS); 1612 if(!mocable(file)) 1615 if(!mocable(file)) { 1613 1616 return false; 1617 } else { 1618 project->values("MOCABLES").append(file); 1619 } 1614 1620 } 1615 1621 } else if(project->values(comp + ".CONFIG").indexOf("function_verify") != -1) { … … 1728 1734 t << "\n\t" << cmd; 1729 1735 t << endl << endl; 1736 1737 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(targ); 1738 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(targ)) << deps.split(" ", QString::SkipEmptyParts); 1739 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(targ)) << cmd; 1730 1740 } 1731 1741 } … … 1817 1827 const QString del_suffix = 1818 1828 Option::target_mode == Option::TARG_OS2_MODE ? 1819 QString(" >nul 2>&1"): // reduce noise 1829 QString(" >nul 2>&1") : // reduce noise 1830 isForSymbian() ? 1831 QString(" 2> NUL") : 1820 1832 QString::null; 1821 1833 1822 1834 if(tmp_clean.indexOf("${QMAKE_") == -1) { 1823 1835 t << "\n\t" << del_statement << " " << tmp_clean << del_suffix; 1836 if (isForSymbian()) 1837 t << " 2> NUL"; // Eliminate unnecessary warnings 1824 1838 wrote_clean = true; 1825 1839 } … … 1927 1941 continue; 1928 1942 1929 QString cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList(tmp_out)); 1943 QString cmd; 1944 if (isForSymbianSbsv2()) { 1945 // In sbsv2 the command inputs and outputs need to use absolute paths 1946 cmd = replaceExtraCompilerVariables(tmp_cmd, 1947 fileFixify(escapeFilePaths(inputs), FileFixifyAbsolute), 1948 fileFixify(QStringList(tmp_out), FileFixifyAbsolute)); 1949 } else { 1950 cmd = replaceExtraCompilerVariables(tmp_cmd, escapeFilePaths(inputs), QStringList(tmp_out)); 1951 } 1952 1930 1953 t << escapeDependencyPath(tmp_out) << ":"; 1954 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(tmp_out); 1931 1955 // compiler.CONFIG+=explicit_dependencies means that ONLY compiler.depends gets to cause Makefile dependencies 1932 1956 if(project->values((*it) + ".CONFIG").indexOf("explicit_dependencies") != -1) { 1933 1957 t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, Option::output_dir, Option::output_dir))); 1958 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(tmp_out)) << tmp_dep; 1934 1959 } else { 1935 1960 t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps)); 1961 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(tmp_out)) << inputs << deps; 1936 1962 } 1937 1963 t << "\n\t" << cmd << endl << endl; 1964 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(tmp_out)) << cmd; 1938 1965 continue; 1939 1966 } … … 1949 1976 } 1950 1977 QString cmd = replaceExtraCompilerVariables(tmp_cmd, (*input), out); 1978 // NOTE: The var -> QMAKE_COMP_var replace feature is unsupported, do not use! 1979 if (isForSymbianSbsv2()) { 1980 // In sbsv2 the command inputs and outputs need to use absolute paths 1981 cmd = replaceExtraCompilerVariables(tmp_cmd, 1982 fileFixify((*input), FileFixifyAbsolute), 1983 fileFixify(out, FileFixifyAbsolute)); 1984 } else { 1985 cmd = replaceExtraCompilerVariables(tmp_cmd, (*input), out); 1986 } 1951 1987 for(QStringList::ConstIterator it3 = vars.constBegin(); it3 != vars.constEnd(); ++it3) 1952 1988 cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")"); … … 2038 2074 t << escapeDependencyPath(out) << ": " << valList(escapeDependencyPaths(deps)) << "\n\t" 2039 2075 << cmd << endl << endl; 2076 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_TARGETS.") + (*it)) << escapeDependencyPath(out); 2077 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_DEPS.") + (*it) + escapeDependencyPath(out)) << deps; 2078 project->values(QLatin1String("QMAKE_INTERNAL_ET_PARSED_CMD.") + (*it) + escapeDependencyPath(out)) << cmd; 2040 2079 } 2041 2080 } … … 2153 2192 else if(Option::target_mode == Option::TARG_OS2_MODE) 2154 2193 ret += " -os2"; 2155 else if(Option::target_mode == Option::TARG_QNX6_MODE)2156 ret += " -qnx6";2157 2194 2158 2195 //configs … … 2213 2250 } 2214 2251 2215 void 2216 MakefileGenerator:: writeSubDirs(QTextStream &t)2252 QList<MakefileGenerator::SubTarget*> 2253 MakefileGenerator::findSubDirsSubTargets() const 2217 2254 { 2218 2255 QList<SubTarget*> targets; … … 2256 2293 st->in_directory = file; 2257 2294 } 2258 while(st->in_directory. right(1) == Option::dir_sep)2259 st->in_directory = st->in_directory.left(st->in_directory.length() -1);2295 while(st->in_directory.endsWith(Option::dir_sep)) 2296 st->in_directory.chop(1); 2260 2297 if(fileInfo(st->in_directory).isRelative()) 2261 2298 st->out_directory = st->in_directory; … … 2311 2348 } 2312 2349 } 2350 return targets; 2351 } 2352 2353 void 2354 MakefileGenerator::writeSubDirs(QTextStream &t) 2355 { 2356 QList<SubTarget*> targets = findSubDirsSubTargets(); 2313 2357 t << "first: make_default" << endl; 2314 2358 int flags = SubTargetInstalls; … … 2327 2371 t << "include " << (*qeui_it) << endl; 2328 2372 2329 QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); 2330 if(ofile.lastIndexOf(Option::dir_sep) != -1) 2331 ofile = ofile.right(ofile.length() - ofile.lastIndexOf(Option::dir_sep) -1); 2332 t << "MAKEFILE = " << ofile << endl; 2333 /* Calling Option::fixPathToTargetOS() is necessary for MinGW/MSYS, which requires 2334 * back-slashes to be turned into slashes. */ 2335 t << "QMAKE = " << Option::fixPathToTargetOS(var("QMAKE_QMAKE")) << endl; 2336 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 2337 t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; 2338 t << "MKDIR = " << var("QMAKE_MKDIR") << endl; 2339 t << "COPY = " << var("QMAKE_COPY") << endl; 2340 t << "COPY_FILE = " << var("QMAKE_COPY_FILE") << endl; 2341 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; 2342 t << "INSTALL_FILE = " << var("QMAKE_INSTALL_FILE") << endl; 2343 t << "INSTALL_PROGRAM = " << var("QMAKE_INSTALL_PROGRAM") << endl; 2344 t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl; 2345 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 2346 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl; 2347 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; 2348 t << "MOVE = " << var("QMAKE_MOVE") << endl; 2349 t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; 2350 t << "MKDIR = " << var("QMAKE_MKDIR") << endl; 2373 if (!(flags & SubTargetSkipDefaultVariables)) { 2374 QString ofile = Option::fixPathToTargetOS(Option::output.fileName()); 2375 if(ofile.lastIndexOf(Option::dir_sep) != -1) 2376 ofile.remove(0, ofile.lastIndexOf(Option::dir_sep) +1); 2377 t << "MAKEFILE = " << ofile << endl; 2378 /* Calling Option::fixPathToTargetOS() is necessary for MinGW/MSYS, which requires 2379 * back-slashes to be turned into slashes. */ 2380 t << "QMAKE = " << Option::fixPathToTargetOS(var("QMAKE_QMAKE")) << endl; 2381 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 2382 t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; 2383 t << "MKDIR = " << var("QMAKE_MKDIR") << endl; 2384 t << "COPY = " << var("QMAKE_COPY") << endl; 2385 t << "COPY_FILE = " << var("QMAKE_COPY_FILE") << endl; 2386 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; 2387 t << "INSTALL_FILE = " << var("QMAKE_INSTALL_FILE") << endl; 2388 t << "INSTALL_PROGRAM = " << var("QMAKE_INSTALL_PROGRAM") << endl; 2389 t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl; 2390 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 2391 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl; 2392 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; 2393 t << "MOVE = " << var("QMAKE_MOVE") << endl; 2394 t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl; 2395 t << "MKDIR = " << var("QMAKE_MKDIR") << endl; 2396 t << "SUBTARGETS = "; // subtargets are sub-directory 2397 for(int target = 0; target < targets.size(); ++target) 2398 t << " \\\n\t\t" << targets.at(target)->target; 2399 t << endl << endl; 2400 } 2351 2401 writeExtraVariables(t); 2352 t << "SUBTARGETS = "; // subtargets are sub-directory2353 for(int target = 0; target < targets.size(); ++target)2354 t << " \\\n\t\t" << targets.at(target)->target;2355 t << endl << endl;2356 2402 2357 2403 QStringList targetSuffixes; 2358 2404 const QString abs_source_path = project->first("QMAKE_ABSOLUTE_SOURCE_PATH"); 2359 targetSuffixes << "make_default" << "make_first" << "all" << "clean" << "distclean" 2360 << QString((flags & SubTargetInstalls) ? "install_subtargets" : "install") 2361 << QString((flags & SubTargetInstalls) ? "uninstall_subtargets" : "uninstall"); 2405 if (!(flags & SubTargetSkipDefaultTargets)) { 2406 targetSuffixes << "make_default" << "make_first" << "all" << "clean" << "distclean" 2407 << QString((flags & SubTargetInstalls) ? "install_subtargets" : "install") 2408 << QString((flags & SubTargetInstalls) ? "uninstall_subtargets" : "uninstall"); 2409 } 2362 2410 2363 2411 // generate target rules … … 2479 2527 t << endl; 2480 2528 2481 if(project->values("QMAKE_INTERNAL_QMAKE_DEPS").indexOf("qmake_all") == -1) 2482 project->values("QMAKE_INTERNAL_QMAKE_DEPS").append("qmake_all"); 2483 2484 writeMakeQmake(t); 2485 2486 t << "qmake_all:"; 2487 if(!targets.isEmpty()) { 2488 for(QList<SubTarget*>::Iterator it = targets.begin(); it != targets.end(); ++it) { 2489 if(!(*it)->profile.isEmpty()) 2490 t << " " << (*it)->target << "-" << "qmake_all"; 2491 } 2492 } 2493 if(project->isEmpty("QMAKE_NOFORCE")) 2494 t << " FORCE"; 2495 if(project->isActiveConfig("no_empty_targets")) 2496 t << "\n\t" << "@cd ."; 2497 t << endl << endl; 2529 if (!(flags & SubTargetSkipDefaultTargets)) { 2530 if(project->values("QMAKE_INTERNAL_QMAKE_DEPS").indexOf("qmake_all") == -1) 2531 project->values("QMAKE_INTERNAL_QMAKE_DEPS").append("qmake_all"); 2532 2533 writeMakeQmake(t); 2534 2535 t << "qmake_all:"; 2536 if(!targets.isEmpty()) { 2537 for(QList<SubTarget*>::Iterator it = targets.begin(); it != targets.end(); ++it) { 2538 if(!(*it)->profile.isEmpty()) 2539 t << " " << (*it)->target << "-" << "qmake_all"; 2540 } 2541 } 2542 if(project->isEmpty("QMAKE_NOFORCE")) 2543 t << " FORCE"; 2544 if(project->isActiveConfig("no_empty_targets")) 2545 t << "\n\t" << "@cd ."; 2546 t << endl << endl; 2547 } 2498 2548 2499 2549 for(int s = 0; s < targetSuffixes.size(); ++s) { … … 2504 2554 t << suffix << ":"; 2505 2555 for(int target = 0; target < targets.size(); ++target) { 2506 QString targetRule = targets.at(target)->target + "-" + suffix; 2556 SubTarget *subTarget = targets.at(target); 2557 if((suffix == "make_first" || suffix == "make_default") 2558 && project->values(subTarget->name + ".CONFIG").indexOf("no_default_target") != -1) { 2559 continue; 2560 } 2561 QString targetRule = subTarget->target + "-" + suffix; 2507 2562 if(flags & SubTargetOrdered) 2508 2563 targetRule += "-ordered"; … … 2768 2823 2769 2824 //do the fixin' 2770 const QString pwd = qmake_getpwd() + "/"; 2825 QString pwd = qmake_getpwd(); 2826 if (!pwd.endsWith('/')) 2827 pwd += '/'; 2771 2828 QString orig_file = ret; 2772 2829 if(ret.startsWith(QLatin1Char('~'))) { 2773 2830 if(ret.startsWith(QLatin1String("~/"))) 2774 ret = QDir::homePath() + Option::dir_sep +ret.mid(1);2831 ret = QDir::homePath() + ret.mid(1); 2775 2832 else 2776 2833 warn_msg(WarnLogic, "Unable to expand ~ in %s", ret.toLatin1().constData()); … … 2861 2918 int slsh = f.lastIndexOf(Option::dir_sep); 2862 2919 if(slsh != -1) 2863 file = file.right(file.length() - slsh -1);2920 file.remove(0, slsh + 1); 2864 2921 QStringList &l = project->values(w); 2865 2922 for(QStringList::Iterator val_it = l.begin(); val_it != l.end(); ++val_it) { … … 2867 2924 slsh = file2.lastIndexOf(Option::dir_sep); 2868 2925 if(slsh != -1) 2869 file2 = file2.right(file2.length() - slsh -1);2926 file2.remove(0, slsh + 1); 2870 2927 if(file2 == file) { 2871 2928 warn_msg(WarnLogic, "Found potential symbol conflict of %s (%s) in %s", … … 3021 3078 QFileInfo fi(fileInfo(file.fileName())); 3022 3079 if(fi.isDir()) 3023 outdir = file.fileName() + QDir::separator();3080 outdir = file.fileName() + '/'; 3024 3081 } 3025 3082 if(!outdir.isEmpty() || file.fileName().isEmpty()) { … … 3041 3098 if(project->isEmpty("QMAKE_MAKEFILE")) 3042 3099 project->values("QMAKE_MAKEFILE").append(file.fileName()); 3043 int slsh = file.fileName().lastIndexOf( Option::dir_sep);3100 int slsh = file.fileName().lastIndexOf('/'); 3044 3101 if(slsh != -1) 3045 3102 mkdir(file.fileName().left(slsh)); … … 3051 3108 else 3052 3109 od = fi.path(); 3053 od = Option::fixPathToTargetOS(od); 3054 if(QDir::isRelativePath(od)) 3055 od.prepend(Option::output_dir); 3110 od = QDir::fromNativeSeparators(od); 3111 if(QDir::isRelativePath(od)) { 3112 QString dir = Option::output_dir; 3113 if (!dir.endsWith('/') && !od.isEmpty()) 3114 dir += '/'; 3115 od.prepend(dir); 3116 } 3056 3117 Option::output_dir = od; 3057 3118 return true;
Note:
See TracChangeset
for help on using the changeset viewer.