summaryrefslogtreecommitdiff
path: root/qmake/generators/win32/borland_bmake.cpp
Unidiff
Diffstat (limited to 'qmake/generators/win32/borland_bmake.cpp') (more/less context) (show whitespace changes)
-rw-r--r--qmake/generators/win32/borland_bmake.cpp218
1 files changed, 185 insertions, 33 deletions
diff --git a/qmake/generators/win32/borland_bmake.cpp b/qmake/generators/win32/borland_bmake.cpp
index 26eea88..12607cf 100644
--- a/qmake/generators/win32/borland_bmake.cpp
+++ b/qmake/generators/win32/borland_bmake.cpp
@@ -1,14 +1,12 @@
1/**************************************************************************** 1/****************************************************************************
2** $Id$
3** 2**
4** Definition of ________ class.
5** 3**
6** Created : 970521 4** NmakeMakefileGenerator of BorlandMakefileGenerator class.
7** 5**
8** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. 6** Copyright (C) 1992-2003 Trolltech AS. All rights reserved.
9** 7**
10** This file is part of the network module of the Qt GUI Toolkit. 8** This file is part of qmake.
11** 9**
12** This file may be distributed under the terms of the Q Public License 10** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file 11** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file. 12** LICENSE.QPL included in the packaging of this file.
@@ -133,8 +131,10 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
133 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl; 131 t << "DEL_DIR = " << var("QMAKE_DEL_DIR") << endl;
134 t << "MOVE = " << var("QMAKE_MOVE") << endl; 132 t << "MOVE = " << var("QMAKE_MOVE") << endl;
135 t << "CHK_DIR_EXISTS =" << var("QMAKE_CHK_DIR_EXISTS") << endl; 133 t << "CHK_DIR_EXISTS =" << var("QMAKE_CHK_DIR_EXISTS") << endl;
136 t << "MKDIR =" << var("QMAKE_MKDIR") << endl; 134 t << "MKDIR =" << var("QMAKE_MKDIR") << endl;
135 t << "INSTALL_FILE= " << var("QMAKE_INSTALL_FILE") << endl;
136 t << "INSTALL_DIR = " << var("QMAKE_INSTALL_DIR") << endl;
137 t << endl; 137 t << endl;
138 138
139 t << "####### Files" << endl << endl; 139 t << "####### Files" << endl << endl;
140 t << "HEADERS =" << varList("HEADERS") << endl; 140 t << "HEADERS =" << varList("HEADERS") << endl;
@@ -144,8 +144,25 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
144 t << "UICDECLS =" << varList("UICDECLS") << endl; 144 t << "UICDECLS =" << varList("UICDECLS") << endl;
145 t << "UICIMPLS =" << varList("UICIMPLS") << endl; 145 t << "UICIMPLS =" << varList("UICIMPLS") << endl;
146 t << "SRCMOC =" << varList("SRCMOC") << endl; 146 t << "SRCMOC =" << varList("SRCMOC") << endl;
147 t << "OBJMOC =" << varList("OBJMOC") << endl; 147 t << "OBJMOC =" << varList("OBJMOC") << endl;
148
149 QString extraCompilerDeps;
150 if(!project->isEmpty("QMAKE_EXTRA_WIN_COMPILERS")) {
151 t << "OBJCOMP = " << varList("OBJCOMP") << endl;
152 extraCompilerDeps += " $(OBJCOMP) ";
153
154 QStringList &comps = project->variables()["QMAKE_EXTRA_WIN_COMPILERS"];
155 for(QStringList::Iterator compit = comps.begin(); compit != comps.end(); ++compit) {
156 QStringList &vars = project->variables()[(*compit) + ".variables"];
157 for(QStringList::Iterator varit = vars.begin(); varit != vars.end(); ++varit) {
158 QStringList vals = project->variables()[(*varit)];
159 if(!vals.isEmpty())
160 t << "QMAKE_COMP_" << (*varit) << " = " << valList(vals) << endl;
161 }
162 }
163 }
164
148 t << "DIST =" << varList("DISTFILES") << endl; 165 t << "DIST =" << varList("DISTFILES") << endl;
149 t << "TARGET =" 166 t << "TARGET ="
150 << varGlue("TARGET",project->first("DESTDIR"),"",project->first("TARGET_EXT")) 167 << varGlue("TARGET",project->first("DESTDIR"),"",project->first("TARGET_EXT"))
151 << endl; 168 << endl;
@@ -161,29 +178,30 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
161 t << (*cppit) << Option::obj_ext << ":\n\t" << var("QMAKE_RUN_CXX_IMP") << endl << endl; 178 t << (*cppit) << Option::obj_ext << ":\n\t" << var("QMAKE_RUN_CXX_IMP") << endl << endl;
162 t << ".c" << Option::obj_ext << ":\n\t" << var("QMAKE_RUN_CC_IMP") << endl << endl; 179 t << ".c" << Option::obj_ext << ":\n\t" << var("QMAKE_RUN_CC_IMP") << endl << endl;
163 180
164 t << "####### Build rules" << endl << endl; 181 t << "####### Build rules" << endl << endl;
165 t << "all: " << varGlue("ALL_DEPS",""," "," ") << " $(TARGET)" << endl << endl; 182 t << "all: " << fileFixify(Option::output.name()) << " " << varGlue("ALL_DEPS"," "," "," ") << " $(TARGET)" << endl << endl;
166 t << "$(TARGET): " << var("PRE_TARGETDEPS") << " $(UICDECLS) $(OBJECTS) $(OBJMOC) " 183 t << "$(TARGET): " << var("PRE_TARGETDEPS") << " $(UICDECLS) $(OBJECTS) $(OBJMOC) "
167 << var("POST_TARGETDEPS"); 184 << extraCompilerDeps << var("POST_TARGETDEPS");
168 if(!project->variables()["QMAKE_APP_OR_DLL"].isEmpty()) { 185 if(!project->variables()["QMAKE_APP_OR_DLL"].isEmpty()) {
169 t << "\n\t" << "$(LINK) @&&|" << "\n\t" 186 t << "\n\t" << "$(LINK) @&&|" << "\n\t"
170 << "$(LFLAGS) $(OBJECTS) $(OBJMOC),$(TARGET),,$(LIBS),$(DEF_FILE),$(RES_FILE)"; 187 << "$(LFLAGS) $(OBJECTS) $(OBJMOC),$(TARGET),,$(LIBS),$(DEF_FILE),$(RES_FILE)";
171 } else { 188 } else {
172 t << "\n\t-del $(TARGET)" 189 t << "\n\t-$(DEL_FILE) $(TARGET)"
173 << "\n\t" << "$(LIB) $(TARGET) @&&|" << " \n+" 190 << "\n\t" << "$(LIB) $(TARGET) @&&|" << " \n+"
174 << project->variables()["OBJECTS"].join(" \\\n+") << " \\\n+" 191 << project->variables()["OBJECTS"].join(" \\\n+") << " \\\n+"
175 << project->variables()["OBJMOC"].join(" \\\n+"); 192 << project->variables()["OBJMOC"].join(" \\\n+");
176 } 193 }
194 t << extraCompilerDeps;
177 t << endl << "|" << endl; 195 t << endl << "|" << endl;
178 196
179 if ( !project->variables()["QMAKE_POST_LINK"].isEmpty() ) 197 if ( !project->variables()["QMAKE_POST_LINK"].isEmpty() )
180 t << "\t" <<var("QMAKE_POST_LINK") << endl; 198 t << "\t" <<var("QMAKE_POST_LINK") << endl;
181 199
182 if(project->isActiveConfig("dll") && !project->variables()["DLLDESTDIR"].isEmpty()) { 200 if(project->isActiveConfig("dll") && !project->variables()["DLLDESTDIR"].isEmpty()) {
183 QStringList dlldirs = project->variables()["DLLDESTDIR"]; 201 QStringList dlldirs = project->variables()["DLLDESTDIR"];
184 for ( QStringList::Iterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir ) { 202 for ( QStringList::Iterator dlldir = dlldirs.begin(); dlldir != dlldirs.end(); ++dlldir ) {
185 t << "\n\t" << "-copy $(TARGET) " << *dlldir; 203 t << "\n\t" << "-$(COPY_FILE) \"$(TARGET)\" " << *dlldir;
186 } 204 }
187 } 205 }
188 QString targetfilename = project->variables()["TARGET"].first(); 206 QString targetfilename = project->variables()["TARGET"].first();
189 if(project->isActiveConfig("activeqt")) { 207 if(project->isActiveConfig("activeqt")) {
@@ -191,16 +209,16 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
191 if ( version.isEmpty() ) 209 if ( version.isEmpty() )
192 version = "1.0"; 210 version = "1.0";
193 211
194 if ( project->isActiveConfig("dll")) { 212 if ( project->isActiveConfig("dll")) {
195 t << "\n\t" << ("-$(IDC) $(TARGET) /idl tmp\\" + targetfilename + ".idl -version " + version); 213 t << "\n\t" << ("-$(IDC) $(TARGET) /idl " + var("OBJECTS_DIR") + targetfilename + ".idl -version " + version);
196 t << "\n\t" << ("-$(IDL) tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"); 214 t << "\n\t" << ("-$(IDL) /nologo " + var("OBJECTS_DIR") + targetfilename + ".idl /tlb " + var("OBJECTS_DIR") + targetfilename + ".tlb");
197 t << "\n\t" << ("-$(IDC) $(TARGET) /tlb tmp\\" + targetfilename + ".tlb"); 215 t << "\n\t" << ("-$(IDC) $(TARGET) /tlb " + var("OBJECTS_DIR") + targetfilename + ".tlb");
198 t << "\n\t" << ("-$(IDC) $(TARGET) /regserver" ); 216 t << "\n\t" << ("-$(IDC) $(TARGET) /regserver" );
199 } else { 217 } else {
200 t << "\n\t" << ("-$(TARGET) -dumpidl tmp\\" + targetfilename + ".idl -version " + version); 218 t << "\n\t" << ("-$(TARGET) -dumpidl " + var("OBJECTS_DIR") + targetfilename + ".idl -version " + version);
201 t << "\n\t" << ("-$(IDL) tmp\\" + targetfilename + ".idl /nologo /o tmp\\" + targetfilename + ".midl /tlb tmp\\" + targetfilename + ".tlb /iid tmp\\dump.midl /dlldata tmp\\dump.midl /cstub tmp\\dump.midl /header tmp\\dump.midl /proxy tmp\\dump.midl /sstub tmp\\dump.midl"); 219 t << "\n\t" << ("-$(IDL) /nologo " + var("OBJECTS_DIR") + targetfilename + ".idl /tlb " + var("OBJECTS_DIR") + targetfilename + ".tlb");
202 t << "\n\t" << ("-$(IDC) $(TARGET) /tlb tmp\\" + targetfilename + ".tlb"); 220 t << "\n\t" << ("-$(IDC) $(TARGET) /tlb " + var("OBJECTS_DIR") + targetfilename + ".tlb");
203 t << "\n\t" << ("-$(TARGET) -regserver"); 221 t << "\n\t" << ("-$(TARGET) -regserver");
204 } 222 }
205 } 223 }
206 t << endl << endl; 224 t << endl << endl;
@@ -208,34 +226,62 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
208 if(!project->variables()["RC_FILE"].isEmpty()) { 226 if(!project->variables()["RC_FILE"].isEmpty()) {
209 t << var("RES_FILE") << ": " << var("RC_FILE") << "\n\t" 227 t << var("RES_FILE") << ": " << var("RC_FILE") << "\n\t"
210 << var("QMAKE_RC") << " " << var("RC_FILE") << endl << endl; 228 << var("QMAKE_RC") << " " << var("RC_FILE") << endl << endl;
211 } 229 }
212 t << "mocables: $(SRCMOC)" << endl << endl; 230 t << "mocables: $(SRCMOC)" << endl
231 << "uicables: $(UICIMPLS) $(UICDECLS)" << endl << endl;
213 232
214 writeMakeQmake(t); 233 writeMakeQmake(t);
215 234
235 QStringList dist_files = Option::mkfile::project_files;
236 if(!project->isEmpty("QMAKE_INTERNAL_INCLUDED_FILES"))
237 dist_files += project->variables()["QMAKE_INTERNAL_INCLUDED_FILES"];
238 if(!project->isEmpty("TRANSLATIONS"))
239 dist_files << var("TRANSLATIONS");
240 if(!project->isEmpty("FORMS")) {
241 QStringList &forms = project->variables()["FORMS"];
242 for(QStringList::Iterator formit = forms.begin(); formit != forms.end(); ++formit) {
243 QString ui_h = fileFixify((*formit) + Option::h_ext.first());
244 if(QFile::exists(ui_h) )
245 dist_files << ui_h;
246 }
247 }
216 t << "dist:" << "\n\t" 248 t << "dist:" << "\n\t"
217 << "$(ZIP) " << var("PROJECT") << ".zip " << var("PROJECT") << ".pro $(SOURCES) $(HEADERS) $(DIST) $(FORMS)" 249 << "$(ZIP) " << var("QMAKE_ORIG_TARGET") << ".zip " << "$(SOURCES) $(HEADERS) $(DIST) $(FORMS) "
218 << endl << endl; 250 << dist_files.join(" ") << " " << var("TRANSLATIONS") << " " << var("IMAGES") << endl << endl;
251
252 t << "uiclean:";
253 QString uiclean = varGlue("UICDECLS" ,"\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","") + varGlue("UICIMPLS" ,"\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","");
254 if ( uiclean.isEmpty() ) {
255 // Borland make does not like an empty command section
256 uiclean = "\n\t@cd .";
257 }
258 t << uiclean << endl;
219 259
220 t << "clean:\n" 260 t << "mocclean:";
221 << varGlue("OBJECTS","\t-del ","\n\t-del ","") 261 QString mocclean = varGlue("SRCMOC" ,"\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","") + varGlue("OBJMOC" ,"\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","");
222 << varGlue("SRCMOC" ,"\n\t-del ","\n\t-del ","") 262 if ( mocclean.isEmpty() ) {
223 << varGlue("OBJMOC" ,"\n\t-del ","\n\t-del ","") 263 // Borland make does not like an empty command section
224 << varGlue("UICDECLS" ,"\n\t-del ","\n\t-del ","") 264 mocclean = "\n\t@cd .";
225 << varGlue("UICIMPLS" ,"\n\t-del ","\n\t-del ","") 265 }
226 << varGlue("QMAKE_CLEAN","\n\t-del ","\n\t-del ","") 266 t << mocclean << endl;
227 << varGlue("CLEAN_FILES","\n\t-del ","\n\t-del ",""); 267
268 t << "clean: uiclean mocclean"
269 << varGlue("OBJECTS","\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","")
270 << varGlue("QMAKE_CLEAN","\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","")
271 << varGlue("CLEAN_FILES","\n\t-$(DEL_FILE) ","\n\t-$(DEL_FILE) ","");
228 if ( project->isActiveConfig("activeqt")) { 272 if ( project->isActiveConfig("activeqt")) {
229 t << ("\n\t-del tmp\\" + targetfilename + ".*"); 273 t << ("\n\t-$(DEL_FILE) " + var("OBJECTS_DIR") + targetfilename + ".idl");
230 t << "\n\t-del tmp\\dump.*"; 274 t << ("\n\t-$(DEL_FILE) " + var("OBJECTS_DIR") + targetfilename + ".tlb");
231 } 275 }
232 if(!project->isEmpty("IMAGES")) 276 if(!project->isEmpty("IMAGES"))
233 t << varGlue("QMAKE_IMAGE_COLLECTION", "\n\t-del ", "\n\t-del ", ""); 277 t << varGlue("QMAKE_IMAGE_COLLECTION", "\n\t-$(DEL_FILE) ", "\n\t-$(DEL_FILE) ", "");
278 t << endl;
234 279
235 // blasted user defined targets 280 // user defined targets
281 QStringList::Iterator it;
236 QStringList &qut = project->variables()["QMAKE_EXTRA_WIN_TARGETS"]; 282 QStringList &qut = project->variables()["QMAKE_EXTRA_WIN_TARGETS"];
237 for(QStringList::Iterator it = qut.begin(); it != qut.end(); ++it) { 283 for(it = qut.begin(); it != qut.end(); ++it) {
238 QString targ = var((*it) + ".target"), 284 QString targ = var((*it) + ".target"),
239 cmd = var((*it) + ".commands"), deps; 285 cmd = var((*it) + ".commands"), deps;
240 if(targ.isEmpty()) 286 if(targ.isEmpty())
241 targ = (*it); 287 targ = (*it);
@@ -245,16 +291,68 @@ BorlandMakefileGenerator::writeBorlandParts(QTextStream &t)
245 if(dep.isEmpty()) 291 if(dep.isEmpty())
246 dep = (*dep_it); 292 dep = (*dep_it);
247 deps += " " + dep; 293 deps += " " + dep;
248 } 294 }
295 if(!project->variables()["QMAKE_NOFORCE"].isEmpty() &&
296 project->variables()[(*it) + ".CONFIG"].findIndex("phony") != -1)
297 deps += QString(" ") + "FORCE";
249 t << "\n\n" << targ << ":" << deps << "\n\t" 298 t << "\n\n" << targ << ":" << deps << "\n\t"
250 << cmd; 299 << cmd;
251 } 300 }
252 301
253 t << endl << endl; 302 t << endl << endl;
254 303
304 QStringList &quc = project->variables()["QMAKE_EXTRA_WIN_COMPILERS"];
305 for(it = quc.begin(); it != quc.end(); ++it) {
306 QString tmp_out = project->variables()[(*it) + ".output"].first();
307 QString tmp_cmd = project->variables()[(*it) + ".commands"].join(" ");
308 QString tmp_dep = project->variables()[(*it) + ".depends"].join(" ");
309 QStringList &vars = project->variables()[(*it) + ".variables"];
310 if(tmp_out.isEmpty() || tmp_cmd.isEmpty())
311 continue;
312 QStringList &tmp = project->variables()[(*it) + ".input"];
313 for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {
314 QStringList &inputs = project->variables()[(*it2)];
315 for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {
316 QFileInfo fi(Option::fixPathToLocalOS((*input)));
317 QString in = Option::fixPathToTargetOS((*input), FALSE),
318 out = tmp_out, cmd = tmp_cmd, deps;
319 out.replace("${QMAKE_FILE_BASE}", fi.baseName());
320 out.replace("${QMAKE_FILE_NAME}", fi.fileName());
321 cmd.replace("${QMAKE_FILE_BASE}", fi.baseName());
322 cmd.replace("${QMAKE_FILE_OUT}", out);
323 cmd.replace("${QMAKE_FILE_NAME}", fi.fileName());
324 for(QStringList::Iterator it3 = vars.begin(); it3 != vars.end(); ++it3)
325 cmd.replace("$(" + (*it3) + ")", "$(QMAKE_COMP_" + (*it3)+")");
326 if(!tmp_dep.isEmpty()) {
327 char buff[256];
328 QString dep_cmd = tmp_dep;
329 dep_cmd.replace("${QMAKE_FILE_NAME}", fi.fileName());
330 if(FILE *proc = QT_POPEN(dep_cmd.latin1(), "r")) {
331 while(!feof(proc)) {
332 int read_in = int(fread(buff, 1, 255, proc));
333 if(!read_in)
334 break;
335 int l = 0;
336 for(int i = 0; i < read_in; i++) {
337 if(buff[i] == '\n' || buff[i] == ' ') {
338 deps += " " + QCString(buff+l, (i - l) + 1);
339 l = i;
340 }
341 }
342 }
343 fclose(proc);
344 }
345 }
346 t << out << ": " << in << deps << "\n\t"
347 << cmd << endl << endl;
348 }
349 }
350 }
351 t << endl;
352
255 t << "distclean: clean" 353 t << "distclean: clean"
256 << "\n\t-del $(TARGET)" 354 << "\n\t-$(DEL_FILE) $(TARGET)"
257 << endl << endl; 355 << endl << endl;
258} 356}
259 357
260void 358void
@@ -279,14 +377,25 @@ BorlandMakefileGenerator::init()
279 project->variables()["QMAKE"].append("qmake"); 377 project->variables()["QMAKE"].append("qmake");
280 return; 378 return;
281 } 379 }
282 380
381 if(project->isEmpty("QMAKE_INSTALL_FILE"))
382 project->variables()["QMAKE_INSTALL_FILE"].append("$(COPY_FILE)");
383 if(project->isEmpty("QMAKE_INSTALL_DIR"))
384 project->variables()["QMAKE_INSTALL_DIR"].append("$(COPY_DIR)");
385
283 bool is_qt = (project->first("TARGET") == "qt"QTDLL_POSTFIX || project->first("TARGET") == "qtmt"QTDLL_POSTFIX); 386 bool is_qt = (project->first("TARGET") == "qt"QTDLL_POSTFIX || project->first("TARGET") == "qtmt"QTDLL_POSTFIX);
284 QStringList &configs = project->variables()["CONFIG"]; 387 QStringList &configs = project->variables()["CONFIG"];
285 if (project->isActiveConfig("shared")) 388 if (project->isActiveConfig("shared"))
286 project->variables()["DEFINES"].append("QT_DLL"); 389 project->variables()["DEFINES"].append("QT_DLL");
287 if (project->isActiveConfig("qt_dll")) 390 if (project->isActiveConfig("qt_dll"))
288 if(configs.findIndex("qt") == -1) configs.append("qt"); 391 if(configs.findIndex("qt") == -1) configs.append("qt");
392 if ( project->isActiveConfig("qtopia") ) {
393 if(configs.findIndex("qtopialib") == -1)
394 configs.append("qtopialib");
395 if(configs.findIndex("qtopiainc") == -1)
396 configs.append("qtopiainc");
397 }
289 if ( project->isActiveConfig("qt") ) { 398 if ( project->isActiveConfig("qt") ) {
290 if ( project->isActiveConfig("plugin") ) { 399 if ( project->isActiveConfig("plugin") ) {
291 project->variables()["CONFIG"].append("dll"); 400 project->variables()["CONFIG"].append("dll");
292 project->variables()["DEFINES"].append("QT_PLUGIN"); 401 project->variables()["DEFINES"].append("QT_PLUGIN");
@@ -355,8 +464,15 @@ BorlandMakefileGenerator::init()
355 } 464 }
356 if ( project->isActiveConfig("qt") || project->isActiveConfig("opengl") ) { 465 if ( project->isActiveConfig("qt") || project->isActiveConfig("opengl") ) {
357 project->variables()["CONFIG"].append("windows"); 466 project->variables()["CONFIG"].append("windows");
358 } 467 }
468 if ( project->isActiveConfig("qtopiainc") )
469 project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_QTOPIA"];
470 if ( project->isActiveConfig("qtopialib") ) {
471 if(!project->isEmpty("QMAKE_LIBDIR_QTOPIA"))
472 project->variables()["QMAKE_LIBDIR"] += project->variables()["QMAKE_LIBDIR_QTOPIA"];
473 project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QTOPIA"];
474 }
359 if ( project->isActiveConfig("qt") ) { 475 if ( project->isActiveConfig("qt") ) {
360 project->variables()["CONFIG"].append("moc"); 476 project->variables()["CONFIG"].append("moc");
361 project->variables()["INCLUDEPATH"] +=project->variables()["QMAKE_INCDIR_QT"]; 477 project->variables()["INCLUDEPATH"] +=project->variables()["QMAKE_INCDIR_QT"];
362 project->variables()["QMAKE_LIBDIR"] += project->variables()["QMAKE_LIBDIR_QT"]; 478 project->variables()["QMAKE_LIBDIR"] += project->variables()["QMAKE_LIBDIR_QT"];
@@ -467,12 +583,27 @@ BorlandMakefileGenerator::init()
467 if ( project->isActiveConfig("moc") ) { 583 if ( project->isActiveConfig("moc") ) {
468 setMocAware(TRUE); 584 setMocAware(TRUE);
469 } 585 }
470 project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"]; 586 project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"];
587 // Update -lname to name.lib, and -Ldir to
588 QStringList &libList = project->variables()["QMAKE_LIBS"];
589 for( QStringList::Iterator stIt = libList.begin(); stIt != libList.end(); ) {
590 QString s = *stIt;
591 if( s.startsWith( "-l" ) ) {
592 stIt = libList.remove( stIt );
593 stIt = libList.insert( stIt, s.mid( 2 ) + ".lib" );
594 } else if( s.startsWith( "-L" ) ) {
595 stIt = libList.remove( stIt );
596 project->variables()["QMAKE_LIBDIR"].append(QDir::convertSeparators(s.mid( 2 )));
597 } else {
598 stIt++;
599 }
600 }
471 project->variables()["QMAKE_FILETAGS"] += QStringList::split(' ', 601 project->variables()["QMAKE_FILETAGS"] += QStringList::split(' ',
472 "HEADERS SOURCES DEF_FILE RC_FILE TARGET QMAKE_LIBS DESTDIR DLLDESTDIR INCLUDEPATH"); 602 "HEADERS SOURCES DEF_FILE RC_FILE TARGET QMAKE_LIBS DESTDIR DLLDESTDIR INCLUDEPATH");
473 QStringList &l = project->variables()["QMAKE_FILETAGS"]; 603 QStringList &l = project->variables()["QMAKE_FILETAGS"];
474 for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) { 604 QStringList::Iterator it;
605 for(it = l.begin(); it != l.end(); ++it) {
475 QStringList &gdmf = project->variables()[(*it)]; 606 QStringList &gdmf = project->variables()[(*it)];
476 for(QStringList::Iterator inner = gdmf.begin(); inner != gdmf.end(); ++inner) 607 for(QStringList::Iterator inner = gdmf.begin(); inner != gdmf.end(); ++inner)
477 (*inner) = Option::fixPathToTargetOS((*inner), FALSE); 608 (*inner) = Option::fixPathToTargetOS((*inner), FALSE);
478 } 609 }
@@ -485,8 +616,9 @@ BorlandMakefileGenerator::init()
485 } 616 }
486 project->variables()["RES_FILE"] = project->variables()["RC_FILE"]; 617 project->variables()["RES_FILE"] = project->variables()["RC_FILE"];
487 project->variables()["RES_FILE"].first().replace(".rc",".res"); 618 project->variables()["RES_FILE"].first().replace(".rc",".res");
488 project->variables()["POST_TARGETDEPS"] += project->variables()["RES_FILE"]; 619 project->variables()["POST_TARGETDEPS"] += project->variables()["RES_FILE"];
620 project->variables()["CLEAN_FILES"] += project->variables()["RES_FILE"];
489 } 621 }
490 MakefileGenerator::init(); 622 MakefileGenerator::init();
491 if ( !project->variables()["VERSION"].isEmpty()) { 623 if ( !project->variables()["VERSION"].isEmpty()) {
492 QStringList l = QStringList::split('.', project->first("VERSION")); 624 QStringList l = QStringList::split('.', project->first("VERSION"));
@@ -505,5 +637,25 @@ BorlandMakefileGenerator::init()
505 } 637 }
506 project->variables()["QMAKE_CLEAN"].append( 638 project->variables()["QMAKE_CLEAN"].append(
507 project->first("DESTDIR") + project->first("TARGET") + tdsPostfix ); 639 project->first("DESTDIR") + project->first("TARGET") + tdsPostfix );
508 } 640 }
641
642 QStringList &quc = project->variables()["QMAKE_EXTRA_WIN_COMPILERS"];
643 for(it = quc.begin(); it != quc.end(); ++it) {
644 QString tmp_out = project->variables()[(*it) + ".output"].first();
645 if(tmp_out.isEmpty())
646 continue;
647 QStringList &tmp = project->variables()[(*it) + ".input"];
648 for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) {
649 QStringList &inputs = project->variables()[(*it2)];
650 for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) {
651 QFileInfo fi(Option::fixPathToLocalOS((*input)));
652 QString in = Option::fixPathToTargetOS((*input), FALSE),
653 out = tmp_out;
654 out.replace("${QMAKE_FILE_BASE}", fi.baseName());
655 out.replace("${QMAKE_FILE_NAME}", fi.fileName());
656 if(project->variables()[(*it) + ".CONFIG"].findIndex("no_link") == -1)
657 project->variables()["OBJCOMP"] += out;
658 }
659 }
660 }
509} 661}