summaryrefslogtreecommitdiff
path: root/qmake/generators/projectgenerator.cpp
Unidiff
Diffstat (limited to 'qmake/generators/projectgenerator.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/generators/projectgenerator.cpp40
1 files changed, 23 insertions, 17 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$ 2**
3** 3**
4** Definition of ________ class. 4** Implementation of ProjectGenerator class.
5** 5**
6** Created : 970521 6** Copyright (C) 1992-2003 Trolltech AS. All rights reserved.
7** 7**
8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. 8** This file is part of qmake.
9**
10** This file is part of the network module of the Qt GUI Toolkit.
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,44 +146,48 @@ 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()) 181 subdirs.append(nd);
178 subdirs.append(nd);
179 }
180 } 182 }
181 } 183 }
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 }
@@ -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
339bool 341bool
@@ -382,25 +384,25 @@ ProjectGenerator::addConfig(const QString &cfg, bool add)
382 return FALSE; 384 return FALSE;
383} 385}
384 386
385 387
386bool 388bool
387ProjectGenerator::addFile(QString file) 389ProjectGenerator::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
437QString 439QString
438ProjectGenerator::getWritableVar(const QString &v, bool /*fixPath*/) 440ProjectGenerator::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
465bool 471bool
466ProjectGenerator::openOutput(QFile &file) const 472ProjectGenerator::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 }