summaryrefslogtreecommitdiff
authorzecke <zecke>2003-04-20 18:11:49 (UTC)
committer zecke <zecke>2003-04-20 18:11:49 (UTC)
commitd32e9a7306da861786551c518525862a50154b95 (patch) (unidiff)
tree4ee2c97637b53691ea48322a200ec98cb7f13189
parentca3cd49d65353584bfe85755ef2885b049d25d33 (diff)
downloadopie-d32e9a7306da861786551c518525862a50154b95.zip
opie-d32e9a7306da861786551c518525862a50154b95.tar.gz
opie-d32e9a7306da861786551c518525862a50154b95.tar.bz2
add PRO = file.pro
to the Makefile
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/generators/unix/unixmake2.cpp33
1 files changed, 17 insertions, 16 deletions
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index cbe2014..9bb6f6b 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -18,185 +18,186 @@
18** Foundation and appearing in the file LICENSE.GPL included in the 18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file. 19** packaging of this file.
20** 20**
21** Licensees holding valid Qt Enterprise Edition licenses may use this 21** Licensees holding valid Qt Enterprise Edition licenses may use this
22** file in accordance with the Qt Commercial License Agreement provided 22** file in accordance with the Qt Commercial License Agreement provided
23** with the Software. 23** with the Software.
24** 24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27** 27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for 28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements. 29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information. 30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information. 31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32** 32**
33** Contact info@trolltech.com if any conditions of this licensing are 33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you. 34** not clear to you.
35** 35**
36**********************************************************************/ 36**********************************************************************/
37 37
38#include "unixmake.h" 38#include "unixmake.h"
39#include "option.h" 39#include "option.h"
40#include <qregexp.h> 40#include <qregexp.h>
41#include <qfile.h> 41#include <qfile.h>
42#include <qdir.h> 42#include <qdir.h>
43#include <time.h> 43#include <time.h>
44 44
45 45
46UnixMakefileGenerator::UnixMakefileGenerator(QMakeProject *p) : MakefileGenerator(p), init_flag(FALSE), include_deps(FALSE) 46UnixMakefileGenerator::UnixMakefileGenerator(QMakeProject *p) : MakefileGenerator(p), init_flag(FALSE), include_deps(FALSE)
47{ 47{
48 48
49} 49}
50 50
51bool 51bool
52UnixMakefileGenerator::writeMakefile(QTextStream &t) 52UnixMakefileGenerator::writeMakefile(QTextStream &t)
53{ 53{
54 writeHeader(t); 54 writeHeader(t);
55 if(!project->variables()["QMAKE_FAILED_REQUIREMENTS"].isEmpty()) { 55 if(!project->variables()["QMAKE_FAILED_REQUIREMENTS"].isEmpty()) {
56 t << "all clean:" << "\n\t" 56 t << "all clean:" << "\n\t"
57 << "@echo \"Some of the required modules (" 57 << "@echo \"Some of the required modules ("
58 << var("QMAKE_FAILED_REQUIREMENTS") << ") are not available.\"" << "\n\t" 58 << var("QMAKE_FAILED_REQUIREMENTS") << ") are not available.\"" << "\n\t"
59 << "@echo \"Skipped.\"" << endl << endl; 59 << "@echo \"Skipped.\"" << endl << endl;
60 writeMakeQmake(t); 60 writeMakeQmake(t);
61 return TRUE; 61 return TRUE;
62 } 62 }
63 63
64 if (project->variables()["TEMPLATE"].first() == "app" || 64 if (project->variables()["TEMPLATE"].first() == "app" ||
65 project->variables()["TEMPLATE"].first() == "lib") { 65 project->variables()["TEMPLATE"].first() == "lib") {
66 writeMakeParts(t); 66 writeMakeParts(t);
67 return MakefileGenerator::writeMakefile(t); 67 return MakefileGenerator::writeMakefile(t);
68 } else if(project->variables()["TEMPLATE"].first() == "subdirs") { 68 } else if(project->variables()["TEMPLATE"].first() == "subdirs") {
69 writeSubdirs(t); 69 writeSubdirs(t);
70 return TRUE; 70 return TRUE;
71 } 71 }
72 return FALSE; 72 return FALSE;
73} 73}
74 74
75void 75void
76UnixMakefileGenerator::writeMakeParts(QTextStream &t) 76UnixMakefileGenerator::writeMakeParts(QTextStream &t)
77{ 77{
78 QString deps = fileFixify(Option::output.name()), prl; 78 QString deps = fileFixify(Option::output.name()), prl;
79 bool do_incremental = (project->isActiveConfig("incremental") && 79 bool do_incremental = (project->isActiveConfig("incremental") &&
80 !project->variables()["QMAKE_INCREMENTAL"].isEmpty() && 80 !project->variables()["QMAKE_INCREMENTAL"].isEmpty() &&
81 (!project->variables()["QMAKE_APP_FLAG"].isEmpty() || 81 (!project->variables()["QMAKE_APP_FLAG"].isEmpty() ||
82 !project->isActiveConfig("staticlib"))), 82 !project->isActiveConfig("staticlib"))),
83 src_incremental=FALSE, moc_incremental=FALSE; 83 src_incremental=FALSE, moc_incremental=FALSE;
84 QString os = project->variables()["QMAKESPEC"].first().section( '-', 0, 0 ); 84 QString os = project->variables()["QMAKESPEC"].first().section( '-', 0, 0 );
85 85
86 t << "####### Compiler, tools and options" << endl << endl; 86 t << "####### Compiler, tools and options" << endl << endl;
87 t << "CC = "; 87 t << "CC = ";
88 if (project->isActiveConfig("thread") && 88 if (project->isActiveConfig("thread") &&
89 ! project->variables()["QMAKE_CC_THREAD"].isEmpty()) 89 ! project->variables()["QMAKE_CC_THREAD"].isEmpty())
90 t << var("QMAKE_CC_THREAD") << endl; 90 t << var("QMAKE_CC_THREAD") << endl;
91 else 91 else
92 t << var("QMAKE_CC") << endl; 92 t << var("QMAKE_CC") << endl;
93 93
94 t << "CXX = "; 94 t << "CXX = ";
95 if (project->isActiveConfig("thread") && 95 if (project->isActiveConfig("thread") &&
96 ! project->variables()["QMAKE_CXX_THREAD"].isEmpty()) 96 ! project->variables()["QMAKE_CXX_THREAD"].isEmpty())
97 t << var("QMAKE_CXX_THREAD") << endl; 97 t << var("QMAKE_CXX_THREAD") << endl;
98 else 98 else
99 t << var("QMAKE_CXX") << endl; 99 t << var("QMAKE_CXX") << endl;
100 100
101 t << "LEX = " << var("QMAKE_LEX") << endl; 101 t << "LEX = " << var("QMAKE_LEX") << endl;
102 t << "YACC = " << var("QMAKE_YACC") << endl; 102 t << "YACC = " << var("QMAKE_YACC") << endl;
103 t << "CFLAGS = " << var("QMAKE_CFLAGS") << " " 103 t << "CFLAGS = " << var("QMAKE_CFLAGS") << " "
104 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " " 104 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "
105 << varGlue("DEFINES","-D"," -D","") << endl; 105 << varGlue("DEFINES","-D"," -D","") << endl;
106 t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " " 106 t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " "
107 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " " 107 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "
108 << varGlue("DEFINES","-D"," -D","") << endl; 108 << varGlue("DEFINES","-D"," -D","") << endl;
109 t << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; 109 t << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl;
110 t << "YACCFLAGS= " << var("QMAKE_YACCFLAGS") << endl; 110 t << "YACCFLAGS= " << var("QMAKE_YACCFLAGS") << endl;
111 t << "INCPATH = " << varGlue("INCLUDEPATH","-I", " -I", "") << " -I" << specdir() << endl; 111 t << "INCPATH = " << varGlue("INCLUDEPATH","-I", " -I", "") << " -I" << specdir() << endl;
112 112
113 if(!project->isActiveConfig("staticlib")) { 113 if(!project->isActiveConfig("staticlib")) {
114 t << "LINK = "; 114 t << "LINK = ";
115 if (project->isActiveConfig("thread") && 115 if (project->isActiveConfig("thread") &&
116 ! project->variables()["QMAKE_LINK_THREAD"].isEmpty()) 116 ! project->variables()["QMAKE_LINK_THREAD"].isEmpty())
117 t << var("QMAKE_LINK_THREAD") << endl; 117 t << var("QMAKE_LINK_THREAD") << endl;
118 else 118 else
119 t << var("QMAKE_LINK") << endl; 119 t << var("QMAKE_LINK") << endl;
120 120
121 t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl; 121 t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
122 t << "LIBS = " << "$(SUBLIBS) " << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl; 122 t << "LIBS = " << "$(SUBLIBS) " << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl;
123 } 123 }
124 124
125 t << "AR = " << var("QMAKE_AR") << endl; 125 t << "AR = " << var("QMAKE_AR") << endl;
126 t << "RANLIB = " << var("QMAKE_RANLIB") << endl; 126 t << "RANLIB = " << var("QMAKE_RANLIB") << endl;
127 t << "MOC = " << var("QMAKE_MOC") << endl; 127 t << "MOC = " << var("QMAKE_MOC") << endl;
128 t << "UIC = "<< var("QMAKE_UIC") << endl; 128 t << "UIC = "<< var("QMAKE_UIC") << endl;
129 t << "QMAKE = "<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl; 129 t << "QMAKE = "<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;
130 t << "TAR = "<< var("QMAKE_TAR") << endl; 130 t << "TAR = "<< var("QMAKE_TAR") << endl;
131 t << "GZIP = " << var("QMAKE_GZIP") << endl; 131 t << "GZIP = " << var("QMAKE_GZIP") << endl;
132 t << "COPY = " << var("QMAKE_COPY") << endl; 132 t << "COPY = " << var("QMAKE_COPY") << endl;
133 t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl; 133 t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl;
134 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; 134 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl;
135 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 135 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
136 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl; 136 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl;
137 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; 137 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl;
138 t << "MOVE = " << var("QMAKE_MOVE") << endl; 138 t << "MOVE = " << var("QMAKE_MOVE") << endl;
139 t << "PRO = " << fileFixify(project->projectFile() )<< endl;
139 t << endl; 140 t << endl;
140 141
141 t << "####### Output directory" << endl << endl; 142 t << "####### Output directory" << endl << endl;
142 if (! project->variables()["OBJECTS_DIR"].isEmpty()) 143 if (! project->variables()["OBJECTS_DIR"].isEmpty())
143 t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl; 144 t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl;
144 else 145 else
145 t << "OBJECTS_DIR = ./" << endl; 146 t << "OBJECTS_DIR = ./" << endl;
146 t << endl; 147 t << endl;
147 148
148 /* files */ 149 /* files */
149 t << "####### Files" << endl << endl; 150 t << "####### Files" << endl << endl;
150 t << "HEADERS = " << varList("HEADERS") << endl; 151 t << "HEADERS = " << varList("HEADERS") << endl;
151 t << "SOURCES = " << varList("SOURCES") << endl; 152 t << "SOURCES = " << varList("SOURCES") << endl;
152 if(do_incremental) { 153 if(do_incremental) {
153 QStringList &objs = project->variables()["OBJECTS"], &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out; 154 QStringList &objs = project->variables()["OBJECTS"], &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out;
154 t << "OBJECTS = "; 155 t << "OBJECTS = ";
155 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) { 156 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {
156 bool increment = FALSE; 157 bool increment = FALSE;
157 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) { 158 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {
158 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) { 159 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {
159 increment = TRUE; 160 increment = TRUE;
160 incrs_out.append((*objit)); 161 incrs_out.append((*objit));
161 break; 162 break;
162 } 163 }
163 } 164 }
164 if(!increment) 165 if(!increment)
165 t << "\\\n\t\t" << (*objit); 166 t << "\\\n\t\t" << (*objit);
166 } 167 }
167 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done! 168 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done!
168 t << incrs_out.join(" \\\n\t\t") << endl; 169 t << incrs_out.join(" \\\n\t\t") << endl;
169 } else if(!incrs_out.count()) { 170 } else if(!incrs_out.count()) {
170 t << endl; 171 t << endl;
171 } else { 172 } else {
172 src_incremental = TRUE; 173 src_incremental = TRUE;
173 t << endl; 174 t << endl;
174 t << "INCREMENTAL_OBJECTS = " << incrs_out.join(" \\\n\t\t") << endl; 175 t << "INCREMENTAL_OBJECTS = " << incrs_out.join(" \\\n\t\t") << endl;
175 } 176 }
176 } else { 177 } else {
177 t << "OBJECTS = " << varList("OBJECTS") << endl; 178 t << "OBJECTS = " << varList("OBJECTS") << endl;
178 } 179 }
179 t << "FORMS = " << varList("FORMS") << endl; 180 t << "FORMS = " << varList("FORMS") << endl;
180 t << "UICDECLS = " << varList("UICDECLS") << endl; 181 t << "UICDECLS = " << varList("UICDECLS") << endl;
181 t << "UICIMPLS = " << varList("UICIMPLS") << endl; 182 t << "UICIMPLS = " << varList("UICIMPLS") << endl;
182 QString srcMoc = varList("SRCMOC"), objMoc = varList("OBJMOC"); 183 QString srcMoc = varList("SRCMOC"), objMoc = varList("OBJMOC");
183 t << "SRCMOC = " << srcMoc << endl; 184 t << "SRCMOC = " << srcMoc << endl;
184 if(do_incremental) { 185 if(do_incremental) {
185 QStringList &objs = project->variables()["OBJMOC"], 186 QStringList &objs = project->variables()["OBJMOC"],
186 &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out; 187 &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out;
187 t << "OBJMOC = "; 188 t << "OBJMOC = ";
188 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) { 189 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {
189 bool increment = FALSE; 190 bool increment = FALSE;
190 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) { 191 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {
191 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) { 192 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {
192 increment = TRUE; 193 increment = TRUE;
193 incrs_out.append((*objit)); 194 incrs_out.append((*objit));
194 break; 195 break;
195 } 196 }
196 } 197 }
197 if(!increment) 198 if(!increment)
198 t << "\\\n\t\t" << (*objit); 199 t << "\\\n\t\t" << (*objit);
199 } 200 }
200 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done! 201 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done!
201 t << incrs_out.join(" \\\n\t\t") << endl; 202 t << incrs_out.join(" \\\n\t\t") << endl;
202 } else if(!incrs_out.count()) { 203 } else if(!incrs_out.count()) {
@@ -469,241 +470,241 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
469 } 470 }
470 if(!destdir.isEmpty()) 471 if(!destdir.isEmpty())
471 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir; 472 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir;
472 if(!project->isEmpty("QMAKE_PRE_LINK")) 473 if(!project->isEmpty("QMAKE_PRE_LINK"))
473 t << "\n\t" << var("QMAKE_PRE_LINK"); 474 t << "\n\t" << var("QMAKE_PRE_LINK");
474 475
475 if(project->isActiveConfig("plugin")) { 476 if(project->isActiveConfig("plugin")) {
476 t << "\n\t" 477 t << "\n\t"
477 << "-$(DEL_FILE) $(TARGET)" << "\n\t" 478 << "-$(DEL_FILE) $(TARGET)" << "\n\t"
478 << var("QMAKE_LINK_SHLIB_CMD"); 479 << var("QMAKE_LINK_SHLIB_CMD");
479 if(!destdir.isEmpty()) 480 if(!destdir.isEmpty())
480 t << "\n\t" 481 t << "\n\t"
481 << "-$(MOVE) $(TARGET) " << var("DESTDIR"); 482 << "-$(MOVE) $(TARGET) " << var("DESTDIR");
482 if(!project->isEmpty("QMAKE_POST_LINK")) 483 if(!project->isEmpty("QMAKE_POST_LINK"))
483 t << "\n\t" << var("QMAKE_POST_LINK") << "\n\t"; 484 t << "\n\t" << var("QMAKE_POST_LINK") << "\n\t";
484 t << endl << endl; 485 t << endl << endl;
485 } else if ( os == "hpux" ) { 486 } else if ( os == "hpux" ) {
486 t << "\n\t" 487 t << "\n\t"
487 << "-$(DEL_FILE) $(TARGET) $(TARGET0)" << "\n\t" 488 << "-$(DEL_FILE) $(TARGET) $(TARGET0)" << "\n\t"
488 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t"; 489 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
489 t << varGlue("QMAKE_LN_SHLIB",""," "," $(TARGET) $(TARGET0)"); 490 t << varGlue("QMAKE_LN_SHLIB",""," "," $(TARGET) $(TARGET0)");
490 if(!destdir.isEmpty()) 491 if(!destdir.isEmpty())
491 t << "\n\t" 492 t << "\n\t"
492 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t" 493 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t"
493 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t" 494 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t"
494 << "-$(MOVE) $(TARGET) $(TARGET0) " << var("DESTDIR"); 495 << "-$(MOVE) $(TARGET) $(TARGET0) " << var("DESTDIR");
495 if(!project->isEmpty("QMAKE_POST_LINK")) 496 if(!project->isEmpty("QMAKE_POST_LINK"))
496 t << "\n\t" << var("QMAKE_POST_LINK"); 497 t << "\n\t" << var("QMAKE_POST_LINK");
497 t << endl << endl; 498 t << endl << endl;
498 } else { 499 } else {
499 t << "\n\t" 500 t << "\n\t"
500 << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)" << "\n\t" 501 << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)" << "\n\t"
501 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t"; 502 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
502 t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t" 503 t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t"
503 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t" 504 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t"
504 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)"); 505 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)");
505 if(!destdir.isEmpty()) 506 if(!destdir.isEmpty())
506 t << "\n\t" 507 t << "\n\t"
507 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t" 508 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t"
508 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t" 509 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t"
509 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET1)\n\t" 510 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET1)\n\t"
510 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET2)\n\t" 511 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET2)\n\t"
511 << "-$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) " << var("DESTDIR"); 512 << "-$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) " << var("DESTDIR");
512 if(!project->isEmpty("QMAKE_POST_LINK")) 513 if(!project->isEmpty("QMAKE_POST_LINK"))
513 t << "\n\t" << var("QMAKE_POST_LINK"); 514 t << "\n\t" << var("QMAKE_POST_LINK");
514 t << endl << endl; 515 t << endl << endl;
515 } 516 }
516 t << endl << endl; 517 t << endl << endl;
517 518
518 if (! project->isActiveConfig("plugin")) { 519 if (! project->isActiveConfig("plugin")) {
519 t << "staticlib: $(TARGETA)" << endl << endl; 520 t << "staticlib: $(TARGETA)" << endl << endl;
520 t << "$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC)"; 521 t << "$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC)";
521 if(do_incremental) 522 if(do_incremental)
522 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)"; 523 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)";
523 t << var("TARGETDEPS") << "\n\t" 524 t << var("TARGETDEPS") << "\n\t"
524 << "-$(DEL_FILE) $(TARGETA) " << "\n\t" 525 << "-$(DEL_FILE) $(TARGETA) " << "\n\t"
525 << var("QMAKE_AR_CMD"); 526 << var("QMAKE_AR_CMD");
526 if(do_incremental) 527 if(do_incremental)
527 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)"; 528 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)";
528 if(!project->isEmpty("QMAKE_RANLIB")) 529 if(!project->isEmpty("QMAKE_RANLIB"))
529 t << "\n\t" << "$(RANLIB) $(TARGETA)"; 530 t << "\n\t" << "$(RANLIB) $(TARGETA)";
530 t << endl << endl; 531 t << endl << endl;
531 } 532 }
532 } else { 533 } else {
533 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << var("DESTDIR") << "$(TARGET) " 534 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << var("DESTDIR") << "$(TARGET) "
534 << varGlue("QMAKE_AR_SUBLIBS", var("DESTDIR"), " " + var("DESTDIR"), "") << "\n\n" 535 << varGlue("QMAKE_AR_SUBLIBS", var("DESTDIR"), " " + var("DESTDIR"), "") << "\n\n"
535 << "staticlib: " << var("DESTDIR") << "$(TARGET)" << "\n\n"; 536 << "staticlib: " << var("DESTDIR") << "$(TARGET)" << "\n\n";
536 if(project->isEmpty("QMAKE_AR_SUBLIBS")) { 537 if(project->isEmpty("QMAKE_AR_SUBLIBS")) {
537 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(TARGETDEPS) " << "\n\t"; 538 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(TARGETDEPS) " << "\n\t";
538 if(!project->isEmpty("DESTDIR")) { 539 if(!project->isEmpty("DESTDIR")) {
539 QString destdir = project->first("DESTDIR"); 540 QString destdir = project->first("DESTDIR");
540 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 541 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
541 } 542 }
542 t << "-$(DEL_FILE) $(TARGET)" << "\n\t" 543 t << "-$(DEL_FILE) $(TARGET)" << "\n\t"
543 << var("QMAKE_AR_CMD") << "\n"; 544 << var("QMAKE_AR_CMD") << "\n";
544 if(!project->isEmpty("QMAKE_POST_LINK")) 545 if(!project->isEmpty("QMAKE_POST_LINK"))
545 t << "\t" << var("QMAKE_POST_LINK") << "\n"; 546 t << "\t" << var("QMAKE_POST_LINK") << "\n";
546 if(!project->isEmpty("QMAKE_RANLIB")) 547 if(!project->isEmpty("QMAKE_RANLIB"))
547 t << "\t" << "$(RANLIB) $(TARGET)" << "\n"; 548 t << "\t" << "$(RANLIB) $(TARGET)" << "\n";
548 if(!project->isEmpty("DESTDIR")) 549 if(!project->isEmpty("DESTDIR"))
549 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)" << "\n" 550 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)" << "\n"
550 << "\t" << "-$(MOVE) $(TARGET) " << var("DESTDIR") << "\n"; 551 << "\t" << "-$(MOVE) $(TARGET) " << var("DESTDIR") << "\n";
551 } else { 552 } else {
552 int cnt = 0, max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt(); 553 int cnt = 0, max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt();
553 QStringList objs = project->variables()["OBJECTS"] + project->variables()["OBJMOC"], 554 QStringList objs = project->variables()["OBJECTS"] + project->variables()["OBJMOC"],
554 libs = project->variables()["QMAKE_AR_SUBLIBS"]; 555 libs = project->variables()["QMAKE_AR_SUBLIBS"];
555 libs.prepend("$(TARGET)"); 556 libs.prepend("$(TARGET)");
556 for(QStringList::Iterator libit = libs.begin(), objit = objs.begin(); 557 for(QStringList::Iterator libit = libs.begin(), objit = objs.begin();
557 libit != libs.end(); ++libit) { 558 libit != libs.end(); ++libit) {
558 QStringList build; 559 QStringList build;
559 for(cnt = 0; cnt < max_files && objit != objs.end(); ++objit, cnt++) 560 for(cnt = 0; cnt < max_files && objit != objs.end(); ++objit, cnt++)
560 build << (*objit); 561 build << (*objit);
561 QString ar; 562 QString ar;
562 if((*libit) == "$(TARGET)") { 563 if((*libit) == "$(TARGET)") {
563 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) " << " $(TARGETDEPS) " 564 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) " << " $(TARGETDEPS) "
564 << valList(build) << "\n\t"; 565 << valList(build) << "\n\t";
565 ar = project->variables()["QMAKE_AR_CMD"].first(); 566 ar = project->variables()["QMAKE_AR_CMD"].first();
566 ar = ar.replace("$(OBJMOC)", "").replace("$(OBJECTS)", 567 ar = ar.replace("$(OBJMOC)", "").replace("$(OBJECTS)",
567 build.join(" ")); 568 build.join(" "));
568 } else { 569 } else {
569 t << (*libit) << ": " << valList(build) << "\n\t"; 570 t << (*libit) << ": " << valList(build) << "\n\t";
570 ar = "$(AR) " + (*libit) + " " + build.join(" "); 571 ar = "$(AR) " + (*libit) + " " + build.join(" ");
571 } 572 }
572 if(!project->isEmpty("DESTDIR")) { 573 if(!project->isEmpty("DESTDIR")) {
573 QString destdir = project->first("DESTDIR"); 574 QString destdir = project->first("DESTDIR");
574 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 575 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
575 } 576 }
576 t << "-$(DEL_FILE) " << (*libit) << "\n\t" 577 t << "-$(DEL_FILE) " << (*libit) << "\n\t"
577 << ar << "\n"; 578 << ar << "\n";
578 if(!project->isEmpty("QMAKE_POST_LINK")) 579 if(!project->isEmpty("QMAKE_POST_LINK"))
579 t << "\t" << var("QMAKE_POST_LINK") << "\n"; 580 t << "\t" << var("QMAKE_POST_LINK") << "\n";
580 if(!project->isEmpty("QMAKE_RANLIB")) 581 if(!project->isEmpty("QMAKE_RANLIB"))
581 t << "\t" << "$(RANLIB) " << (*libit) << "\n"; 582 t << "\t" << "$(RANLIB) " << (*libit) << "\n";
582 if(!project->isEmpty("DESTDIR")) 583 if(!project->isEmpty("DESTDIR"))
583 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << (*libit) << "\n" 584 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << (*libit) << "\n"
584 << "\t" << "-$(MOVE) " << (*libit) << " " << var("DESTDIR") << "\n"; 585 << "\t" << "-$(MOVE) " << (*libit) << " " << var("DESTDIR") << "\n";
585 } 586 }
586 } 587 }
587 t << endl << endl; 588 t << endl << endl;
588 } 589 }
589 590
590 t << "mocables: $(SRCMOC)" << endl << endl; 591 t << "mocables: $(SRCMOC)" << endl << endl;
591 592
592 if(!project->isActiveConfig("no_mocdepend")) { 593 if(!project->isActiveConfig("no_mocdepend")) {
593 //this is an implicity depend on moc, so it will be built if necesary, however 594 //this is an implicity depend on moc, so it will be built if necesary, however
594 //moc itself shouldn't have this dependancy - this is a little kludgy but it is 595 //moc itself shouldn't have this dependancy - this is a little kludgy but it is
595 //better than the alternative for now. 596 //better than the alternative for now.
596 QString moc = project->first("QMAKE_MOC"), target = project->first("TARGET"); 597 QString moc = project->first("QMAKE_MOC"), target = project->first("TARGET");
597 fixEnvVariables(target); 598 fixEnvVariables(target);
598 fixEnvVariables(moc); 599 fixEnvVariables(moc);
599 if(target != moc) 600 if(target != moc)
600 t << "$(MOC): \n\t" 601 t << "$(MOC): \n\t"
601 << "( cd $(QTDIR)/src/moc ; $(MAKE) )" << endl << endl; 602 << "( cd $(QTDIR)/src/moc ; $(MAKE) )" << endl << endl;
602 } 603 }
603 604
604 writeMakeQmake(t); 605 writeMakeQmake(t);
605 606
606 if(!project->first("QMAKE_PKGINFO").isEmpty()) { 607 if(!project->first("QMAKE_PKGINFO").isEmpty()) {
607 QString pkginfo = project->first("QMAKE_PKGINFO"); 608 QString pkginfo = project->first("QMAKE_PKGINFO");
608 QString destdir = project->first("DESTDIR"); 609 QString destdir = project->first("DESTDIR");
609 t << pkginfo << ": " << "\n\t"; 610 t << pkginfo << ": " << "\n\t";
610 if(!destdir.isEmpty()) 611 if(!destdir.isEmpty())
611 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 612 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
612 t << "@$(DEL_FILE) " << pkginfo << "\n\t" 613 t << "@$(DEL_FILE) " << pkginfo << "\n\t"
613 << "@echo \"APPL????\" >" << pkginfo << endl; 614 << "@echo \"APPL????\" >" << pkginfo << endl;
614 } 615 }
615 if(!project->first("QMAKE_INFO_PLIST").isEmpty()) { 616 if(!project->first("QMAKE_INFO_PLIST").isEmpty()) {
616 QString info_plist = project->first("QMAKE_INFO_PLIST"), 617 QString info_plist = project->first("QMAKE_INFO_PLIST"),
617 info_plist_out = project->first("QMAKE_INFO_PLIST_OUT"); 618 info_plist_out = project->first("QMAKE_INFO_PLIST_OUT");
618 QString destdir = project->first("DESTDIR"); 619 QString destdir = project->first("DESTDIR");
619 t << info_plist_out << ": " << "\n\t"; 620 t << info_plist_out << ": " << "\n\t";
620 if(!destdir.isEmpty()) 621 if(!destdir.isEmpty())
621 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 622 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
622 t << "@$(DEL_FILE) " << info_plist_out << "\n\t" 623 t << "@$(DEL_FILE) " << info_plist_out << "\n\t"
623 << "@cp \"" << info_plist << "\" \"" << info_plist_out << "\"" << endl; 624 << "@cp \"" << info_plist << "\" \"" << info_plist_out << "\"" << endl;
624 if(!project->first("RC_FILE").isEmpty()) { 625 if(!project->first("RC_FILE").isEmpty()) {
625 QString dir = destdir + "../Resources/"; 626 QString dir = destdir + "../Resources/";
626 t << dir << "application.icns:" << "\n\t" 627 t << dir << "application.icns:" << "\n\t"
627 << "@test -d " << dir << " || mkdir -p " << dir << "\n\t" 628 << "@test -d " << dir << " || mkdir -p " << dir << "\n\t"
628 << "@cp " << var("RC_FILE") << " " << dir << "application.icns" << endl; 629 << "@cp " << var("RC_FILE") << " " << dir << "application.icns" << endl;
629 } 630 }
630 } 631 }
631 632
632 QString ddir = project->isEmpty("QMAKE_DISTDIR") ? project->first("QMAKE_ORIG_TARGET") : 633 QString ddir = project->isEmpty("QMAKE_DISTDIR") ? project->first("QMAKE_ORIG_TARGET") :
633 project->first("QMAKE_DISTDIR"); 634 project->first("QMAKE_DISTDIR");
634 QString ddir_c = fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") : 635 QString ddir_c = fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") :
635 project->first("OBJECTS_DIR")) + ddir); 636 project->first("OBJECTS_DIR")) + ddir);
636 t << "dist: " << "\n\t" 637 t << "dist: " << "\n\t"
637 << "@mkdir -p " << ddir_c << " && " 638 << "@mkdir -p " << ddir_c << " && "
638 << "$(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) " << ddir_c << Option::dir_sep << " && "; 639 << "$(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) " << ddir_c << Option::dir_sep << " && ";
639 if(!project->isEmpty("TRANSLATIONS")) 640 if(!project->isEmpty("TRANSLATIONS"))
640 t << "$(COPY_FILE) --parents " << var("TRANSLATIONS") << " " << ddir_c << Option::dir_sep << " && "; 641 t << "$(COPY_FILE) --parents " << var("TRANSLATIONS") << " " << ddir_c << Option::dir_sep << " && ";
641 if(!project->isEmpty("FORMS")) { 642 if(!project->isEmpty("FORMS")) {
642 QStringList &forms = project->variables()["FORMS"], ui_headers; 643 QStringList &forms = project->variables()["FORMS"], ui_headers;
643 for(QStringList::Iterator formit = forms.begin(); formit != forms.end(); ++formit) { 644 for(QStringList::Iterator formit = forms.begin(); formit != forms.end(); ++formit) {
644 QString ui_h = fileFixify((*formit) + Option::h_ext.first()); 645 QString ui_h = fileFixify((*formit) + Option::h_ext.first());
645 if(QFile::exists(ui_h) ) 646 if(QFile::exists(ui_h) )
646 ui_headers << ui_h; 647 ui_headers << ui_h;
647 } 648 }
648 if(!ui_headers.isEmpty()) 649 if(!ui_headers.isEmpty())
649 t << "$(COPY_FILE) --parents " << val(ui_headers) << " " << ddir_c << Option::dir_sep << " && "; 650 t << "$(COPY_FILE) --parents " << val(ui_headers) << " " << ddir_c << Option::dir_sep << " && ";
650 } 651 }
651 t << "( cd `dirname " << ddir_c << "` && " 652 t << "( cd `dirname " << ddir_c << "` && "
652 << "$(TAR) " << var("QMAKE_ORIG_TARGET") << ".tar " << ddir << " && " 653 << "$(TAR) " << var("QMAKE_ORIG_TARGET") << ".tar " << ddir << " && "
653 << "$(GZIP) " << var("QMAKE_ORIG_TARGET") << ".tar ) && " 654 << "$(GZIP) " << var("QMAKE_ORIG_TARGET") << ".tar ) && "
654 << "$(MOVE) `dirname " << ddir_c << "`" << Option::dir_sep << var("QMAKE_ORIG_TARGET") << ".tar.gz . && " 655 << "$(MOVE) `dirname " << ddir_c << "`" << Option::dir_sep << var("QMAKE_ORIG_TARGET") << ".tar.gz . && "
655 << "$(DEL_DIR) " << ddir_c 656 << "$(DEL_DIR) " << ddir_c
656 << endl << endl; 657 << endl << endl;
657 658
658 QString clean_targets; 659 QString clean_targets;
659 if(mocAware()) { 660 if(mocAware()) {
660 t << "mocclean:" << "\n"; 661 t << "mocclean:" << "\n";
661 if(!objMoc.isEmpty() || !srcMoc.isEmpty() || moc_incremental) { 662 if(!objMoc.isEmpty() || !srcMoc.isEmpty() || moc_incremental) {
662 if(!objMoc.isEmpty()) 663 if(!objMoc.isEmpty())
663 t << "\t-$(DEL_FILE) $(OBJMOC)" << '\n'; 664 t << "\t-$(DEL_FILE) $(OBJMOC)" << '\n';
664 if(!srcMoc.isEmpty()) 665 if(!srcMoc.isEmpty())
665 t << "\t-$(DEL_FILE) $(SRCMOC)" << '\n'; 666 t << "\t-$(DEL_FILE) $(SRCMOC)" << '\n';
666 if(moc_incremental) 667 if(moc_incremental)
667 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n'; 668 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n';
668 clean_targets += " mocclean"; 669 clean_targets += " mocclean";
669 } 670 }
670 t << endl; 671 t << endl;
671 } 672 }
672 t << "uiclean:" << "\n"; 673 t << "uiclean:" << "\n";
673 if (!var("UICIMPLS").isEmpty() || !var("UICDECLS").isEmpty()) { 674 if (!var("UICIMPLS").isEmpty() || !var("UICDECLS").isEmpty()) {
674 t << "\t-$(DEL_FILE) $(UICIMPLS) $(UICDECLS)" << "\n"; 675 t << "\t-$(DEL_FILE) $(UICIMPLS) $(UICDECLS)" << "\n";
675 clean_targets += " uiclean"; 676 clean_targets += " uiclean";
676 } 677 }
677 t << endl; 678 t << endl;
678 679
679 if(do_incremental) { 680 if(do_incremental) {
680 t << "incrclean:" << "\n"; 681 t << "incrclean:" << "\n";
681 if(src_incremental) 682 if(src_incremental)
682 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n"; 683 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n";
683 if(moc_incremental) 684 if(moc_incremental)
684 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n'; 685 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n';
685 t << endl; 686 t << endl;
686 } 687 }
687 688
688 t << "clean:" << clean_targets << "\n\t"; 689 t << "clean:" << clean_targets << "\n\t";
689 if(!project->isEmpty("OBJECTS")) 690 if(!project->isEmpty("OBJECTS"))
690 t << "-$(DEL_FILE) $(OBJECTS) " << "\n\t"; 691 t << "-$(DEL_FILE) $(OBJECTS) " << "\n\t";
691 if(!project->isEmpty("IMAGES")) 692 if(!project->isEmpty("IMAGES"))
692 t << varGlue("QMAKE_IMAGE_COLLECTION", "\t-$(DEL_FILE) ", " ", "") << "\n\t"; 693 t << varGlue("QMAKE_IMAGE_COLLECTION", "\t-$(DEL_FILE) ", " ", "") << "\n\t";
693 if(src_incremental) 694 if(src_incremental)
694 t << "-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n\t"; 695 t << "-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n\t";
695 t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t") 696 t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t")
696 << "-$(DEL_FILE) *~ core *.core" << "\n" 697 << "-$(DEL_FILE) *~ core *.core" << "\n"
697 << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl; 698 << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl;
698 t << "####### Sub-libraries" << endl << endl; 699 t << "####### Sub-libraries" << endl << endl;
699 if ( !project->variables()["SUBLIBS"].isEmpty() ) { 700 if ( !project->variables()["SUBLIBS"].isEmpty() ) {
700 QString libdir = "tmp/"; 701 QString libdir = "tmp/";
701 if(!project->isEmpty("SUBLIBS_DIR")) 702 if(!project->isEmpty("SUBLIBS_DIR"))
702 libdir = project->first("SUBLIBS_DIR"); 703 libdir = project->first("SUBLIBS_DIR");
703 QStringList &l = project->variables()["SUBLIBS"]; 704 QStringList &l = project->variables()["SUBLIBS"];
704 for(it = l.begin(); it != l.end(); ++it) 705 for(it = l.begin(); it != l.end(); ++it)
705 t << libdir << "lib" << (*it) << ".a" << ":\n\t" 706 t << libdir << "lib" << (*it) << ".a" << ":\n\t"
706 << var(QString("MAKELIB") + (*it)) << endl << endl; 707 << var(QString("MAKELIB") + (*it)) << endl << endl;
707 } 708 }
708 709
709 QString destdir = project->first("DESTDIR"); 710 QString destdir = project->first("DESTDIR");
@@ -744,262 +745,262 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
744 for(QStringList::Iterator dep_it = deplist.begin(); dep_it != deplist.end(); ++dep_it) { 745 for(QStringList::Iterator dep_it = deplist.begin(); dep_it != deplist.end(); ++dep_it) {
745 QString dep = var((*dep_it) + ".target"); 746 QString dep = var((*dep_it) + ".target");
746 if(dep.isEmpty()) 747 if(dep.isEmpty())
747 dep = (*dep_it); 748 dep = (*dep_it);
748 deps += " " + dep; 749 deps += " " + dep;
749 } 750 }
750 t << targ << ":" << deps << "\n\t" 751 t << targ << ":" << deps << "\n\t"
751 << cmd << endl << endl; 752 << cmd << endl << endl;
752 } 753 }
753 t <<"FORCE:" << endl << endl; 754 t <<"FORCE:" << endl << endl;
754} 755}
755 756
756struct SubDir 757struct SubDir
757{ 758{
758 QString directory, profile, target, makefile; 759 QString directory, profile, target, makefile;
759}; 760};
760 761
761void 762void
762UnixMakefileGenerator::writeSubdirs(QTextStream &t, bool direct) 763UnixMakefileGenerator::writeSubdirs(QTextStream &t, bool direct)
763{ 764{
764 QPtrList<SubDir> subdirs; 765 QPtrList<SubDir> subdirs;
765 { 766 {
766 QStringList subdirs_in = project->variables()["SUBDIRS"]; 767 QStringList subdirs_in = project->variables()["SUBDIRS"];
767 for(QStringList::Iterator it = subdirs_in.begin(); it != subdirs_in.end(); ++it) { 768 for(QStringList::Iterator it = subdirs_in.begin(); it != subdirs_in.end(); ++it) {
768 QString file = (*it); 769 QString file = (*it);
769 fileFixify(file); 770 fileFixify(file);
770 SubDir *sd = new SubDir; 771 SubDir *sd = new SubDir;
771 subdirs.append(sd); 772 subdirs.append(sd);
772 sd->makefile = "$(MAKEFILE)"; 773 sd->makefile = "$(MAKEFILE)";
773 if((*it).right(4) == ".pro") { 774 if((*it).right(4) == ".pro") {
774 int slsh = file.findRev(Option::dir_sep); 775 int slsh = file.findRev(Option::dir_sep);
775 if(slsh != -1) { 776 if(slsh != -1) {
776 sd->directory = file.left(slsh+1); 777 sd->directory = file.left(slsh+1);
777 sd->profile = file.mid(slsh+1); 778 sd->profile = file.mid(slsh+1);
778 } else { 779 } else {
779 sd->profile = file; 780 sd->profile = file;
780 } 781 }
781 } else { 782 } else {
782 sd->directory = file; 783 sd->directory = file;
783 } 784 }
784 while(sd->directory.right(1) == Option::dir_sep) 785 while(sd->directory.right(1) == Option::dir_sep)
785 sd->directory = sd->directory.left(sd->directory.length() - 1); 786 sd->directory = sd->directory.left(sd->directory.length() - 1);
786 if(!sd->profile.isEmpty()) { 787 if(!sd->profile.isEmpty()) {
787 QString basename = sd->directory; 788 QString basename = sd->directory;
788 int new_slsh = basename.findRev(Option::dir_sep); 789 int new_slsh = basename.findRev(Option::dir_sep);
789 if(new_slsh != -1) 790 if(new_slsh != -1)
790 basename = basename.mid(new_slsh+1); 791 basename = basename.mid(new_slsh+1);
791 if(sd->profile != basename + ".pro") 792 if(sd->profile != basename + ".pro")
792 sd->makefile += "." + sd->profile.left(sd->profile.length() - 4); //no need for the .pro 793 sd->makefile += "." + sd->profile.left(sd->profile.length() - 4); //no need for the .pro
793 } 794 }
794 sd->target = "sub-" + (*it); 795 sd->target = "sub-" + (*it);
795 sd->target.replace('/', '-'); 796 sd->target.replace('/', '-');
796 sd->target.replace('.', '_'); 797 sd->target.replace('.', '_');
797 } 798 }
798 } 799 }
799 QPtrListIterator<SubDir> it(subdirs); 800 QPtrListIterator<SubDir> it(subdirs);
800 801
801 QString ofile = Option::output.name(); 802 QString ofile = Option::output.name();
802 if(ofile.findRev(Option::dir_sep) != -1) 803 if(ofile.findRev(Option::dir_sep) != -1)
803 ofile = ofile.right(ofile.length() - ofile.findRev(Option::dir_sep) -1); 804 ofile = ofile.right(ofile.length() - ofile.findRev(Option::dir_sep) -1);
804 t << "MAKEFILE =" << var("MAKEFILE") << endl; 805 t << "MAKEFILE =" << var("MAKEFILE") << endl;
805 t << "QMAKE =" << var("QMAKE") << endl; 806 t << "QMAKE =" << var("QMAKE") << endl;
806 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 807 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
807 t << "SUBTARGETS ="; // subdirectory targets are sub-directory 808 t << "SUBTARGETS ="; // subdirectory targets are sub-directory
808 for( it.toFirst(); it.current(); ++it) 809 for( it.toFirst(); it.current(); ++it)
809 t << " \\\n\t\t" << it.current()->target; 810 t << " \\\n\t\t" << it.current()->target;
810 t << endl << endl; 811 t << endl << endl;
811 t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl; 812 t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl;
812 813
813 // generate target rules 814 // generate target rules
814 for( it.toFirst(); it.current(); ++it) { 815 for( it.toFirst(); it.current(); ++it) {
815 bool have_dir = !(*it)->directory.isEmpty(); 816 bool have_dir = !(*it)->directory.isEmpty();
816 QString mkfile = (*it)->makefile, out; 817 QString mkfile = (*it)->makefile, out;
817 if(have_dir) 818 if(have_dir)
818 mkfile.prepend((*it)->directory + Option::dir_sep); 819 mkfile.prepend((*it)->directory + Option::dir_sep);
819 if(direct || (*it)->makefile != "$(MAKEFILE)") 820 if(direct || (*it)->makefile != "$(MAKEFILE)")
820 out = " -o " + (*it)->makefile; 821 out = " -o " + (*it)->makefile;
821 //qmake it 822 //qmake it
822 t << mkfile << ": " << "\n\t"; 823 t << mkfile << ": " << "\n\t";
823 if(have_dir) 824 if(have_dir)
824 t << "cd " << (*it)->directory << " && "; 825 t << "cd " << (*it)->directory << " && ";
825 t << "$(QMAKE) " << (*it)->profile << buildArgs() << out << endl; 826 t << "$(QMAKE) " << (*it)->profile << buildArgs() << out << endl;
826 //actually compile 827 //actually compile
827 t << (*it)->target << ": " << mkfile << " FORCE" << "\n\t"; 828 t << (*it)->target << ": " << mkfile << " FORCE" << "\n\t";
828 if(have_dir) 829 if(have_dir)
829 t << "cd " << (*it)->directory << " && "; 830 t << "cd " << (*it)->directory << " && ";
830 t << "$(MAKE) -f " << (*it)->makefile << endl << endl; 831 t << "$(MAKE) -f " << (*it)->makefile << endl << endl;
831 } 832 }
832 833
833 if (project->isActiveConfig("ordered")) { // generate dependencies 834 if (project->isActiveConfig("ordered")) { // generate dependencies
834 for( it.toFirst(); it.current(); ) { 835 for( it.toFirst(); it.current(); ) {
835 QString tar = it.current()->target; 836 QString tar = it.current()->target;
836 ++it; 837 ++it;
837 if (it.current()) 838 if (it.current())
838 t << it.current()->target << ": " << tar << endl; 839 t << it.current()->target << ": " << tar << endl;
839 } 840 }
840 t << endl; 841 t << endl;
841 } 842 }
842 843
843 writeMakeQmake(t); 844 writeMakeQmake(t);
844 845
845 if(project->isEmpty("SUBDIRS")) { 846 if(project->isEmpty("SUBDIRS")) {
846 t << "all qmake_all distclean install uiclean mocclean clean: FORCE" << endl; 847 t << "all qmake_all distclean install uiclean mocclean clean: FORCE" << endl;
847 } else { 848 } else {
848 t << "all: $(SUBTARGETS)" << endl; 849 t << "all: $(SUBTARGETS)" << endl;
849 t << "qmake_all:"; 850 t << "qmake_all:";
850 for( it.toFirst(); it.current(); ++it) { 851 for( it.toFirst(); it.current(); ++it) {
851 t << " "; 852 t << " ";
852 if(!(*it)->directory.isEmpty()) 853 if(!(*it)->directory.isEmpty())
853 t << (*it)->directory << Option::dir_sep; 854 t << (*it)->directory << Option::dir_sep;
854 t << (*it)->makefile; 855 t << (*it)->makefile;
855 } 856 }
856 for( it.toFirst(); it.current(); ++it) { 857 for( it.toFirst(); it.current(); ++it) {
857 t << "\n\t ( "; 858 t << "\n\t ( ";
858 if(!(*it)->directory.isEmpty()) 859 if(!(*it)->directory.isEmpty())
859 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 860 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
860 t << "grep \"^qmake_all:\" " << (*it)->makefile 861 t << "grep \"^qmake_all:\" " << (*it)->makefile
861 << " && $(MAKE) -f " << (*it)->makefile << " qmake_all" << "; ) || true"; 862 << " && $(MAKE) -f " << (*it)->makefile << " qmake_all" << "; ) || true";
862 } 863 }
863 t << endl; 864 t << endl;
864 t << "clean uninstall install uiclean mocclean: qmake_all FORCE"; 865 t << "clean uninstall install uiclean mocclean: qmake_all FORCE";
865 for( it.toFirst(); it.current(); ++it) { 866 for( it.toFirst(); it.current(); ++it) {
866 t << "\n\t ( "; 867 t << "\n\t ( ";
867 if(!(*it)->directory.isEmpty()) 868 if(!(*it)->directory.isEmpty())
868 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 869 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
869 t << "$(MAKE) -f " << (*it)->makefile << " $@" << "; ) || true"; 870 t << "$(MAKE) -f " << (*it)->makefile << " $@" << "; ) || true";
870 } 871 }
871 t << endl; 872 t << endl;
872 t << "distclean: qmake_all FORCE"; 873 t << "distclean: qmake_all FORCE";
873 for( it.toFirst(); it.current(); ++it) { 874 for( it.toFirst(); it.current(); ++it) {
874 t << "\n\t ( "; 875 t << "\n\t ( ";
875 if(!(*it)->directory.isEmpty()) 876 if(!(*it)->directory.isEmpty())
876 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 877 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
877 t << "$(MAKE) -f " << (*it)->makefile << " $@; $(DEL_FILE) " << (*it)->makefile << "; ) || true"; 878 t << "$(MAKE) -f " << (*it)->makefile << " $@; $(DEL_FILE) " << (*it)->makefile << "; ) || true";
878 } 879 }
879 t << endl << endl; 880 t << endl << endl;
880 } 881 }
881 t <<"FORCE:" << endl << endl; 882 t <<"FORCE:" << endl << endl;
882} 883}
883 884
884void UnixMakefileGenerator::init2() 885void UnixMakefileGenerator::init2()
885{ 886{
886 //version handling 887 //version handling
887 if(project->variables()["VERSION"].isEmpty()) 888 if(project->variables()["VERSION"].isEmpty())
888 project->variables()["VERSION"].append("1.0." + 889 project->variables()["VERSION"].append("1.0." +
889 (project->isEmpty("VER_PAT") ? QString("0") : 890 (project->isEmpty("VER_PAT") ? QString("0") :
890 project->first("VER_PAT")) ); 891 project->first("VER_PAT")) );
891 QStringList l = QStringList::split('.', project->first("VERSION")); 892 QStringList l = QStringList::split('.', project->first("VERSION"));
892 l << "0" << "0"; //make sure there are three 893 l << "0" << "0"; //make sure there are three
893 project->variables()["VER_MAJ"].append(l[0]); 894 project->variables()["VER_MAJ"].append(l[0]);
894 project->variables()["VER_MIN"].append(l[1]); 895 project->variables()["VER_MIN"].append(l[1]);
895 project->variables()["VER_PAT"].append(l[2]); 896 project->variables()["VER_PAT"].append(l[2]);
896 897
897 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) { 898 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {
898#if 0 899#if 0
899 if ( project->isActiveConfig("dll") ) { 900 if ( project->isActiveConfig("dll") ) {
900 project->variables()["TARGET"] += project->variables()["TARGET.so"]; 901 project->variables()["TARGET"] += project->variables()["TARGET.so"];
901 if(project->variables()["QMAKE_LFLAGS_SHAPP"].isEmpty()) 902 if(project->variables()["QMAKE_LFLAGS_SHAPP"].isEmpty())
902 project->variables()["QMAKE_LFLAGS_SHAPP"] += project->variables()["QMAKE_LFLAGS_SHLIB"]; 903 project->variables()["QMAKE_LFLAGS_SHAPP"] += project->variables()["QMAKE_LFLAGS_SHLIB"];
903 if(!project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty()) 904 if(!project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty())
904 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET"); 905 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET");
905 } 906 }
906#endif 907#endif
907 project->variables()["TARGET"].first().prepend(project->first("DESTDIR")); 908 project->variables()["TARGET"].first().prepend(project->first("DESTDIR"));
908 } else if ( project->isActiveConfig("staticlib") ) { 909 } else if ( project->isActiveConfig("staticlib") ) {
909 project->variables()["TARGET"].first().prepend("lib"); 910 project->variables()["TARGET"].first().prepend("lib");
910 project->variables()["TARGET"].first() += ".a"; 911 project->variables()["TARGET"].first() += ".a";
911 if(project->variables()["QMAKE_AR_CMD"].isEmpty()) 912 if(project->variables()["QMAKE_AR_CMD"].isEmpty())
912 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)"); 913 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)");
913 } else { 914 } else {
914 project->variables()["TARGETA"].append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a"); 915 project->variables()["TARGETA"].append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a");
915 if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() ) 916 if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() )
916 project->variables()["QMAKE_AR_CMD"].first().replace("(TARGET)","(TARGETA)"); 917 project->variables()["QMAKE_AR_CMD"].first().replace("(TARGET)","(TARGETA)");
917 else 918 else
918 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)"); 919 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)");
919 QString os = project->variables()["QMAKESPEC"].first().section( '-', 0, 0 ); 920 QString os = project->variables()["QMAKESPEC"].first().section( '-', 0, 0 );
920 if( project->isActiveConfig("plugin") ) { 921 if( project->isActiveConfig("plugin") ) {
921 project->variables()["TARGET_x.y.z"].append("lib" + 922 project->variables()["TARGET_x.y.z"].append("lib" +
922 project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB")); 923 project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB"));
923 if(project->isActiveConfig("lib_version_first")) 924 if(project->isActiveConfig("lib_version_first"))
924 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 925 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
925 project->first("VER_MAJ") + "." + 926 project->first("VER_MAJ") + "." +
926 project->first("QMAKE_EXTENSION_SHLIB")); 927 project->first("QMAKE_EXTENSION_SHLIB"));
927 else 928 else
928 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 929 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
929 project->first("QMAKE_EXTENSION_SHLIB") + 930 project->first("QMAKE_EXTENSION_SHLIB") +
930 "." + project->first("VER_MAJ")); 931 "." + project->first("VER_MAJ"));
931 932
932 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; 933 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];
933 if(project->isActiveConfig("qt")) 934 if(project->isActiveConfig("qt"))
934 project->variables()["DEFINES"].append("QT_PLUGIN"); 935 project->variables()["DEFINES"].append("QT_PLUGIN");
935 } else if ( os == "hpux" ) { 936 } else if ( os == "hpux" ) {
936 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl"); 937 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl");
937 if(project->isActiveConfig("lib_version_first")) 938 if(project->isActiveConfig("lib_version_first"))
938 project->variables()["TARGET_x"].append("lib" + project->first("VER_MAJ") + "." + 939 project->variables()["TARGET_x"].append("lib" + project->first("VER_MAJ") + "." +
939 project->first("TARGET")); 940 project->first("TARGET"));
940 else 941 else
941 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 942 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
942 project->first("VER_MAJ")); 943 project->first("VER_MAJ"));
943 project->variables()["TARGET"] = project->variables()["TARGET_x"]; 944 project->variables()["TARGET"] = project->variables()["TARGET_x"];
944 } else if ( os == "aix" ) { 945 } else if ( os == "aix" ) {
945 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a"); 946 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a");
946 if(project->isActiveConfig("lib_version_first")) { 947 if(project->isActiveConfig("lib_version_first")) {
947 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 948 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
948 project->first("VER_MAJ") + "." + 949 project->first("VER_MAJ") + "." +
949 project->first("QMAKE_EXTENSION_SHLIB")); 950 project->first("QMAKE_EXTENSION_SHLIB"));
950 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 951 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
951 project->first("VER_MAJ") + 952 project->first("VER_MAJ") +
952 "." + project->first("VER_MIN") + "." + 953 "." + project->first("VER_MIN") + "." +
953 project->first("QMAKE_EXTENSION_SHLIB")); 954 project->first("QMAKE_EXTENSION_SHLIB"));
954 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + 955 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +
955 project->first("VER_MAJ") + "." + 956 project->first("VER_MAJ") + "." +
956 project->first("VER_MIN") + "." + 957 project->first("VER_MIN") + "." +
957 project->first("VER_PAT") + "." + 958 project->first("VER_PAT") + "." +
958 project->first("QMAKE_EXTENSION_SHLIB")); 959 project->first("QMAKE_EXTENSION_SHLIB"));
959 } else { 960 } else {
960 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 961 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
961 project->first("QMAKE_EXTENSION_SHLIB") + 962 project->first("QMAKE_EXTENSION_SHLIB") +
962 "." + project->first("VER_MAJ")); 963 "." + project->first("VER_MAJ"));
963 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 964 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
964 project->first("QMAKE_EXTENSION_SHLIB") + 965 project->first("QMAKE_EXTENSION_SHLIB") +
965 "." + project->first("VER_MAJ") + 966 "." + project->first("VER_MAJ") +
966 "." + project->first("VER_MIN")); 967 "." + project->first("VER_MIN"));
967 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + 968 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +
968 project->first("QMAKE_EXTENSION_SHLIB") + "." + 969 project->first("QMAKE_EXTENSION_SHLIB") + "." +
969 project->first("VER_MAJ") + "." + 970 project->first("VER_MAJ") + "." +
970 project->first("VER_MIN") + "." + 971 project->first("VER_MIN") + "." +
971 project->first("VER_PAT")); 972 project->first("VER_PAT"));
972 } 973 }
973 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; 974 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];
974 } else { 975 } else {
975 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + "." + 976 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + "." +
976 project->first("QMAKE_EXTENSION_SHLIB")); 977 project->first("QMAKE_EXTENSION_SHLIB"));
977 if(project->isActiveConfig("lib_version_first")) { 978 if(project->isActiveConfig("lib_version_first")) {
978 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 979 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
979 project->first("VER_MAJ") + "." + 980 project->first("VER_MAJ") + "." +
980 project->first("QMAKE_EXTENSION_SHLIB")); 981 project->first("QMAKE_EXTENSION_SHLIB"));
981 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 982 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
982 project->first("VER_MAJ") + 983 project->first("VER_MAJ") +
983 "." + project->first("VER_MIN") + "." + 984 "." + project->first("VER_MIN") + "." +
984 project->first("QMAKE_EXTENSION_SHLIB")); 985 project->first("QMAKE_EXTENSION_SHLIB"));
985 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + 986 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +
986 project->first("VER_MAJ") + "." + 987 project->first("VER_MAJ") + "." +
987 project->first("VER_MIN") + "." + 988 project->first("VER_MIN") + "." +
988 project->first("VER_PAT") + "." + 989 project->first("VER_PAT") + "." +
989 project->variables()["QMAKE_EXTENSION_SHLIB"].first()); 990 project->variables()["QMAKE_EXTENSION_SHLIB"].first());
990 } else { 991 } else {
991 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 992 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
992 project->first("QMAKE_EXTENSION_SHLIB") + 993 project->first("QMAKE_EXTENSION_SHLIB") +
993 "." + project->first("VER_MAJ")); 994 "." + project->first("VER_MAJ"));
994 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 995 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
995 project->first("QMAKE_EXTENSION_SHLIB") 996 project->first("QMAKE_EXTENSION_SHLIB")
996 + "." + project->first("VER_MAJ") + 997 + "." + project->first("VER_MAJ") +
997 "." + project->first("VER_MIN")); 998 "." + project->first("VER_MIN"));
998 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + 999 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") +
999 "." + 1000 "." +
1000 project->variables()[ 1001 project->variables()[
1001 "QMAKE_EXTENSION_SHLIB"].first() + "." + 1002 "QMAKE_EXTENSION_SHLIB"].first() + "." +
1002 project->first("VER_MAJ") + "." + 1003 project->first("VER_MAJ") + "." +
1003 project->first("VER_MIN") + "." + 1004 project->first("VER_MIN") + "." +
1004 project->first("VER_PAT")); 1005 project->first("VER_PAT"));
1005 } 1006 }