summaryrefslogtreecommitdiff
path: root/qmake/generators/unix/unixmake2.cpp
Unidiff
Diffstat (limited to 'qmake/generators/unix/unixmake2.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--qmake/generators/unix/unixmake2.cpp185
1 files changed, 122 insertions, 63 deletions
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index 9bb6f6b..7fbb9f4 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -58,106 +58,113 @@ UnixMakefileGenerator::writeMakefile(QTextStream &t)
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 );
85 84
86 t << "####### Compiler, tools and options" << endl << endl; 85 t << "####### Compiler, tools and options" << endl << endl;
87 t << "CC = "; 86 t << "CC = ";
88 if (project->isActiveConfig("thread") && 87 if (project->isActiveConfig("thread") &&
89 ! project->variables()["QMAKE_CC_THREAD"].isEmpty()) 88 ! project->variables()["QMAKE_CC_THREAD"].isEmpty())
90 t << var("QMAKE_CC_THREAD") << endl; 89 t << var("QMAKE_CC_THREAD") << endl;
91 else 90 else
92 t << var("QMAKE_CC") << endl; 91 t << var("QMAKE_CC") << endl;
93 92
94 t << "CXX = "; 93 t << "CXX = ";
95 if (project->isActiveConfig("thread") && 94 if (project->isActiveConfig("thread") &&
96 ! project->variables()["QMAKE_CXX_THREAD"].isEmpty()) 95 ! project->variables()["QMAKE_CXX_THREAD"].isEmpty())
97 t << var("QMAKE_CXX_THREAD") << endl; 96 t << var("QMAKE_CXX_THREAD") << endl;
98 else 97 else
99 t << var("QMAKE_CXX") << endl; 98 t << var("QMAKE_CXX") << endl;
100 99
101 t << "LEX = " << var("QMAKE_LEX") << endl; 100 t << "LEX = " << var("QMAKE_LEX") << endl;
102 t << "YACC = " << var("QMAKE_YACC") << endl; 101 t << "YACC = " << var("QMAKE_YACC") << endl;
103 t << "CFLAGS = " << var("QMAKE_CFLAGS") << " " 102 t << "CFLAGS = " << var("QMAKE_CFLAGS") << " "
104 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " " 103 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "
105 << varGlue("DEFINES","-D"," -D","") << endl; 104 << varGlue("DEFINES","-D"," -D","") << endl;
106 t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " " 105 t << "CXXFLAGS = " << var("QMAKE_CXXFLAGS") << " "
107 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " " 106 << varGlue("PRL_EXPORT_DEFINES","-D"," -D","") << " "
108 << varGlue("DEFINES","-D"," -D","") << endl; 107 << varGlue("DEFINES","-D"," -D","") << endl;
109 t << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl; 108 t << "LEXFLAGS = " << var("QMAKE_LEXFLAGS") << endl;
110 t << "YACCFLAGS= " << var("QMAKE_YACCFLAGS") << endl; 109 t << "YACCFLAGS= " << var("QMAKE_YACCFLAGS") << endl;
111 t << "INCPATH = " << varGlue("INCLUDEPATH","-I", " -I", "") << " -I" << specdir() << endl; 110 t << "INCPATH = " << "-I" << specdir();
111 if(!project->isActiveConfig("no_include_pwd")) {
112 QString pwd = fileFixify(QDir::currentDirPath());
113 if(pwd.isEmpty())
114 pwd = ".";
115 t << " -I" << pwd;
116 }
117 t << varGlue("INCLUDEPATH"," -I", " -I", "") << endl;
112 118
113 if(!project->isActiveConfig("staticlib")) { 119 if(!project->isActiveConfig("staticlib")) {
114 t << "LINK = "; 120 t << "LINK = ";
115 if (project->isActiveConfig("thread") && 121 if (project->isActiveConfig("thread") &&
116 ! project->variables()["QMAKE_LINK_THREAD"].isEmpty()) 122 ! project->variables()["QMAKE_LINK_THREAD"].isEmpty())
117 t << var("QMAKE_LINK_THREAD") << endl; 123 t << var("QMAKE_LINK_THREAD") << endl;
118 else 124 else
119 t << var("QMAKE_LINK") << endl; 125 t << var("QMAKE_LINK") << endl;
120 126
121 t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl; 127 t << "LFLAGS = " << var("QMAKE_LFLAGS") << endl;
122 t << "LIBS = " << "$(SUBLIBS) " << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl; 128 t << "LIBS = " << "$(SUBLIBS) " << var("QMAKE_LIBDIR_FLAGS") << " " << var("QMAKE_LIBS") << endl;
123 } 129 }
124 130
125 t << "AR = " << var("QMAKE_AR") << endl; 131 t << "AR = " << var("QMAKE_AR") << endl;
126 t << "RANLIB = " << var("QMAKE_RANLIB") << endl; 132 t << "RANLIB = " << var("QMAKE_RANLIB") << endl;
127 t << "MOC = " << var("QMAKE_MOC") << endl; 133 t << "MOC = " << var("QMAKE_MOC") << endl;
128 t << "UIC = "<< var("QMAKE_UIC") << endl; 134 t << "UIC = "<< var("QMAKE_UIC") << endl;
129 t << "QMAKE = "<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl; 135 t << "QMAKE = "<< (project->isEmpty("QMAKE_QMAKE") ? QString("qmake") : var("QMAKE_QMAKE")) << endl;
130 t << "TAR = "<< var("QMAKE_TAR") << endl; 136 t << "TAR = "<< var("QMAKE_TAR") << endl;
131 t << "GZIP = " << var("QMAKE_GZIP") << endl; 137 t << "GZIP = " << var("QMAKE_GZIP") << endl;
132 t << "COPY = " << var("QMAKE_COPY") << endl; 138 t << "COPY = " << var("QMAKE_COPY") << endl;
133 t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl; 139 t << "COPY_FILE= " << var("QMAKE_COPY_FILE") << endl;
134 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl; 140 t << "COPY_DIR = " << var("QMAKE_COPY_DIR") << endl;
135 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 141 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
136 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl; 142 t << "SYMLINK = " << var("QMAKE_SYMBOLIC_LINK") << endl;
137 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; 143 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl;
138 t << "MOVE = " << var("QMAKE_MOVE") << endl; 144 t << "MOVE = " << var("QMAKE_MOVE") << endl;
139 t << "PRO = " << fileFixify(project->projectFile() )<< endl; 145 t << "CHK_DIR_EXISTS= " << var("QMAKE_CHK_DIR_EXISTS") << endl;
146 t << "MKDIR = " << var("QMAKE_MKDIR") << endl;
140 t << endl; 147 t << endl;
141 148
142 t << "####### Output directory" << endl << endl; 149 t << "####### Output directory" << endl << endl;
143 if (! project->variables()["OBJECTS_DIR"].isEmpty()) 150 if (! project->variables()["OBJECTS_DIR"].isEmpty())
144 t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl; 151 t << "OBJECTS_DIR = " << var("OBJECTS_DIR") << endl;
145 else 152 else
146 t << "OBJECTS_DIR = ./" << endl; 153 t << "OBJECTS_DIR = ./" << endl;
147 t << endl; 154 t << endl;
148 155
149 /* files */ 156 /* files */
150 t << "####### Files" << endl << endl; 157 t << "####### Files" << endl << endl;
151 t << "HEADERS = " << varList("HEADERS") << endl; 158 t << "HEADERS = " << varList("HEADERS") << endl;
152 t << "SOURCES = " << varList("SOURCES") << endl; 159 t << "SOURCES = " << varList("SOURCES") << endl;
153 if(do_incremental) { 160 if(do_incremental) {
154 QStringList &objs = project->variables()["OBJECTS"], &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out; 161 QStringList &objs = project->variables()["OBJECTS"], &incrs = project->variables()["QMAKE_INCREMENTAL"], incrs_out;
155 t << "OBJECTS = "; 162 t << "OBJECTS = ";
156 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) { 163 for(QStringList::Iterator objit = objs.begin(); objit != objs.end(); ++objit) {
157 bool increment = FALSE; 164 bool increment = FALSE;
158 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) { 165 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {
159 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) { 166 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {
160 increment = TRUE; 167 increment = TRUE;
161 incrs_out.append((*objit)); 168 incrs_out.append((*objit));
162 break; 169 break;
163 } 170 }
@@ -191,98 +198,96 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
191 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) { 198 for(QStringList::Iterator incrit = incrs.begin(); incrit != incrs.end(); ++incrit) {
192 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) { 199 if((*objit).find(QRegExp((*incrit), TRUE, TRUE)) != -1) {
193 increment = TRUE; 200 increment = TRUE;
194 incrs_out.append((*objit)); 201 incrs_out.append((*objit));
195 break; 202 break;
196 } 203 }
197 } 204 }
198 if(!increment) 205 if(!increment)
199 t << "\\\n\t\t" << (*objit); 206 t << "\\\n\t\t" << (*objit);
200 } 207 }
201 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done! 208 if(incrs_out.count() == objs.count()) { //we just switched places, no real incrementals to be done!
202 t << incrs_out.join(" \\\n\t\t") << endl; 209 t << incrs_out.join(" \\\n\t\t") << endl;
203 } else if(!incrs_out.count()) { 210 } else if(!incrs_out.count()) {
204 t << endl; 211 t << endl;
205 } else { 212 } else {
206 moc_incremental = TRUE; 213 moc_incremental = TRUE;
207 t << endl; 214 t << endl;
208 t << "INCREMENTAL_OBJMOC = " << incrs_out.join(" \\\n\t\t") << endl; 215 t << "INCREMENTAL_OBJMOC = " << incrs_out.join(" \\\n\t\t") << endl;
209 } 216 }
210 } else { 217 } else {
211 t << "OBJMOC = " << objMoc << endl; 218 t << "OBJMOC = " << objMoc << endl;
212 } 219 }
213 if(do_incremental && !moc_incremental && !src_incremental) 220 if(do_incremental && !moc_incremental && !src_incremental)
214 do_incremental = FALSE; 221 do_incremental = FALSE;
215 t << "DIST = " << varList("DISTFILES") << endl; 222 t << "DIST = " << valList(fileFixify(project->variables()["DISTFILES"])) << endl;
216 t << "PRO = " << fileFixify(project->projectFile()) << endl;
217 t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl; 223 t << "QMAKE_TARGET = " << var("QMAKE_ORIG_TARGET") << endl;
218 t << "DESTDIR = " << var("DESTDIR") << endl; 224 t << "DESTDIR = " << var("DESTDIR") << endl;
219 t << "TARGET = " << var("TARGET") << endl; 225 t << "TARGET = " << var("TARGET") << endl;
220 if(project->isActiveConfig("plugin") ) { 226 if(project->isActiveConfig("plugin") ) {
221 t << "TARGETD = " << var("TARGET") << endl; 227 t << "TARGETD = " << var("TARGET") << endl;
222 } else if (!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty()) { 228 } else if (!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty()) {
223 t << "TARGETA= " << var("TARGETA") << endl; 229 t << "TARGETA= " << var("TARGETA") << endl;
224 if (os == "hpux") { 230 if (project->isEmpty("QMAKE_HPUX_SHLIB")) {
225 t << "TARGETD= " << var("TARGET_x") << endl;
226 t << "TARGET0= " << var("TARGET_") << endl;
227 }
228 else {
229 t << "TARGETD= " << var("TARGET_x.y.z") << endl; 231 t << "TARGETD= " << var("TARGET_x.y.z") << endl;
230 t << "TARGET0= " << var("TARGET_") << endl; 232 t << "TARGET0= " << var("TARGET_") << endl;
231 t << "TARGET1= " << var("TARGET_x") << endl; 233 t << "TARGET1= " << var("TARGET_x") << endl;
232 t << "TARGET2= " << var("TARGET_x.y") << endl; 234 t << "TARGET2= " << var("TARGET_x.y") << endl;
235 } else {
236 t << "TARGETD= " << var("TARGET_x") << endl;
237 t << "TARGET0= " << var("TARGET_") << endl;
233 } 238 }
234 } 239 }
235 t << endl; 240 t << endl;
236 241
237 // blasted incldues 242 // blasted incldues
238 QStringList &qeui = project->variables()["QMAKE_EXTRA_UNIX_INCLUDES"]; 243 QStringList &qeui = project->variables()["QMAKE_EXTRA_UNIX_INCLUDES"];
239 QStringList::Iterator it; 244 QStringList::Iterator it;
240 for( it = qeui.begin(); it != qeui.end(); ++it) 245 for( it = qeui.begin(); it != qeui.end(); ++it)
241 t << "include " << (*it) << endl; 246 t << "include " << (*it) << endl;
242 247
243 /* rules */ 248 /* rules */
244 t << "first: all" << endl; 249 t << "first: all" << endl;
245 t << "####### Implicit rules" << endl << endl; 250 t << "####### Implicit rules" << endl << endl;
246 t << ".SUFFIXES: .c"; 251 t << ".SUFFIXES: .c";
247 QStringList::Iterator cppit; 252 QStringList::Iterator cppit;
248 for(cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) 253 for(cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit)
249 t << " " << (*cppit); 254 t << " " << (*cppit);
250 t << endl << endl; 255 t << endl << endl;
251 for(cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit) 256 for(cppit = Option::cpp_ext.begin(); cppit != Option::cpp_ext.end(); ++cppit)
252 t << (*cppit) << ".o:\n\t" << var("QMAKE_RUN_CXX_IMP") << endl << endl; 257 t << (*cppit) << ".o:\n\t" << var("QMAKE_RUN_CXX_IMP") << endl << endl;
253 t << ".c.o:\n\t" << var("QMAKE_RUN_CC_IMP") << endl << endl; 258 t << ".c.o:\n\t" << var("QMAKE_RUN_CC_IMP") << endl << endl;
254 259
255 if(include_deps) { 260 if(include_deps) {
256 QString cmd=var("QMAKE_CFLAGS_DEPS") + " "; 261 QString cmd=var("QMAKE_CFLAGS_DEPS") + " ";
257 cmd += varGlue("DEFINES","-D"," -D","") + varGlue("PRL_EXPORT_DEFINES"," -D"," -D",""); 262 cmd += varGlue("DEFINES","-D"," -D","") + varGlue("PRL_EXPORT_DEFINES"," -D"," -D","");
258 if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH")) 263 if(!project->isEmpty("QMAKE_ABSOLUTE_SOURCE_PATH"))
259 cmd += " -I" + project->first("QMAKE_ABSOLUTE_SOURCE_PATH") + " "; 264 cmd += " -I" + project->first("QMAKE_ABSOLUTE_SOURCE_PATH") + " ";
260 cmd += " $(INCPATH) " + varGlue("DEPENDPATH", "-I", " -I", ""); 265 cmd += " $(INCPATH) " + varGlue("DEPENDPATH", "-I", " -I", "");
261 QString odir; 266 QString odir;
262 if(!project->variables()["OBJECTS_DIR"].isEmpty()) 267 if(!project->variables()["OBJECTS_DIR"].isEmpty())
263 odir = project->first("OBJECTS_DIR"); 268 odir = project->first("OBJECTS_DIR");
264 t << "###### Dependancies" << endl << endl; 269 t << "###### Dependencies" << endl << endl;
265 t << odir << ".deps/%.d: %.cpp\n\t" 270 t << odir << ".deps/%.d: %.cpp\n\t"
266 << "@echo Creating depend for $<" << "\n\t" 271 << "@echo Creating depend for $<" << "\n\t"
267 << "@test -d $(@D) || mkdir -p $(@D)" << "\n\t" 272 << "@test -d $(@D) || mkdir -p $(@D)" << "\n\t"
268 << "@$(CXX) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@" << endl << endl; 273 << "@$(CXX) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@" << endl << endl;
269 274
270 t << odir << ".deps/%.d: %.c\n\t" 275 t << odir << ".deps/%.d: %.c\n\t"
271 << "@echo Creating depend for $<" << "\n\t" 276 << "@echo Creating depend for $<" << "\n\t"
272 << "@test -d $(@D) || mkdir -p $(@D)" << "\n\t" 277 << "@test -d $(@D) || mkdir -p $(@D)" << "\n\t"
273 << "@$(CC) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@" << endl << endl; 278 << "@$(CC) " << cmd << " $< | sed \"s,^\\($(*F).o\\):," << odir << "\\1:,g\" >$@" << endl << endl;
274 279
275 280
276 QString src[] = { "SOURCES", "UICIMPLS", "SRCMOC", QString::null }; 281 QString src[] = { "SOURCES", "UICIMPLS", "SRCMOC", QString::null };
277 for(int x = 0; !src[x].isNull(); x++) { 282 for(int x = 0; !src[x].isNull(); x++) {
278 QStringList &l = project->variables()[src[x]]; 283 QStringList &l = project->variables()[src[x]];
279 for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) { 284 for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
280 if(!(*it).isEmpty()) { 285 if(!(*it).isEmpty()) {
281 QString d_file; 286 QString d_file;
282 if((*it).endsWith(".c")) { 287 if((*it).endsWith(".c")) {
283 d_file = (*it).left((*it).length() - 2); 288 d_file = (*it).left((*it).length() - 2);
284 } else { 289 } else {
285 for(QStringList::Iterator cppit = Option::cpp_ext.begin(); 290 for(QStringList::Iterator cppit = Option::cpp_ext.begin();
286 cppit != Option::cpp_ext.end(); ++cppit) { 291 cppit != Option::cpp_ext.end(); ++cppit) {
287 if((*it).endsWith((*cppit))) { 292 if((*it).endsWith((*cppit))) {
288 d_file = (*it).left((*it).length() - (*cppit).length()); 293 d_file = (*it).left((*it).length() - (*cppit).length());
@@ -365,62 +370,64 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
365 if(!destdir.isEmpty()) 370 if(!destdir.isEmpty())
366 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 371 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
367 t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir << 372 t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir <<
368 " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << endl; 373 " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << endl;
369 //communicated below 374 //communicated below
370 if(!destdir.isEmpty()) { 375 if(!destdir.isEmpty()) {
371 if(!incr_objs.isEmpty()) 376 if(!incr_objs.isEmpty())
372 incr_objs += " "; 377 incr_objs += " ";
373 incr_objs += "-L" + destdir; 378 incr_objs += "-L" + destdir;
374 } else { 379 } else {
375 if(!incr_objs.isEmpty()) 380 if(!incr_objs.isEmpty())
376 incr_objs += " "; 381 incr_objs += " ";
377 incr_objs += "-L" + QDir::currentDirPath(); 382 incr_objs += "-L" + QDir::currentDirPath();
378 } 383 }
379 if(!incr_objs.isEmpty()) 384 if(!incr_objs.isEmpty())
380 incr_objs += " "; 385 incr_objs += " ";
381 incr_objs += " -l" + incr_target; 386 incr_objs += " -l" + incr_target;
382 deps.prepend(incr_target_dir + " "); 387 deps.prepend(incr_target_dir + " ");
383 incr_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)"; 388 incr_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)";
384 } 389 }
385 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << "$(TARGET)" 390 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << "$(TARGET)"
386 << endl << endl; 391 << endl << endl;
387 392
388 //real target 393 //real target
389 t << var("TARGET") << ": " << " " << incr_deps << " " << var("TARGETDEPS") << "\n\t"; 394 t << var("TARGET") << ": " << var("PRE_TARGETDEPS") << " " << incr_deps
395 << " " << var("POST_TARGETDEPS") << "\n\t";
390 if(!destdir.isEmpty()) 396 if(!destdir.isEmpty())
391 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 397 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
392 if(!project->isEmpty("QMAKE_PRE_LINK")) 398 if(!project->isEmpty("QMAKE_PRE_LINK"))
393 t << var("QMAKE_PRE_LINK") << "\n\t"; 399 t << var("QMAKE_PRE_LINK") << "\n\t";
394 t << "$(LINK) $(LFLAGS) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(LIBS)"; 400 t << "$(LINK) $(LFLAGS) -o $(TARGET) " << incr_deps << " " << incr_objs << " $(LIBS)";
395 if(!project->isEmpty("QMAKE_POST_LINK")) 401 if(!project->isEmpty("QMAKE_POST_LINK"))
396 t << "\n\t" << var("QMAKE_POST_LINK"); 402 t << "\n\t" << var("QMAKE_POST_LINK");
397 t << endl << endl; 403 t << endl << endl;
398 } else { 404 } else {
399 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << "$(TARGET)" 405 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << "$(TARGET)"
400 << endl << endl; 406 << endl << endl;
401 407
402 t << "$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) " << var("TARGETDEPS") << "\n\t"; 408 t << "$(TARGET): " << var("PRE_TARGETDEPS") << " $(UICDECLS) $(OBJECTS) $(OBJMOC) "
409 << var("POST_TARGETDEPS") << "\n\t";
403 if(!destdir.isEmpty()) 410 if(!destdir.isEmpty())
404 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 411 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
405 if(!project->isEmpty("QMAKE_PRE_LINK")) 412 if(!project->isEmpty("QMAKE_PRE_LINK"))
406 t << var("QMAKE_PRE_LINK") << "\n\t"; 413 t << var("QMAKE_PRE_LINK") << "\n\t";
407 t << "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)"; 414 t << "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)";
408 if(!project->isEmpty("QMAKE_POST_LINK")) 415 if(!project->isEmpty("QMAKE_POST_LINK"))
409 t << "\n\t" << var("QMAKE_POST_LINK"); 416 t << "\n\t" << var("QMAKE_POST_LINK");
410 t << endl << endl; 417 t << endl << endl;
411 } 418 }
412 } else if(!project->isActiveConfig("staticlib")) { 419 } else if(!project->isActiveConfig("staticlib")) {
413 QString destdir = project->first("DESTDIR"), incr_deps; 420 QString destdir = project->first("DESTDIR"), incr_deps;
414 if(do_incremental) { 421 if(do_incremental) {
415 QString s_ext = project->variables()["QMAKE_EXTENSION_SHLIB"].first(); 422 QString s_ext = project->variables()["QMAKE_EXTENSION_SHLIB"].first();
416 QString incr_target = var("QMAKE_ORIG_TARGET").replace( 423 QString incr_target = var("QMAKE_ORIG_TARGET").replace(
417 QRegExp("\\." + s_ext), "").replace(QRegExp("^lib"), "") + "_incremental"; 424 QRegExp("\\." + s_ext), "").replace(QRegExp("^lib"), "") + "_incremental";
418 if(incr_target.find(Option::dir_sep) != -1) 425 if(incr_target.find(Option::dir_sep) != -1)
419 incr_target = incr_target.right(incr_target.length() - 426 incr_target = incr_target.right(incr_target.length() -
420 (incr_target.findRev(Option::dir_sep) + 1)); 427 (incr_target.findRev(Option::dir_sep) + 1));
421 428
422 if(project->first("QMAKE_INCREMENTAL_STYLE") == "ld") { 429 if(project->first("QMAKE_INCREMENTAL_STYLE") == "ld") {
423 QString incr_target_dir = var("OBJECTS_DIR") + incr_target + Option::obj_ext; 430 QString incr_target_dir = var("OBJECTS_DIR") + incr_target + Option::obj_ext;
424 //actual target 431 //actual target
425 const QString link_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)"; 432 const QString link_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)";
426 t << incr_target_dir << ": " << link_deps << "\n\t" 433 t << incr_target_dir << ": " << link_deps << "\n\t"
@@ -439,300 +446,344 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
439 if(!project->isEmpty("QMAKE_LFLAGS_INCREMENTAL")) 446 if(!project->isEmpty("QMAKE_LFLAGS_INCREMENTAL"))
440 incr_lflags += var("QMAKE_LFLAGS_INCREMENTAL") + " "; 447 incr_lflags += var("QMAKE_LFLAGS_INCREMENTAL") + " ";
441 if(project->isActiveConfig("debug")) 448 if(project->isActiveConfig("debug"))
442 incr_lflags += var("QMAKE_LFLAGS_DEBUG"); 449 incr_lflags += var("QMAKE_LFLAGS_DEBUG");
443 else 450 else
444 incr_lflags += var("QMAKE_LFLAGS_RELEASE"); 451 incr_lflags += var("QMAKE_LFLAGS_RELEASE");
445 t << incr_target_dir << ": $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << "\n\t"; 452 t << incr_target_dir << ": $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << "\n\t";
446 if(!destdir.isEmpty()) 453 if(!destdir.isEmpty())
447 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 454 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
448 t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir << 455 t << "$(LINK) " << incr_lflags << " -o "<< incr_target_dir <<
449 " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << endl; 456 " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)" << endl;
450 //communicated below 457 //communicated below
451 QStringList &cmd = project->variables()["QMAKE_LINK_SHLIB_CMD"]; 458 QStringList &cmd = project->variables()["QMAKE_LINK_SHLIB_CMD"];
452 if(!destdir.isEmpty()) 459 if(!destdir.isEmpty())
453 cmd.append(" -L" + destdir); 460 cmd.append(" -L" + destdir);
454 cmd.append(" -l" + incr_target); 461 cmd.append(" -l" + incr_target);
455 deps.prepend(incr_target_dir + " "); 462 deps.prepend(incr_target_dir + " ");
456 incr_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)"; 463 incr_deps = "$(UICDECLS) $(OBJECTS) $(OBJMOC)";
457 } 464 }
458 465
459 t << "all: " << " " << deps << " " << varGlue("ALL_DEPS",""," ","") 466 t << "all: " << " " << deps << " " << varGlue("ALL_DEPS",""," ","")
460 << " " << var("DESTDIR_TARGET") << endl << endl; 467 << " " << var("DESTDIR_TARGET") << endl << endl;
461 468
462 //real target 469 //real target
463 t << var("DESTDIR_TARGET") << ": " << incr_deps << " $(SUBLIBS) " << 470 t << var("DESTDIR_TARGET") << ": " << var("PRE_TARGETDEPS") << " "
464 var("TARGETDEPS"); 471 << incr_deps << " $(SUBLIBS) " << var("POST_TARGETDEPS");
465 } else { 472 } else {
466 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," ","") << " " << 473 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," ","") << " " <<
467 var("DESTDIR_TARGET") << endl << endl; 474 var("DESTDIR_TARGET") << endl << endl;
468 t << var("DESTDIR_TARGET") << ": $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS) " << 475 t << var("DESTDIR_TARGET") << ": " << var("PRE_TARGETDEPS")
469 var("TARGETDEPS"); 476 << " $(UICDECLS) $(OBJECTS) $(OBJMOC) $(SUBLIBS) " << var("POST_TARGETDEPS");
470 } 477 }
471 if(!destdir.isEmpty()) 478 if(!destdir.isEmpty())
472 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir; 479 t << "\n\t" << "test -d " << destdir << " || mkdir -p " << destdir;
473 if(!project->isEmpty("QMAKE_PRE_LINK")) 480 if(!project->isEmpty("QMAKE_PRE_LINK"))
474 t << "\n\t" << var("QMAKE_PRE_LINK"); 481 t << "\n\t" << var("QMAKE_PRE_LINK");
475 482
476 if(project->isActiveConfig("plugin")) { 483 if(project->isActiveConfig("plugin")) {
477 t << "\n\t" 484 t << "\n\t"
478 << "-$(DEL_FILE) $(TARGET)" << "\n\t" 485 << "-$(DEL_FILE) $(TARGET)" << "\n\t"
479 << var("QMAKE_LINK_SHLIB_CMD"); 486 << var("QMAKE_LINK_SHLIB_CMD");
480 if(!destdir.isEmpty()) 487 if(!destdir.isEmpty())
481 t << "\n\t" 488 t << "\n\t"
482 << "-$(MOVE) $(TARGET) " << var("DESTDIR"); 489 << "-$(MOVE) $(TARGET) " << var("DESTDIR");
483 if(!project->isEmpty("QMAKE_POST_LINK")) 490 if(!project->isEmpty("QMAKE_POST_LINK"))
484 t << "\n\t" << var("QMAKE_POST_LINK") << "\n\t"; 491 t << "\n\t" << var("QMAKE_POST_LINK") << "\n\t";
485 t << endl << endl; 492 t << endl << endl;
486 } else if ( os == "hpux" ) { 493 } else if(project->isEmpty("QMAKE_HPUX_SHLIB")) {
487 t << "\n\t"
488 << "-$(DEL_FILE) $(TARGET) $(TARGET0)" << "\n\t"
489 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
490 t << varGlue("QMAKE_LN_SHLIB",""," "," $(TARGET) $(TARGET0)");
491 if(!destdir.isEmpty())
492 t << "\n\t"
493 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t"
494 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t"
495 << "-$(MOVE) $(TARGET) $(TARGET0) " << var("DESTDIR");
496 if(!project->isEmpty("QMAKE_POST_LINK"))
497 t << "\n\t" << var("QMAKE_POST_LINK");
498 t << endl << endl;
499 } else {
500 t << "\n\t" 494 t << "\n\t"
501 << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)" << "\n\t" 495 << "-$(DEL_FILE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2)" << "\n\t"
502 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t"; 496 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
503 t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t" 497 t << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET0)") << "\n\t"
504 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t" 498 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET1)") << "\n\t"
505 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)"); 499 << varGlue("QMAKE_LN_SHLIB","-"," "," $(TARGET) $(TARGET2)");
506 if(!destdir.isEmpty()) 500 if(!destdir.isEmpty())
507 t << "\n\t" 501 t << "\n\t"
508 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t" 502 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t"
509 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t" 503 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t"
510 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET1)\n\t" 504 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET1)\n\t"
511 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET2)\n\t" 505 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET2)\n\t"
512 << "-$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) " << var("DESTDIR"); 506 << "-$(MOVE) $(TARGET) $(TARGET0) $(TARGET1) $(TARGET2) " << var("DESTDIR");
513 if(!project->isEmpty("QMAKE_POST_LINK")) 507 if(!project->isEmpty("QMAKE_POST_LINK"))
514 t << "\n\t" << var("QMAKE_POST_LINK"); 508 t << "\n\t" << var("QMAKE_POST_LINK");
515 t << endl << endl; 509 t << endl << endl;
510 } else {
511 t << "\n\t"
512 << "-$(DEL_FILE) $(TARGET) $(TARGET0)" << "\n\t"
513 << var("QMAKE_LINK_SHLIB_CMD") << "\n\t";
514 t << varGlue("QMAKE_LN_SHLIB",""," "," $(TARGET) $(TARGET0)");
515 if(!destdir.isEmpty())
516 t << "\n\t"
517 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)\n\t"
518 << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET0)\n\t"
519 << "-$(MOVE) $(TARGET) $(TARGET0) " << var("DESTDIR");
520 if(!project->isEmpty("QMAKE_POST_LINK"))
521 t << "\n\t" << var("QMAKE_POST_LINK");
522 t << endl << endl;
516 } 523 }
517 t << endl << endl; 524 t << endl << endl;
518 525
519 if (! project->isActiveConfig("plugin")) { 526 if (! project->isActiveConfig("plugin")) {
520 t << "staticlib: $(TARGETA)" << endl << endl; 527 t << "staticlib: $(TARGETA)" << endl << endl;
521 t << "$(TARGETA): $(UICDECLS) $(OBJECTS) $(OBJMOC)"; 528 t << "$(TARGETA): " << var("PRE_TARGETDEPS") << " $(UICDECLS) $(OBJECTS) $(OBJMOC)";
522 if(do_incremental) 529 if(do_incremental)
523 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)"; 530 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)";
524 t << var("TARGETDEPS") << "\n\t" 531 t << var("POST_TARGETDEPS") << "\n\t"
525 << "-$(DEL_FILE) $(TARGETA) " << "\n\t" 532 << "-$(DEL_FILE) $(TARGETA) " << "\n\t"
526 << var("QMAKE_AR_CMD"); 533 << var("QMAKE_AR_CMD");
527 if(do_incremental) 534 if(do_incremental)
528 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)"; 535 t << " $(INCREMENTAL_OBJECTS) $(INCREMENTAL_OBJMOC)";
529 if(!project->isEmpty("QMAKE_RANLIB")) 536 if(!project->isEmpty("QMAKE_RANLIB"))
530 t << "\n\t" << "$(RANLIB) $(TARGETA)"; 537 t << "\n\t" << "$(RANLIB) $(TARGETA)";
531 t << endl << endl; 538 t << endl << endl;
532 } 539 }
533 } else { 540 } else {
534 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << var("DESTDIR") << "$(TARGET) " 541 t << "all: " << deps << " " << varGlue("ALL_DEPS",""," "," ") << var("DESTDIR") << "$(TARGET) "
535 << varGlue("QMAKE_AR_SUBLIBS", var("DESTDIR"), " " + var("DESTDIR"), "") << "\n\n" 542 << varGlue("QMAKE_AR_SUBLIBS", var("DESTDIR"), " " + var("DESTDIR"), "") << "\n\n"
536 << "staticlib: " << var("DESTDIR") << "$(TARGET)" << "\n\n"; 543 << "staticlib: " << var("DESTDIR") << "$(TARGET)" << "\n\n";
537 if(project->isEmpty("QMAKE_AR_SUBLIBS")) { 544 if(project->isEmpty("QMAKE_AR_SUBLIBS")) {
538 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) $(OBJECTS) $(OBJMOC) $(TARGETDEPS) " << "\n\t"; 545 t << var("DESTDIR") << "$(TARGET): " << var("PRE_TARGETDEPS")
546 << " $(UICDECLS) $(OBJECTS) $(OBJMOC) " << var("POST_TARGETDEPS") << "\n\t";
539 if(!project->isEmpty("DESTDIR")) { 547 if(!project->isEmpty("DESTDIR")) {
540 QString destdir = project->first("DESTDIR"); 548 QString destdir = project->first("DESTDIR");
541 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 549 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
542 } 550 }
543 t << "-$(DEL_FILE) $(TARGET)" << "\n\t" 551 t << "-$(DEL_FILE) $(TARGET)" << "\n\t"
544 << var("QMAKE_AR_CMD") << "\n"; 552 << var("QMAKE_AR_CMD") << "\n";
545 if(!project->isEmpty("QMAKE_POST_LINK")) 553 if(!project->isEmpty("QMAKE_POST_LINK"))
546 t << "\t" << var("QMAKE_POST_LINK") << "\n"; 554 t << "\t" << var("QMAKE_POST_LINK") << "\n";
547 if(!project->isEmpty("QMAKE_RANLIB")) 555 if(!project->isEmpty("QMAKE_RANLIB"))
548 t << "\t" << "$(RANLIB) $(TARGET)" << "\n"; 556 t << "\t" << "$(RANLIB) $(TARGET)" << "\n";
549 if(!project->isEmpty("DESTDIR")) 557 if(!project->isEmpty("DESTDIR"))
550 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)" << "\n" 558 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << "$(TARGET)" << "\n"
551 << "\t" << "-$(MOVE) $(TARGET) " << var("DESTDIR") << "\n"; 559 << "\t" << "-$(MOVE) $(TARGET) " << var("DESTDIR") << "\n";
552 } else { 560 } else {
553 int cnt = 0, max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt(); 561 int max_files = project->first("QMAKE_MAX_FILES_PER_AR").toInt();
554 QStringList objs = project->variables()["OBJECTS"] + project->variables()["OBJMOC"], 562 QStringList objs = project->variables()["OBJECTS"] + project->variables()["OBJMOC"],
555 libs = project->variables()["QMAKE_AR_SUBLIBS"]; 563 libs = project->variables()["QMAKE_AR_SUBLIBS"];
556 libs.prepend("$(TARGET)"); 564 libs.prepend("$(TARGET)");
557 for(QStringList::Iterator libit = libs.begin(), objit = objs.begin(); 565 for(QStringList::Iterator libit = libs.begin(), objit = objs.begin();
558 libit != libs.end(); ++libit) { 566 libit != libs.end(); ++libit) {
559 QStringList build; 567 QStringList build;
560 for(cnt = 0; cnt < max_files && objit != objs.end(); ++objit, cnt++) 568 for(int cnt = 0; cnt < max_files && objit != objs.end(); ++objit, cnt++)
561 build << (*objit); 569 build << (*objit);
562 QString ar; 570 QString ar;
563 if((*libit) == "$(TARGET)") { 571 if((*libit) == "$(TARGET)") {
564 t << var("DESTDIR") << "$(TARGET): $(UICDECLS) " << " $(TARGETDEPS) " 572 t << var("DESTDIR") << "$(TARGET): " << var("PRE_TARGETDEPS")
565 << valList(build) << "\n\t"; 573 << " $(UICDECLS) " << var("POST_TARGETDEPS") << valList(build) << "\n\t";
566 ar = project->variables()["QMAKE_AR_CMD"].first(); 574 ar = project->variables()["QMAKE_AR_CMD"].first();
567 ar = ar.replace("$(OBJMOC)", "").replace("$(OBJECTS)", 575 ar = ar.replace("$(OBJMOC)", "").replace("$(OBJECTS)",
568 build.join(" ")); 576 build.join(" "));
569 } else { 577 } else {
570 t << (*libit) << ": " << valList(build) << "\n\t"; 578 t << (*libit) << ": " << valList(build) << "\n\t";
571 ar = "$(AR) " + (*libit) + " " + build.join(" "); 579 ar = "$(AR) " + (*libit) + " " + build.join(" ");
572 } 580 }
573 if(!project->isEmpty("DESTDIR")) { 581 if(!project->isEmpty("DESTDIR")) {
574 QString destdir = project->first("DESTDIR"); 582 QString destdir = project->first("DESTDIR");
575 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 583 t << "test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
576 } 584 }
577 t << "-$(DEL_FILE) " << (*libit) << "\n\t" 585 t << "-$(DEL_FILE) " << (*libit) << "\n\t"
578 << ar << "\n"; 586 << ar << "\n";
579 if(!project->isEmpty("QMAKE_POST_LINK")) 587 if(!project->isEmpty("QMAKE_POST_LINK"))
580 t << "\t" << var("QMAKE_POST_LINK") << "\n"; 588 t << "\t" << var("QMAKE_POST_LINK") << "\n";
581 if(!project->isEmpty("QMAKE_RANLIB")) 589 if(!project->isEmpty("QMAKE_RANLIB"))
582 t << "\t" << "$(RANLIB) " << (*libit) << "\n"; 590 t << "\t" << "$(RANLIB) " << (*libit) << "\n";
583 if(!project->isEmpty("DESTDIR")) 591 if(!project->isEmpty("DESTDIR"))
584 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << (*libit) << "\n" 592 t << "\t" << "-$(DEL_FILE) " << var("DESTDIR") << (*libit) << "\n"
585 << "\t" << "-$(MOVE) " << (*libit) << " " << var("DESTDIR") << "\n"; 593 << "\t" << "-$(MOVE) " << (*libit) << " " << var("DESTDIR") << "\n";
586 } 594 }
587 } 595 }
588 t << endl << endl; 596 t << endl << endl;
589 } 597 }
590 598
591 t << "mocables: $(SRCMOC)" << endl << endl; 599 t << "mocables: $(SRCMOC)" << endl << endl;
592 600
593 if(!project->isActiveConfig("no_mocdepend")) { 601 if(!project->isActiveConfig("no_mocdepend")) {
594 //this is an implicity depend on moc, so it will be built if necesary, however 602 //this is an implicity depend on moc, so it will be built if necesary, however
595 //moc itself shouldn't have this dependancy - this is a little kludgy but it is 603 //moc itself shouldn't have this dependency - this is a little kludgy but it is
596 //better than the alternative for now. 604 //better than the alternative for now.
597 QString moc = project->first("QMAKE_MOC"), target = project->first("TARGET"); 605 QString moc = project->first("QMAKE_MOC"), target = project->first("TARGET");
598 fixEnvVariables(target); 606 fixEnvVariables(target);
599 fixEnvVariables(moc); 607 fixEnvVariables(moc);
600 if(target != moc) 608 if(target != moc)
601 t << "$(MOC): \n\t" 609 t << "$(MOC): \n\t"
602 << "( cd $(QTDIR)/src/moc ; $(MAKE) )" << endl << endl; 610 << "( cd $(QTDIR)/src/moc ; $(MAKE) )" << endl << endl;
603 } 611 }
604 612
605 writeMakeQmake(t); 613 writeMakeQmake(t);
606 614
607 if(!project->first("QMAKE_PKGINFO").isEmpty()) { 615 if(!project->first("QMAKE_PKGINFO").isEmpty()) {
608 QString pkginfo = project->first("QMAKE_PKGINFO"); 616 QString pkginfo = project->first("QMAKE_PKGINFO");
609 QString destdir = project->first("DESTDIR"); 617 QString destdir = project->first("DESTDIR");
610 t << pkginfo << ": " << "\n\t"; 618 t << pkginfo << ": " << "\n\t";
611 if(!destdir.isEmpty()) 619 if(!destdir.isEmpty())
612 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 620 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
613 t << "@$(DEL_FILE) " << pkginfo << "\n\t" 621 t << "@$(DEL_FILE) " << pkginfo << "\n\t"
614 << "@echo \"APPL????\" >" << pkginfo << endl; 622 << "@echo \"APPL????\" >" << pkginfo << endl;
615 } 623 }
616 if(!project->first("QMAKE_INFO_PLIST").isEmpty()) { 624 if(!project->first("QMAKE_INFO_PLIST").isEmpty()) {
617 QString info_plist = project->first("QMAKE_INFO_PLIST"), 625 QString info_plist = project->first("QMAKE_INFO_PLIST"),
618 info_plist_out = project->first("QMAKE_INFO_PLIST_OUT"); 626 info_plist_out = project->first("QMAKE_INFO_PLIST_OUT");
619 QString destdir = project->first("DESTDIR"); 627 QString destdir = project->first("DESTDIR");
620 t << info_plist_out << ": " << "\n\t"; 628 t << info_plist_out << ": " << "\n\t";
621 if(!destdir.isEmpty()) 629 if(!destdir.isEmpty())
622 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t"; 630 t << "@test -d " << destdir << " || mkdir -p " << destdir << "\n\t";
623 t << "@$(DEL_FILE) " << info_plist_out << "\n\t" 631 t << "@$(DEL_FILE) " << info_plist_out << "\n\t"
624 << "@cp \"" << info_plist << "\" \"" << info_plist_out << "\"" << endl; 632 << "@cp \"" << info_plist << "\" \"" << info_plist_out << "\"" << endl;
625 if(!project->first("RC_FILE").isEmpty()) { 633 if(!project->first("RC_FILE").isEmpty()) {
626 QString dir = destdir + "../Resources/"; 634 QString dir = destdir + "../Resources/";
627 t << dir << "application.icns:" << "\n\t" 635 t << dir << "application.icns:" << "\n\t"
628 << "@test -d " << dir << " || mkdir -p " << dir << "\n\t" 636 << "@test -d " << dir << " || mkdir -p " << dir << "\n\t"
629 << "@cp " << var("RC_FILE") << " " << dir << "application.icns" << endl; 637 << "@cp " << var("RC_FILE") << " " << dir << "application.icns" << endl;
630 } 638 }
631 } 639 }
632 640
633 QString ddir = project->isEmpty("QMAKE_DISTDIR") ? project->first("QMAKE_ORIG_TARGET") : 641 QString ddir = project->isEmpty("QMAKE_DISTDIR") ? project->first("QMAKE_ORIG_TARGET") :
634 project->first("QMAKE_DISTDIR"); 642 project->first("QMAKE_DISTDIR");
635 QString ddir_c = fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") : 643 QString ddir_c = fileFixify((project->isEmpty("OBJECTS_DIR") ? QString(".tmp/") :
636 project->first("OBJECTS_DIR")) + ddir); 644 project->first("OBJECTS_DIR")) + ddir);
637 t << "dist: " << "\n\t" 645 t << "dist: " << "\n\t"
638 << "@mkdir -p " << ddir_c << " && " 646 << "@mkdir -p " << ddir_c << " && "
639 << "$(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) " << ddir_c << Option::dir_sep << " && "; 647 << "$(COPY_FILE) --parents $(SOURCES) $(HEADERS) $(FORMS) $(DIST) " << ddir_c << Option::dir_sep << " && ";
640 if(!project->isEmpty("TRANSLATIONS")) 648 if(!project->isEmpty("TRANSLATIONS"))
641 t << "$(COPY_FILE) --parents " << var("TRANSLATIONS") << " " << ddir_c << Option::dir_sep << " && "; 649 t << "$(COPY_FILE) --parents " << var("TRANSLATIONS") << " " << ddir_c << Option::dir_sep << " && ";
642 if(!project->isEmpty("FORMS")) { 650 if(!project->isEmpty("FORMS")) {
643 QStringList &forms = project->variables()["FORMS"], ui_headers; 651 QStringList &forms = project->variables()["FORMS"], ui_headers;
644 for(QStringList::Iterator formit = forms.begin(); formit != forms.end(); ++formit) { 652 for(QStringList::Iterator formit = forms.begin(); formit != forms.end(); ++formit) {
645 QString ui_h = fileFixify((*formit) + Option::h_ext.first()); 653 QString ui_h = fileFixify((*formit) + Option::h_ext.first());
646 if(QFile::exists(ui_h) ) 654 if(QFile::exists(ui_h) )
647 ui_headers << ui_h; 655 ui_headers << ui_h;
648 } 656 }
649 if(!ui_headers.isEmpty()) 657 if(!ui_headers.isEmpty())
650 t << "$(COPY_FILE) --parents " << val(ui_headers) << " " << ddir_c << Option::dir_sep << " && "; 658 t << "$(COPY_FILE) --parents " << val(ui_headers) << " " << ddir_c << Option::dir_sep << " && ";
651 } 659 }
652 t << "( cd `dirname " << ddir_c << "` && " 660 t << "( cd `dirname " << ddir_c << "` && "
653 << "$(TAR) " << var("QMAKE_ORIG_TARGET") << ".tar " << ddir << " && " 661 << "$(TAR) " << var("QMAKE_ORIG_TARGET") << ".tar " << ddir << " && "
654 << "$(GZIP) " << var("QMAKE_ORIG_TARGET") << ".tar ) && " 662 << "$(GZIP) " << var("QMAKE_ORIG_TARGET") << ".tar ) && "
655 << "$(MOVE) `dirname " << ddir_c << "`" << Option::dir_sep << var("QMAKE_ORIG_TARGET") << ".tar.gz . && " 663 << "$(MOVE) `dirname " << ddir_c << "`" << Option::dir_sep << var("QMAKE_ORIG_TARGET") << ".tar.gz . && "
656 << "$(DEL_DIR) " << ddir_c 664 << "$(DEL_FILE) -r " << ddir_c
657 << endl << endl; 665 << endl << endl;
658 666
659 QString clean_targets; 667 QString clean_targets;
660 if(mocAware()) { 668 if(mocAware()) {
661 t << "mocclean:" << "\n"; 669 t << "mocclean:" << "\n";
662 if(!objMoc.isEmpty() || !srcMoc.isEmpty() || moc_incremental) { 670 if(!objMoc.isEmpty() || !srcMoc.isEmpty() || moc_incremental) {
663 if(!objMoc.isEmpty()) 671 if(!objMoc.isEmpty())
664 t << "\t-$(DEL_FILE) $(OBJMOC)" << '\n'; 672 t << "\t-$(DEL_FILE) $(OBJMOC)" << '\n';
665 if(!srcMoc.isEmpty()) 673 if(!srcMoc.isEmpty())
666 t << "\t-$(DEL_FILE) $(SRCMOC)" << '\n'; 674 t << "\t-$(DEL_FILE) $(SRCMOC)" << '\n';
667 if(moc_incremental) 675 if(moc_incremental)
668 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n'; 676 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n';
669 clean_targets += " mocclean"; 677 clean_targets += " mocclean";
670 } 678 }
671 t << endl; 679 t << endl;
672 } 680 }
673 t << "uiclean:" << "\n"; 681 t << "uiclean:" << "\n";
674 if (!var("UICIMPLS").isEmpty() || !var("UICDECLS").isEmpty()) { 682 if (!var("UICIMPLS").isEmpty() || !var("UICDECLS").isEmpty()) {
675 t << "\t-$(DEL_FILE) $(UICIMPLS) $(UICDECLS)" << "\n"; 683 t << "\t-$(DEL_FILE) $(UICIMPLS) $(UICDECLS)" << "\n";
676 clean_targets += " uiclean"; 684 clean_targets += " uiclean";
677 } 685 }
678 t << endl; 686 t << endl;
679 687
688 t << "yaccclean:" << "\n";
689 if(!var("YACCSOURCES").isEmpty()) {
690 QStringList clean, &l = project->variables()["YACCSOURCES"];
691 for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
692 QFileInfo fi((*it));
693 QString dir;
694 if(fi.dirPath() != ".")
695 dir = fi.dirPath() + Option::dir_sep;
696 dir = fileFixify(dir, QDir::currentDirPath(), Option::output_dir);
697 if(!dir.isEmpty() && dir.right(Option::dir_sep.length()) != Option::dir_sep)
698 dir += Option::dir_sep;
699 clean << dir + fi.baseName(TRUE) + Option::yacc_mod + Option::cpp_ext.first();
700 clean << dir + fi.baseName(TRUE) + Option::yacc_mod + Option::h_ext.first();
701 }
702 if(!clean.isEmpty()) {
703 t << "\t-$(DEL_FILE) " << clean.join(" ") << "\n";
704 clean_targets += " yaccclean";
705 }
706 }
707
708 t << "lexclean:" << "\n";
709 if(!var("LEXSOURCES").isEmpty()) {
710 QStringList clean, &l = project->variables()["LEXSOURCES"];
711 for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {
712 QFileInfo fi((*it));
713 QString dir;
714 if(fi.dirPath() != ".")
715 dir = fi.dirPath() + Option::dir_sep;
716 dir = fileFixify(dir, QDir::currentDirPath(), Option::output_dir);
717 if(!dir.isEmpty() && dir.right(Option::dir_sep.length()) != Option::dir_sep)
718 dir += Option::dir_sep;
719 clean << dir + fi.baseName(TRUE) + Option::lex_mod + Option::cpp_ext.first();
720 }
721 if(!clean.isEmpty()) {
722 t << "\t-$(DEL_FILE) " << clean.join(" ") << "\n";
723 clean_targets += " lexclean";
724 }
725 }
726
680 if(do_incremental) { 727 if(do_incremental) {
681 t << "incrclean:" << "\n"; 728 t << "incrclean:" << "\n";
682 if(src_incremental) 729 if(src_incremental)
683 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n"; 730 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n";
684 if(moc_incremental) 731 if(moc_incremental)
685 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n'; 732 t << "\t-$(DEL_FILE) $(INCREMENTAL_OBJMOC)" << '\n';
686 t << endl; 733 t << endl;
687 } 734 }
688 735
689 t << "clean:" << clean_targets << "\n\t"; 736 t << "clean:" << clean_targets << "\n\t";
690 if(!project->isEmpty("OBJECTS")) 737 if(!project->isEmpty("OBJECTS"))
691 t << "-$(DEL_FILE) $(OBJECTS) " << "\n\t"; 738 t << "-$(DEL_FILE) $(OBJECTS) " << "\n\t";
692 if(!project->isEmpty("IMAGES")) 739 if(!project->isEmpty("IMAGES"))
693 t << varGlue("QMAKE_IMAGE_COLLECTION", "\t-$(DEL_FILE) ", " ", "") << "\n\t"; 740 t << varGlue("QMAKE_IMAGE_COLLECTION", "\t-$(DEL_FILE) ", " ", "") << "\n\t";
694 if(src_incremental) 741 if(src_incremental)
695 t << "-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n\t"; 742 t << "-$(DEL_FILE) $(INCREMENTAL_OBJECTS)" << "\n\t";
696 t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t") 743 t << varGlue("QMAKE_CLEAN","-$(DEL_FILE) "," ","\n\t")
697 << "-$(DEL_FILE) *~ core *.core" << "\n" 744 << "-$(DEL_FILE) *~ core *.core" << "\n"
698 << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl; 745 << varGlue("CLEAN_FILES","\t-$(DEL_FILE) "," ","") << endl << endl;
699 t << "####### Sub-libraries" << endl << endl; 746 t << "####### Sub-libraries" << endl << endl;
700 if ( !project->variables()["SUBLIBS"].isEmpty() ) { 747 if ( !project->variables()["SUBLIBS"].isEmpty() ) {
701 QString libdir = "tmp/"; 748 QString libdir = "tmp/";
702 if(!project->isEmpty("SUBLIBS_DIR")) 749 if(!project->isEmpty("SUBLIBS_DIR"))
703 libdir = project->first("SUBLIBS_DIR"); 750 libdir = project->first("SUBLIBS_DIR");
704 QStringList &l = project->variables()["SUBLIBS"]; 751 QStringList &l = project->variables()["SUBLIBS"];
705 for(it = l.begin(); it != l.end(); ++it) 752 for(it = l.begin(); it != l.end(); ++it)
706 t << libdir << "lib" << (*it) << ".a" << ":\n\t" 753 t << libdir << "lib" << (*it) << ".a" << ":\n\t"
707 << var(QString("MAKELIB") + (*it)) << endl << endl; 754 << var(QString("MAKELIB") + (*it)) << endl << endl;
708 } 755 }
709 756
710 QString destdir = project->first("DESTDIR"); 757 QString destdir = project->first("DESTDIR");
711 if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep) 758 if(!destdir.isEmpty() && destdir.right(1) != Option::dir_sep)
712 destdir += Option::dir_sep; 759 destdir += Option::dir_sep;
713 t << "distclean: " << "clean\n\t" 760 t << "distclean: " << "clean\n";
714 << "-$(DEL_FILE) " << destdir << "$(TARGET)" << " " << "$(TARGET)" << "\n"; 761 if(project->first("TEMPLATE") == "app" &&
762 project->isActiveConfig("resource_fork") && !project->isActiveConfig("console"))
763 t << "\t-$(DEL_FILE) -r " << destdir.section(Option::dir_sep, 0, -4) << "\n";
764 else
765 t << "\t-$(DEL_FILE) " << destdir << "$(TARGET)" << " " << "$(TARGET)" << "\n";
715 if(!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty() && 766 if(!project->isActiveConfig("staticlib") && project->variables()["QMAKE_APP_FLAG"].isEmpty() &&
716 !project->isActiveConfig("plugin")) 767 !project->isActiveConfig("plugin"))
717 t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) " 768 t << "\t-$(DEL_FILE) " << destdir << "$(TARGET0) " << destdir << "$(TARGET1) "
718 << destdir << "$(TARGET2) $(TARGETA)" << "\n"; 769 << destdir << "$(TARGET2) $(TARGETA)" << "\n";
719 t << endl << endl; 770 t << endl << endl;
720 771
721 if ( !project->isEmpty("PRECOMPH") ) { 772 if ( !project->isEmpty("PRECOMPH") ) {
722 QString outdir = project->first("MOC_DIR"); 773 QString outdir = project->first("MOC_DIR");
723 QString qt_dot_h = Option::fixPathToLocalOS(project->first("PRECOMPH")); 774 QString qt_dot_h = Option::fixPathToLocalOS(project->first("PRECOMPH"));
724 t << "###### Combined headers" << endl << endl; 775 t << "###### Combined headers" << endl << endl;
725 //XXX 776 //XXX
726 t << outdir << "allmoc.cpp: " << qt_dot_h << " " 777 t << outdir << "allmoc.cpp: " << qt_dot_h << " "
727 << varList("HEADERS_ORIG") << "\n\t" 778 << varList("HEADERS_ORIG") << "\n\t"
728 << "echo '#include \"" << qt_dot_h << "\"' >" << outdir << "allmoc.cpp" << "\n\t" 779 << "echo '#include \"" << qt_dot_h << "\"' >" << outdir << "allmoc.cpp" << "\n\t"
729 << "$(CXX) -E -DQT_MOC_CPP -DQT_NO_STL $(CXXFLAGS) $(INCPATH) >" << outdir << "allmoc.h " 780 << "$(CXX) -E -DQT_MOC_CPP -DQT_NO_STL $(CXXFLAGS) $(INCPATH) >" << outdir << "allmoc.h "
730 << outdir << "allmoc.cpp" << "\n\t" 781 << outdir << "allmoc.cpp" << "\n\t"
731 << "$(MOC) -o " << outdir << "allmoc.cpp " << outdir << "allmoc.h" << "\n\t" 782 << "$(MOC) -o " << outdir << "allmoc.cpp " << outdir << "allmoc.h" << "\n\t"
732 << "perl -pi -e 's{#include \"allmoc.h\"}{#define QT_H_CPP\\n#include \"" 783 << "perl -pi -e 's{#include \"allmoc.h\"}{#define QT_H_CPP\\n#include \""
733 << qt_dot_h << "\"}' " << outdir << "allmoc.cpp" << "\n\t" 784 << qt_dot_h << "\"}' " << outdir << "allmoc.cpp" << "\n\t"
734 << "$(DEL_FILE) " << outdir << "allmoc.h" << endl << endl; 785 << "$(DEL_FILE) " << outdir << "allmoc.h" << endl << endl;
735 } 786 }
736 787
737 // blasted user defined targets 788 // blasted user defined targets
738 QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"]; 789 QStringList &qut = project->variables()["QMAKE_EXTRA_UNIX_TARGETS"];
@@ -785,185 +836,186 @@ UnixMakefileGenerator::writeSubdirs(QTextStream &t, bool direct)
785 while(sd->directory.right(1) == Option::dir_sep) 836 while(sd->directory.right(1) == Option::dir_sep)
786 sd->directory = sd->directory.left(sd->directory.length() - 1); 837 sd->directory = sd->directory.left(sd->directory.length() - 1);
787 if(!sd->profile.isEmpty()) { 838 if(!sd->profile.isEmpty()) {
788 QString basename = sd->directory; 839 QString basename = sd->directory;
789 int new_slsh = basename.findRev(Option::dir_sep); 840 int new_slsh = basename.findRev(Option::dir_sep);
790 if(new_slsh != -1) 841 if(new_slsh != -1)
791 basename = basename.mid(new_slsh+1); 842 basename = basename.mid(new_slsh+1);
792 if(sd->profile != basename + ".pro") 843 if(sd->profile != basename + ".pro")
793 sd->makefile += "." + sd->profile.left(sd->profile.length() - 4); //no need for the .pro 844 sd->makefile += "." + sd->profile.left(sd->profile.length() - 4); //no need for the .pro
794 } 845 }
795 sd->target = "sub-" + (*it); 846 sd->target = "sub-" + (*it);
796 sd->target.replace('/', '-'); 847 sd->target.replace('/', '-');
797 sd->target.replace('.', '_'); 848 sd->target.replace('.', '_');
798 } 849 }
799 } 850 }
800 QPtrListIterator<SubDir> it(subdirs); 851 QPtrListIterator<SubDir> it(subdirs);
801 852
802 QString ofile = Option::output.name(); 853 QString ofile = Option::output.name();
803 if(ofile.findRev(Option::dir_sep) != -1) 854 if(ofile.findRev(Option::dir_sep) != -1)
804 ofile = ofile.right(ofile.length() - ofile.findRev(Option::dir_sep) -1); 855 ofile = ofile.right(ofile.length() - ofile.findRev(Option::dir_sep) -1);
805 t << "MAKEFILE =" << var("MAKEFILE") << endl; 856 t << "MAKEFILE =" << var("MAKEFILE") << endl;
806 t << "QMAKE =" << var("QMAKE") << endl; 857 t << "QMAKE =" << var("QMAKE") << endl;
807 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl; 858 t << "DEL_FILE = " << var("QMAKE_DEL_FILE") << endl;
808 t << "SUBTARGETS ="; // subdirectory targets are sub-directory 859 t << "SUBTARGETS ="; // subdirectory targets are sub-directory
809 for( it.toFirst(); it.current(); ++it) 860 for( it.toFirst(); it.current(); ++it)
810 t << " \\\n\t\t" << it.current()->target; 861 t << " \\\n\t\t" << it.current()->target;
811 t << endl << endl; 862 t << endl << endl;
812 t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl; 863 t << "first: all\n\nall: " << ofile << " $(SUBTARGETS)" << endl << endl;
813 864
814 // generate target rules 865 // generate target rules
815 for( it.toFirst(); it.current(); ++it) { 866 for( it.toFirst(); it.current(); ++it) {
816 bool have_dir = !(*it)->directory.isEmpty(); 867 bool have_dir = !(*it)->directory.isEmpty();
817 QString mkfile = (*it)->makefile, out; 868 QString mkfile = (*it)->makefile, out;
818 if(have_dir) 869 if(have_dir)
819 mkfile.prepend((*it)->directory + Option::dir_sep); 870 mkfile.prepend((*it)->directory + Option::dir_sep);
820 if(direct || (*it)->makefile != "$(MAKEFILE)") 871 if(direct || (*it)->makefile != "$(MAKEFILE)")
821 out = " -o " + (*it)->makefile; 872 out = " -o " + (*it)->makefile;
822 //qmake it 873 //qmake it
823 t << mkfile << ": " << "\n\t"; 874 t << mkfile << ": " << "\n\t";
824 if(have_dir) 875 if(have_dir)
825 t << "cd " << (*it)->directory << " && "; 876 t << "cd " << (*it)->directory << " && ";
826 t << "$(QMAKE) " << (*it)->profile << buildArgs() << out << endl; 877 t << "$(QMAKE) " << (*it)->profile << buildArgs() << out << endl;
827 //actually compile 878 //actually compile
828 t << (*it)->target << ": " << mkfile << " FORCE" << "\n\t"; 879 t << (*it)->target << ": " << mkfile << " FORCE" << "\n\t";
829 if(have_dir) 880 if(have_dir)
830 t << "cd " << (*it)->directory << " && "; 881 t << "cd " << (*it)->directory << " && ";
831 t << "$(MAKE) -f " << (*it)->makefile << endl << endl; 882 t << "$(MAKE) -f " << (*it)->makefile << endl << endl;
832 } 883 }
833 884
834 if (project->isActiveConfig("ordered")) { // generate dependencies 885 if (project->isActiveConfig("ordered")) { // generate dependencies
835 for( it.toFirst(); it.current(); ) { 886 for( it.toFirst(); it.current(); ) {
836 QString tar = it.current()->target; 887 QString tar = it.current()->target;
837 ++it; 888 ++it;
838 if (it.current()) 889 if (it.current())
839 t << it.current()->target << ": " << tar << endl; 890 t << it.current()->target << ": " << tar << endl;
840 } 891 }
841 t << endl; 892 t << endl;
842 } 893 }
843 894
844 writeMakeQmake(t); 895 writeMakeQmake(t);
845 896
846 if(project->isEmpty("SUBDIRS")) { 897 if(project->isEmpty("SUBDIRS")) {
847 t << "all qmake_all distclean install uiclean mocclean clean: FORCE" << endl; 898 t << "all qmake_all distclean install uiclean mocclean lexclean yaccclean clean: FORCE" << endl;
848 } else { 899 } else {
849 t << "all: $(SUBTARGETS)" << endl; 900 t << "all: $(SUBTARGETS)" << endl;
850 t << "qmake_all:"; 901 t << "qmake_all:";
851 for( it.toFirst(); it.current(); ++it) { 902 for( it.toFirst(); it.current(); ++it) {
852 t << " "; 903 t << " ";
853 if(!(*it)->directory.isEmpty()) 904 if(!(*it)->directory.isEmpty())
854 t << (*it)->directory << Option::dir_sep; 905 t << (*it)->directory << Option::dir_sep;
855 t << (*it)->makefile; 906 t << (*it)->makefile;
856 } 907 }
857 for( it.toFirst(); it.current(); ++it) { 908 for( it.toFirst(); it.current(); ++it) {
858 t << "\n\t ( "; 909 t << "\n\t ( ";
859 if(!(*it)->directory.isEmpty()) 910 if(!(*it)->directory.isEmpty())
860 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 911 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
861 t << "grep \"^qmake_all:\" " << (*it)->makefile 912 t << "grep \"^qmake_all:\" " << (*it)->makefile
862 << " && $(MAKE) -f " << (*it)->makefile << " qmake_all" << "; ) || true"; 913 << " && $(MAKE) -f " << (*it)->makefile << " qmake_all" << "; ) || true";
863 } 914 }
864 t << endl; 915 t << endl;
865 t << "clean uninstall install uiclean mocclean: qmake_all FORCE"; 916 t << "clean uninstall install uiclean mocclean lexclean yaccclean: qmake_all FORCE";
866 for( it.toFirst(); it.current(); ++it) { 917 for( it.toFirst(); it.current(); ++it) {
867 t << "\n\t ( "; 918 t << "\n\t ( ";
868 if(!(*it)->directory.isEmpty()) 919 if(!(*it)->directory.isEmpty())
869 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 920 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
870 t << "$(MAKE) -f " << (*it)->makefile << " $@" << "; ) || true"; 921 t << "$(MAKE) -f " << (*it)->makefile << " $@" << "; ) || true";
871 } 922 }
872 t << endl; 923 t << endl;
873 t << "distclean: qmake_all FORCE"; 924 t << "distclean: qmake_all FORCE";
874 for( it.toFirst(); it.current(); ++it) { 925 for( it.toFirst(); it.current(); ++it) {
875 t << "\n\t ( "; 926 t << "\n\t ( ";
876 if(!(*it)->directory.isEmpty()) 927 if(!(*it)->directory.isEmpty())
877 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; "; 928 t << "[ -d " << (*it)->directory << " ] && cd " << (*it)->directory << " ; ";
878 t << "$(MAKE) -f " << (*it)->makefile << " $@; $(DEL_FILE) " << (*it)->makefile << "; ) || true"; 929 t << "$(MAKE) -f " << (*it)->makefile << " $@; $(DEL_FILE) " << (*it)->makefile << "; ) || true";
879 } 930 }
880 t << endl << endl; 931 t << endl << endl;
881 } 932 }
882 t <<"FORCE:" << endl << endl; 933 t <<"FORCE:" << endl << endl;
883} 934}
884 935
885void UnixMakefileGenerator::init2() 936void UnixMakefileGenerator::init2()
886{ 937{
887 //version handling 938 //version handling
888 if(project->variables()["VERSION"].isEmpty()) 939 if(project->variables()["VERSION"].isEmpty())
889 project->variables()["VERSION"].append("1.0." + 940 project->variables()["VERSION"].append("1.0." +
890 (project->isEmpty("VER_PAT") ? QString("0") : 941 (project->isEmpty("VER_PAT") ? QString("0") :
891 project->first("VER_PAT")) ); 942 project->first("VER_PAT")) );
892 QStringList l = QStringList::split('.', project->first("VERSION")); 943 QStringList l = QStringList::split('.', project->first("VERSION"));
893 l << "0" << "0"; //make sure there are three 944 l << "0" << "0"; //make sure there are three
894 project->variables()["VER_MAJ"].append(l[0]); 945 project->variables()["VER_MAJ"].append(l[0]);
895 project->variables()["VER_MIN"].append(l[1]); 946 project->variables()["VER_MIN"].append(l[1]);
896 project->variables()["VER_PAT"].append(l[2]); 947 project->variables()["VER_PAT"].append(l[2]);
897 948
898 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) { 949 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {
899#if 0 950#if 0
900 if ( project->isActiveConfig("dll") ) { 951 if ( project->isActiveConfig("dll") ) {
901 project->variables()["TARGET"] += project->variables()["TARGET.so"]; 952 project->variables()["TARGET"] += project->variables()["TARGET.so"];
902 if(project->variables()["QMAKE_LFLAGS_SHAPP"].isEmpty()) 953 if(project->variables()["QMAKE_LFLAGS_SHAPP"].isEmpty())
903 project->variables()["QMAKE_LFLAGS_SHAPP"] += project->variables()["QMAKE_LFLAGS_SHLIB"]; 954 project->variables()["QMAKE_LFLAGS_SHAPP"] += project->variables()["QMAKE_LFLAGS_SHLIB"];
904 if(!project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty()) 955 if(!project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty())
905 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET"); 956 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET");
906 } 957 }
907#endif 958#endif
908 project->variables()["TARGET"].first().prepend(project->first("DESTDIR")); 959 project->variables()["TARGET"].first().prepend(project->first("DESTDIR"));
960 if ( !project->variables()["QMAKE_CYGWIN_EXE"].isEmpty() )
961 project->variables()["TARGET_EXT"].append(".exe");
909 } else if ( project->isActiveConfig("staticlib") ) { 962 } else if ( project->isActiveConfig("staticlib") ) {
910 project->variables()["TARGET"].first().prepend("lib"); 963 project->variables()["TARGET"].first().prepend("lib");
911 project->variables()["TARGET"].first() += ".a"; 964 project->variables()["TARGET"].first() += ".a";
912 if(project->variables()["QMAKE_AR_CMD"].isEmpty()) 965 if(project->variables()["QMAKE_AR_CMD"].isEmpty())
913 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)"); 966 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGET) $(OBJECTS) $(OBJMOC)");
914 } else { 967 } else {
915 project->variables()["TARGETA"].append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a"); 968 project->variables()["TARGETA"].append(project->first("DESTDIR") + "lib" + project->first("TARGET") + ".a");
916 if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() ) 969 if ( !project->variables()["QMAKE_AR_CMD"].isEmpty() )
917 project->variables()["QMAKE_AR_CMD"].first().replace("(TARGET)","(TARGETA)"); 970 project->variables()["QMAKE_AR_CMD"].first().replace("(TARGET)","(TARGETA)");
918 else 971 else
919 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)"); 972 project->variables()["QMAKE_AR_CMD"].append("$(AR) $(TARGETA) $(OBJECTS) $(OBJMOC)");
920 QString os = project->variables()["QMAKESPEC"].first().section( '-', 0, 0 );
921 if( project->isActiveConfig("plugin") ) { 973 if( project->isActiveConfig("plugin") ) {
922 project->variables()["TARGET_x.y.z"].append("lib" + 974 project->variables()["TARGET_x.y.z"].append("lib" +
923 project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB")); 975 project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB"));
924 if(project->isActiveConfig("lib_version_first")) 976 if(project->isActiveConfig("lib_version_first"))
925 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 977 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
926 project->first("VER_MAJ") + "." + 978 project->first("VER_MAJ") + "." +
927 project->first("QMAKE_EXTENSION_SHLIB")); 979 project->first("QMAKE_EXTENSION_SHLIB"));
928 else 980 else
929 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 981 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
930 project->first("QMAKE_EXTENSION_SHLIB") + 982 project->first("QMAKE_EXTENSION_SHLIB") +
931 "." + project->first("VER_MAJ")); 983 "." + project->first("VER_MAJ"));
932 984
933 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; 985 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];
934 if(project->isActiveConfig("qt")) 986 if(project->isActiveConfig("qt"))
935 project->variables()["DEFINES"].append("QT_PLUGIN"); 987 project->variables()["DEFINES"].append("QT_PLUGIN");
936 } else if ( os == "hpux" ) { 988 } else if ( !project->isEmpty("QMAKE_HPUX_SHLIB") ) {
937 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl"); 989 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".sl");
938 if(project->isActiveConfig("lib_version_first")) 990 if(project->isActiveConfig("lib_version_first"))
939 project->variables()["TARGET_x"].append("lib" + project->first("VER_MAJ") + "." + 991 project->variables()["TARGET_x"].append("lib" + project->first("VER_MAJ") + "." +
940 project->first("TARGET")); 992 project->first("TARGET"));
941 else 993 else
942 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 994 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
943 project->first("VER_MAJ")); 995 project->first("VER_MAJ"));
944 project->variables()["TARGET"] = project->variables()["TARGET_x"]; 996 project->variables()["TARGET"] = project->variables()["TARGET_x"];
945 } else if ( os == "aix" ) { 997 } else if ( !project->isEmpty("QMAKE_AIX_SHLIB") ) {
946 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a"); 998 project->variables()["TARGET_"].append("lib" + project->first("TARGET") + ".a");
947 if(project->isActiveConfig("lib_version_first")) { 999 if(project->isActiveConfig("lib_version_first")) {
948 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 1000 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
949 project->first("VER_MAJ") + "." + 1001 project->first("VER_MAJ") + "." +
950 project->first("QMAKE_EXTENSION_SHLIB")); 1002 project->first("QMAKE_EXTENSION_SHLIB"));
951 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 1003 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
952 project->first("VER_MAJ") + 1004 project->first("VER_MAJ") +
953 "." + project->first("VER_MIN") + "." + 1005 "." + project->first("VER_MIN") + "." +
954 project->first("QMAKE_EXTENSION_SHLIB")); 1006 project->first("QMAKE_EXTENSION_SHLIB"));
955 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + 1007 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +
956 project->first("VER_MAJ") + "." + 1008 project->first("VER_MAJ") + "." +
957 project->first("VER_MIN") + "." + 1009 project->first("VER_MIN") + "." +
958 project->first("VER_PAT") + "." + 1010 project->first("VER_PAT") + "." +
959 project->first("QMAKE_EXTENSION_SHLIB")); 1011 project->first("QMAKE_EXTENSION_SHLIB"));
960 } else { 1012 } else {
961 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 1013 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
962 project->first("QMAKE_EXTENSION_SHLIB") + 1014 project->first("QMAKE_EXTENSION_SHLIB") +
963 "." + project->first("VER_MAJ")); 1015 "." + project->first("VER_MAJ"));
964 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 1016 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
965 project->first("QMAKE_EXTENSION_SHLIB") + 1017 project->first("QMAKE_EXTENSION_SHLIB") +
966 "." + project->first("VER_MAJ") + 1018 "." + project->first("VER_MAJ") +
967 "." + project->first("VER_MIN")); 1019 "." + project->first("VER_MIN"));
968 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + 1020 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." +
969 project->first("QMAKE_EXTENSION_SHLIB") + "." + 1021 project->first("QMAKE_EXTENSION_SHLIB") + "." +
@@ -990,50 +1042,57 @@ void UnixMakefileGenerator::init2()
990 project->variables()["QMAKE_EXTENSION_SHLIB"].first()); 1042 project->variables()["QMAKE_EXTENSION_SHLIB"].first());
991 } else { 1043 } else {
992 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + 1044 project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." +
993 project->first("QMAKE_EXTENSION_SHLIB") + 1045 project->first("QMAKE_EXTENSION_SHLIB") +
994 "." + project->first("VER_MAJ")); 1046 "." + project->first("VER_MAJ"));
995 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + 1047 project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." +
996 project->first("QMAKE_EXTENSION_SHLIB") 1048 project->first("QMAKE_EXTENSION_SHLIB")
997 + "." + project->first("VER_MAJ") + 1049 + "." + project->first("VER_MAJ") +
998 "." + project->first("VER_MIN")); 1050 "." + project->first("VER_MIN"));
999 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + 1051 project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") +
1000 "." + 1052 "." +
1001 project->variables()[ 1053 project->variables()[
1002 "QMAKE_EXTENSION_SHLIB"].first() + "." + 1054 "QMAKE_EXTENSION_SHLIB"].first() + "." +
1003 project->first("VER_MAJ") + "." + 1055 project->first("VER_MAJ") + "." +
1004 project->first("VER_MIN") + "." + 1056 project->first("VER_MIN") + "." +
1005 project->first("VER_PAT")); 1057 project->first("VER_PAT"));
1006 } 1058 }
1007 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; 1059 project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"];
1008 } 1060 }
1009 if(project->isEmpty("QMAKE_LN_SHLIB")) 1061 if(project->isEmpty("QMAKE_LN_SHLIB"))
1010 project->variables()["QMAKE_LN_SHLIB"].append("ln -s"); 1062 project->variables()["QMAKE_LN_SHLIB"].append("ln -s");
1011 project->variables()["DESTDIR_TARGET"].append("$(TARGET)"); 1063 project->variables()["DESTDIR_TARGET"].append("$(TARGET)");
1012 if ( !project->variables()["DESTDIR"].isEmpty() ) 1064 if ( !project->variables()["DESTDIR"].isEmpty() )
1013 project->variables()["DESTDIR_TARGET"].first().prepend(project->first("DESTDIR")); 1065 project->variables()["DESTDIR_TARGET"].first().prepend(project->first("DESTDIR"));
1014 if ( !project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty() && !project->variables()["TARGET_x"].isEmpty() ) 1066 if ( !project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty()) {
1015 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET_x"); 1067 if(project->isActiveConfig("plugin")) {
1068 if(!project->variables()["TARGET"].isEmpty() )
1069 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET");
1070 } else {
1071 if(!project->variables()["TARGET_x"].isEmpty() )
1072 project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET_x");
1073 }
1074 }
1016 if ( project->variables()["QMAKE_LINK_SHLIB_CMD"].isEmpty() ) 1075 if ( project->variables()["QMAKE_LINK_SHLIB_CMD"].isEmpty() )
1017 project->variables()["QMAKE_LINK_SHLIB_CMD"].append( 1076 project->variables()["QMAKE_LINK_SHLIB_CMD"].append(
1018 "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)"); 1077 "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS)");
1019 } 1078 }
1020 if(project->isEmpty("QMAKE_SYMBOLIC_LINK")) 1079 if(project->isEmpty("QMAKE_SYMBOLIC_LINK"))
1021 project->variables()["QMAKE_SYMBOLIC_LINK"].append("ln -sf"); 1080 project->variables()["QMAKE_SYMBOLIC_LINK"].append("ln -sf");
1022 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) { 1081 if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) {
1023 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHAPP"]; 1082 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHAPP"];
1024 } else if ( project->isActiveConfig("dll") ) { 1083 } else if ( project->isActiveConfig("dll") ) {
1025 project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_SHLIB"]; 1084 project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_SHLIB"];
1026 project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_SHLIB"]; 1085 project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_SHLIB"];
1027 if ( project->isActiveConfig("plugin") ) { 1086 if ( project->isActiveConfig("plugin") ) {
1028 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_PLUGIN"]; 1087 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_PLUGIN"];
1029 if( !project->isActiveConfig("plugin_no_soname") ) 1088 if( !project->isActiveConfig("plugin_no_soname") )
1030 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"]; 1089 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"];
1031 } else { 1090 } else {
1032 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHLIB"]; 1091 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHLIB"];
1033 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"]; 1092 project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"];
1034 } 1093 }
1035 QString destdir = project->first("DESTDIR"); 1094 QString destdir = project->first("DESTDIR");
1036 if ( !destdir.isEmpty() && !project->variables()["QMAKE_RPATH"].isEmpty() ) { 1095 if ( !destdir.isEmpty() && !project->variables()["QMAKE_RPATH"].isEmpty() ) {
1037 QString rpath_destdir = destdir; 1096 QString rpath_destdir = destdir;
1038 if(QDir::isRelativePath(rpath_destdir)) { 1097 if(QDir::isRelativePath(rpath_destdir)) {
1039 QFileInfo fi(Option::fixPathToLocalOS(rpath_destdir)); 1098 QFileInfo fi(Option::fixPathToLocalOS(rpath_destdir));