Diffstat (limited to 'qmake/generators/projectgenerator.cpp') (more/less context) (show whitespace changes)
-rw-r--r-- | qmake/generators/projectgenerator.cpp | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/qmake/generators/projectgenerator.cpp b/qmake/generators/projectgenerator.cpp index 1515216..1c17379 100644 --- a/qmake/generators/projectgenerator.cpp +++ b/qmake/generators/projectgenerator.cpp | |||
@@ -1,22 +1,20 @@ | |||
1 | /**************************************************************************** | 1 | /**************************************************************************** |
2 | ** $Id$ | ||
3 | ** | 2 | ** |
4 | ** Definition of ________ class. | ||
5 | ** | 3 | ** |
6 | ** Created : 970521 | 4 | ** Implementation of ProjectGenerator class. |
7 | ** | 5 | ** |
8 | ** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. | 6 | ** Copyright (C) 1992-2003 Trolltech AS. All rights reserved. |
9 | ** | 7 | ** |
10 | ** This file is part of the network module of the Qt GUI Toolkit. | 8 | ** This file is part of qmake. |
11 | ** | 9 | ** |
12 | ** This file may be distributed under the terms of the Q Public License | 10 | ** This file may be distributed under the terms of the Q Public License |
13 | ** as defined by Trolltech AS of Norway and appearing in the file | 11 | ** as defined by Trolltech AS of Norway and appearing in the file |
14 | ** LICENSE.QPL included in the packaging of this file. | 12 | ** LICENSE.QPL included in the packaging of this file. |
15 | ** | 13 | ** |
16 | ** This file may be distributed and/or modified under the terms of the | 14 | ** This file may be distributed and/or modified under the terms of the |
17 | ** GNU General Public License version 2 as published by the Free Software | 15 | ** GNU General Public License version 2 as published by the Free Software |
18 | ** Foundation and appearing in the file LICENSE.GPL included in the | 16 | ** Foundation and appearing in the file LICENSE.GPL included in the |
19 | ** packaging of this file. | 17 | ** packaging of this file. |
20 | ** | 18 | ** |
21 | ** Licensees holding valid Qt Enterprise Edition licenses may use this | 19 | ** Licensees holding valid Qt Enterprise Edition licenses may use this |
22 | ** file in accordance with the Qt Commercial License Agreement provided | 20 | ** file in accordance with the Qt Commercial License Agreement provided |
@@ -148,46 +146,50 @@ ProjectGenerator::init() | |||
148 | } | 146 | } |
149 | if(add_depend && !dir.isEmpty() && !v["DEPENDPATH"].contains(dir)) { | 147 | if(add_depend && !dir.isEmpty() && !v["DEPENDPATH"].contains(dir)) { |
150 | QFileInfo fi(dir); | 148 | QFileInfo fi(dir); |
151 | if(fi.absFilePath() != QDir::currentDirPath()) | 149 | if(fi.absFilePath() != QDir::currentDirPath()) |
152 | v["DEPENDPATH"] += fileFixify(dir); | 150 | v["DEPENDPATH"] += fileFixify(dir); |
153 | } | 151 | } |
154 | } | 152 | } |
155 | } | 153 | } |
156 | if(!file_count) { //shall we try a subdir? | 154 | if(!file_count) { //shall we try a subdir? |
157 | QStringList dirs = Option::projfile::project_dirs; | 155 | QStringList dirs = Option::projfile::project_dirs; |
158 | if(Option::projfile::do_pwd) | 156 | if(Option::projfile::do_pwd) |
159 | dirs.prepend("."); | 157 | dirs.prepend("."); |
158 | const QString out_file = fileFixify(Option::output.name()); | ||
160 | for(QStringList::Iterator pd = dirs.begin(); pd != dirs.end(); pd++) { | 159 | for(QStringList::Iterator pd = dirs.begin(); pd != dirs.end(); pd++) { |
161 | if(QFile::exists((*pd))) { | 160 | if(QFile::exists((*pd))) { |
162 | QString newdir = (*pd); | 161 | QString newdir = (*pd); |
163 | QFileInfo fi(newdir); | 162 | QFileInfo fi(newdir); |
164 | if(fi.isDir()) { | 163 | if(fi.isDir()) { |
165 | newdir = fileFixify(newdir); | 164 | newdir = fileFixify(newdir); |
166 | QStringList &subdirs = v["SUBDIRS"]; | 165 | QStringList &subdirs = v["SUBDIRS"]; |
167 | if(QFile::exists(fi.filePath() + QDir::separator() + fi.fileName() + ".pro") && | 166 | if(QFile::exists(fi.filePath() + QDir::separator() + fi.fileName() + ".pro") && |
168 | !subdirs.contains(newdir)) { | 167 | !subdirs.contains(newdir)) { |
169 | subdirs.append(newdir); | 168 | subdirs.append(newdir); |
170 | } else { | 169 | } else { |
171 | QDir d(newdir, "*.pro"); | 170 | QDir d(newdir, "*.pro"); |
172 | d.setFilter(QDir::Files); | 171 | d.setFilter(QDir::Files); |
173 | for(int i = 0; i < (int)d.count(); i++) { | 172 | for(int i = 0; i < (int)d.count(); i++) { |
174 | QString nd = newdir + QDir::separator() + d[i]; | 173 | QString nd = newdir; |
174 | if(nd == ".") | ||
175 | nd = ""; | ||
176 | else if(!nd.isEmpty() && !nd.endsWith(QString(QChar(QDir::separator())))) | ||
177 | nd += QDir::separator(); | ||
178 | nd += d[i]; | ||
175 | fileFixify(nd); | 179 | fileFixify(nd); |
176 | if(d[i] != "." && d[i] != ".." && !subdirs.contains(nd)) { | 180 | if(d[i] != "." && d[i] != ".." && !subdirs.contains(nd) && !out_file.endsWith(nd)) |
177 | if(newdir + d[i] != Option::output_dir + Option::output.name()) | ||
178 | subdirs.append(nd); | 181 | subdirs.append(nd); |
179 | } | 182 | } |
180 | } | 183 | } |
181 | } | ||
182 | if(Option::projfile::do_recursive) { | 184 | if(Option::projfile::do_recursive) { |
183 | QDir d(newdir); | 185 | QDir d(newdir); |
184 | d.setFilter(QDir::Dirs); | 186 | d.setFilter(QDir::Dirs); |
185 | for(int i = 0; i < (int)d.count(); i++) { | 187 | for(int i = 0; i < (int)d.count(); i++) { |
186 | QString nd = fileFixify(newdir + QDir::separator() + d[i]); | 188 | QString nd = fileFixify(newdir + QDir::separator() + d[i]); |
187 | if(d[i] != "." && d[i] != ".." && !dirs.contains(nd)) | 189 | if(d[i] != "." && d[i] != ".." && !dirs.contains(nd)) |
188 | dirs.append(nd); | 190 | dirs.append(nd); |
189 | } | 191 | } |
190 | } | 192 | } |
191 | } | 193 | } |
192 | } else { //regexp | 194 | } else { //regexp |
193 | QString regx = (*pd), dir; | 195 | QString regx = (*pd), dir; |
@@ -315,25 +317,25 @@ ProjectGenerator::init() | |||
315 | for(QStringList::Iterator val_it = l.begin(); val_it != l.end(); ) { | 317 | for(QStringList::Iterator val_it = l.begin(); val_it != l.end(); ) { |
316 | bool found = FALSE; | 318 | bool found = FALSE; |
317 | for(QStringList::Iterator ui_it = u.begin(); ui_it != u.end(); ++ui_it) { | 319 | for(QStringList::Iterator ui_it = u.begin(); ui_it != u.end(); ++ui_it) { |
318 | QString s1 = (*val_it).right((*val_it).length() - ((*val_it).findRev(Option::dir_sep) + 1)); | 320 | QString s1 = (*val_it).right((*val_it).length() - ((*val_it).findRev(Option::dir_sep) + 1)); |
319 | if(s1.findRev('.') != -1) | 321 | if(s1.findRev('.') != -1) |
320 | s1 = s1.left(s1.findRev('.')) + Option::ui_ext; | 322 | s1 = s1.left(s1.findRev('.')) + Option::ui_ext; |
321 | QString u1 = (*ui_it).right((*ui_it).length() - ((*ui_it).findRev(Option::dir_sep) + 1)); | 323 | QString u1 = (*ui_it).right((*ui_it).length() - ((*ui_it).findRev(Option::dir_sep) + 1)); |
322 | if(s1 == u1) { | 324 | if(s1 == u1) { |
323 | found = TRUE; | 325 | found = TRUE; |
324 | break; | 326 | break; |
325 | } | 327 | } |
326 | } | 328 | } |
327 | if(!found && (*val_it).endsWith(Option::moc_ext)) | 329 | if(!found && (*val_it).endsWith(Option::cpp_moc_ext)) |
328 | found = TRUE; | 330 | found = TRUE; |
329 | if(found) | 331 | if(found) |
330 | val_it = l.remove(val_it); | 332 | val_it = l.remove(val_it); |
331 | else | 333 | else |
332 | ++val_it; | 334 | ++val_it; |
333 | } | 335 | } |
334 | } | 336 | } |
335 | } | 337 | } |
336 | } | 338 | } |
337 | 339 | ||
338 | 340 | ||
339 | bool | 341 | bool |
@@ -382,25 +384,25 @@ ProjectGenerator::addConfig(const QString &cfg, bool add) | |||
382 | return FALSE; | 384 | return FALSE; |
383 | } | 385 | } |
384 | 386 | ||
385 | 387 | ||
386 | bool | 388 | bool |
387 | ProjectGenerator::addFile(QString file) | 389 | ProjectGenerator::addFile(QString file) |
388 | { | 390 | { |
389 | file = fileFixify(file, QDir::currentDirPath()); | 391 | file = fileFixify(file, QDir::currentDirPath()); |
390 | QString dir; | 392 | QString dir; |
391 | int s = file.findRev(Option::dir_sep); | 393 | int s = file.findRev(Option::dir_sep); |
392 | if(s != -1) | 394 | if(s != -1) |
393 | dir = file.left(s+1); | 395 | dir = file.left(s+1); |
394 | if(file.mid(dir.length(), Option::moc_mod.length()) == Option::moc_mod) | 396 | if(file.mid(dir.length(), Option::h_moc_mod.length()) == Option::h_moc_mod) |
395 | return FALSE; | 397 | return FALSE; |
396 | 398 | ||
397 | QString where; | 399 | QString where; |
398 | for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { | 400 | for(QStringList::Iterator cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) { |
399 | if(file.endsWith((*cppit))) { | 401 | if(file.endsWith((*cppit))) { |
400 | if(QFile::exists(file.left(file.length() - (*cppit).length()) + Option::ui_ext)) | 402 | if(QFile::exists(file.left(file.length() - (*cppit).length()) + Option::ui_ext)) |
401 | return FALSE; | 403 | return FALSE; |
402 | else | 404 | else |
403 | where = "SOURCES"; | 405 | where = "SOURCES"; |
404 | break; | 406 | break; |
405 | } | 407 | } |
406 | } | 408 | } |
@@ -426,48 +428,52 @@ ProjectGenerator::addFile(QString file) | |||
426 | } | 428 | } |
427 | 429 | ||
428 | QString newfile = fileFixify(file); | 430 | QString newfile = fileFixify(file); |
429 | if(!where.isEmpty() && !project->variables()[where].contains(file)) { | 431 | if(!where.isEmpty() && !project->variables()[where].contains(file)) { |
430 | project->variables()[where] += newfile; | 432 | project->variables()[where] += newfile; |
431 | return TRUE; | 433 | return TRUE; |
432 | } | 434 | } |
433 | return FALSE; | 435 | return FALSE; |
434 | } | 436 | } |
435 | 437 | ||
436 | 438 | ||
437 | QString | 439 | QString |
438 | ProjectGenerator::getWritableVar(const QString &v, bool /*fixPath*/) | 440 | ProjectGenerator::getWritableVar(const QString &v, bool fixPath) |
439 | { | 441 | { |
440 | QStringList &vals = project->variables()[v]; | 442 | QStringList &vals = project->variables()[v]; |
441 | if(vals.isEmpty()) | 443 | if(vals.isEmpty()) |
442 | return ""; | 444 | return ""; |
443 | 445 | ||
444 | QString ret; | 446 | QString ret; |
445 | if(v.endsWith("_REMOVE")) | 447 | if(v.endsWith("_REMOVE")) |
446 | ret = v.left(v.length() - 7) + " -= "; | 448 | ret = v.left(v.length() - 7) + " -= "; |
447 | else if(v.endsWith("_ASSIGN")) | 449 | else if(v.endsWith("_ASSIGN")) |
448 | ret = v.left(v.length() - 7) + " = "; | 450 | ret = v.left(v.length() - 7) + " = "; |
449 | else | 451 | else |
450 | ret = v + " += "; | 452 | ret = v + " += "; |
451 | QString join = vals.join(" "); | 453 | QString join = vals.join(" "); |
452 | if(ret.length() + join.length() > 80) { | 454 | if(ret.length() + join.length() > 80) { |
453 | QString spaces; | 455 | QString spaces; |
454 | for(unsigned int i = 0; i < ret.length(); i++) | 456 | for(unsigned int i = 0; i < ret.length(); i++) |
455 | spaces += " "; | 457 | spaces += " "; |
456 | join = vals.join(" \\\n" + spaces); | 458 | join = vals.join(" \\\n" + spaces); |
457 | } | 459 | } |
460 | #if 0 | ||
458 | // ### Commented out for now so that project generation works. | 461 | // ### Commented out for now so that project generation works. |
459 | // Sam: can you look at why this was needed? | 462 | // Sam: it had to do with trailing \'s (ie considered continuation lines) |
460 | /* if(fixPath) | 463 | if(fixPath) |
461 | join = join.replace("\\", "/");*/ | 464 | join = join.replace("\\", "/"); |
465 | #else | ||
466 | Q_UNUSED(fixPath); | ||
467 | #endif | ||
462 | return ret + join + "\n"; | 468 | return ret + join + "\n"; |
463 | } | 469 | } |
464 | 470 | ||
465 | bool | 471 | bool |
466 | ProjectGenerator::openOutput(QFile &file) const | 472 | ProjectGenerator::openOutput(QFile &file) const |
467 | { | 473 | { |
468 | QString outdir; | 474 | QString outdir; |
469 | if(!file.name().isEmpty()) { | 475 | if(!file.name().isEmpty()) { |
470 | QFileInfo fi(file); | 476 | QFileInfo fi(file); |
471 | if(fi.isDir()) | 477 | if(fi.isDir()) |
472 | outdir = fi.dirPath() + QDir::separator(); | 478 | outdir = fi.dirPath() + QDir::separator(); |
473 | } | 479 | } |