⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 metrowerks_xml.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			t << "\t\t<SETTING><NAME>MWMacOSPackager_UsePackager</NAME>"			  << "<VALUE>1</VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_FolderToPackage</NAME>" << "\n"			  << "\t\t\t<SETTING><NAME>Path</NAME><VALUE>" << outdir 			  << "</VALUE></SETTING>" << "\n"			  << "\t\t\t<SETTING><NAME>PathFormat</NAME><VALUE>MacOS</VALUE></SETTING>" 			  << "\n"			  << "\t\t\t<SETTING><NAME>PathRoot</NAME><VALUE>" << volume 			  << "</VALUE></SETTING>" << "\n"			  << "\t\t</SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_CreateClassicAlias</NAME>"			  << "<VALUE>0</VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_ClassicAliasMethod</NAME>"			  << "<VALUE>UseTargetOutput</VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_ClassicAliasPath</NAME>"			  << "<VALUE></VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_CreatePkgInfo</NAME>"			  << "<VALUE>1</VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_PkgCreatorType</NAME>" 			  << "<VALUE>CUTE</VALUE></SETTING>" << "\n"			  << "\t\t<SETTING><NAME>MWMacOSPackager_PkgFileType</NAME>" 			  << "<VALUE>APPL</VALUE></SETTING>" << endl;		    }		}	    } else if(variable == "CODEWARRIOR_FILETYPE") {		if(project->first("TEMPLATE") == "lib")			t << "MYDL";		else			t << "MEXE";	    } else if(variable == "CODEWARRIOR_QTDIR") {		t << getenv("QTDIR");	    } else if(variable == "CODEWARRIOR_CACHEMODDATES") {		t << "true";	    } else {		t << var(variable);	    }	}	t << line << endl;    }    t << endl;    file.close();    if(mocAware()) { 	QString mocs = project->first("MOCS");	QFile mocfile(mocs);	if(!mocfile.open(IO_WriteOnly)) {	    fprintf(stderr, "Cannot open MOCS file: %s\n", mocs.latin1());	} else {	    createFork(mocs);	    QTextStream mocs(&mocfile);	    QStringList &list = project->variables()["SRCMOC"];	    for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) {		QString src = findMocSource((*it));		if(src.findRev('/') != -1)		    src = src.right(src.length() - src.findRev('/') - 1);		mocs << src << endl;	    }	    mocfile.close();	}    }    if(!project->isEmpty("FORMS")) { 	QString uics = project->first("UICS");	QFile uicfile(uics);	if(!uicfile.open(IO_WriteOnly)) {	    fprintf(stderr, "Cannot open UICS file: %s\n", uics.latin1());	} else {	    createFork(uics);	    QTextStream uics(&uicfile);	    QStringList &list = project->variables()["FORMS"];	    for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) {		QString ui = (*it);		if(ui.findRev('/') != -1)		    ui = ui.right(ui.length() - ui.findRev('/') - 1);		uics << ui << endl;	    }	    uicfile.close();	}    }    if(!project->isEmpty("CODEWARRIOR_PREFIX_HEADER")) {	QFile prefixfile(project->first("CODEWARRIOR_PREFIX_HEADER"));	if(!prefixfile.open(IO_WriteOnly)) {	    fprintf(stderr, "Cannot open PREFIX file: %s\n", prefixfile.name().latin1());	} else {	    createFork(project->first("CODEWARRIOR_PREFIX_HEADER"));	    QTextStream prefix(&prefixfile);	    QStringList &list = project->variables()["DEFINES"];	    for(QStringList::Iterator it = list.begin(); it != list.end(); ++it) {		if((*it).find('=') != -1) {		    int x = (*it).find('=');		    prefix << "#define " << (*it).left(x) << " " << (*it).right((*it).length() - x - 1) << endl;		} else {		    prefix << "#define " << (*it) << endl;		}	    }	    prefixfile.close();	}    }    return TRUE;}voidMetrowerksMakefileGenerator::init(){    if(init_flag)	return;    init_flag = TRUE;    if ( project->isEmpty("QMAKE_XML_TEMPLATE") ) 	project->variables()["QMAKE_XML_TEMPLATE"].append("mwerkstmpl.xml");    QStringList &configs = project->variables()["CONFIG"];    if(project->isActiveConfig("qt")) {	if(configs.findIndex("moc")) configs.append("moc");	if ( !( (project->first("TARGET") == "qt") || (project->first("TARGET") == "qte") ||		(project->first("TARGET") == "qt-mt") ) ) 	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_QT"];	if(configs.findIndex("moc")) 	    configs.append("moc");	if ( !project->isActiveConfig("debug") ) 	    project->variables()["DEFINES"].append("QT_NO_DEBUG");    }    //version handling    if(project->variables()["VERSION"].isEmpty())	project->variables()["VERSION"].append("1.0." + 					       (project->isEmpty("VER_PAT") ? QString("0") : 						project->first("VER_PAT")) );    QStringList ver = QStringList::split('.', project->first("VERSION"));    ver << "0" << "0"; //make sure there are three    project->variables()["VER_MAJ"].append(ver[0]);    project->variables()["VER_MIN"].append(ver[1]);    project->variables()["VER_PAT"].append(ver[2]);    if( !project->isEmpty("LIBS") )	project->variables()["QMAKE_LIBS"] += project->variables()["LIBS"];    if( project->variables()["QMAKE_EXTENSION_SHLIB"].isEmpty() )	project->variables()["QMAKE_EXTENSION_SHLIB"].append( "dylib" );    if ( project->isActiveConfig("moc") ) {	QString mocfile = project->first("TARGET");	if(project->first("TEMPLATE") == "lib")	    mocfile += project->isActiveConfig("staticlib") ? "_static" : "_shared";	project->variables()["MOCS"].append(mocfile + ".mocs");	setMocAware(TRUE);    }    if(!project->isEmpty("FORMS")) {	QString uicfile = project->first("TARGET");	if(project->first("TEMPLATE") == "lib")	    uicfile += project->isActiveConfig("staticlib") ? "_static" : "_shared";	project->variables()["UICS"].append(uicfile + ".uics");    }    if(project->isEmpty("DESTDIR"))	project->variables()["DESTDIR"].append(QDir::currentDirPath());    MakefileGenerator::init();    if ( project->isActiveConfig("opengl") ) {	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_OPENGL"];	if ( (project->first("TARGET") == "qt") || (project->first("TARGET") == "qte") ||	     (project->first("TARGET") == "qt-mt") )	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_OPENGL_QT"];	else 	    project->variables()["QMAKE_LIBS"] += project->variables()["QMAKE_LIBS_OPENGL"];    }    if(project->isActiveConfig("qt"))	project->variables()["INCLUDEPATH"] += project->variables()["QMAKE_INCDIR_QT"];    if(project->isEmpty("FRAMEWORKPATH"))	project->variables()["FRAMEWORKPATH"].append("/System/Library/Frameworks/");    //set the target up    project->variables()["TARGET_STEM"] = project->variables()["TARGET"];    if(project->first("TEMPLATE") == "lib") {	if(project->isActiveConfig("staticlib"))	    project->variables()["TARGET"].first() =  "lib" + project->first("TARGET") + ".lib";	else	    project->variables()["TARGET"].first() =  "lib" + project->first("TARGET") + "." +						      project->first("QMAKE_EXTENSION_SHLIB");	project->variables()["CODEWARRIOR_VERSION"].append(project->first("VER_MAJ") +							  project->first("VER_MIN") +							  project->first("VER_PAT"));    } else {	project->variables()["CODEWARRIOR_VERSION"].append("0");	if(project->isEmpty("QMAKE_ENTRYPOINT"))	   project->variables()["QMAKE_ENTRYPOINT"].append("start");	project->variables()["CODEWARRIOR_ENTRYPOINT"].append(	    project->first("QMAKE_ENTRYPOINT"));    }}QStringMetrowerksMakefileGenerator::findTemplate(const QString &file){    QString ret;    if(!QFile::exists(ret = file) &&        !QFile::exists((ret = Option::mkfile::qmakespec + QDir::separator() + file)) &&        !QFile::exists((ret = QString(getenv("QTDIR")) + "/mkspecs/mac-mwerks/" + file)) &&       !QFile::exists((ret = (QString(getenv("HOME")) + "/.tmake/" + file))))	return "";    return ret;}boolMetrowerksMakefileGenerator::createFork(const QString &f){#if !defined(QWS) && defined(Q_OS_MACX)    FSRef fref;    FSSpec fileSpec;    if(QFile::exists(f)) {	mode_t perms = 0;	{	    struct stat s;	    stat(f.latin1(), &s);	    if(!(s.st_mode & S_IWUSR)) {		perms = s.st_mode;		chmod(f.latin1(), perms | S_IWUSR);	    }	}	FILE *o = fopen(f.latin1(), "a");	if(!o)	    return FALSE;	if(FSPathMakeRef((const UInt8 *)f.latin1(), &fref, NULL) == noErr) {	    if(FSGetCatalogInfo(&fref, kFSCatInfoNone, NULL, NULL, &fileSpec, NULL) == noErr) 		FSpCreateResFile(&fileSpec, 'CUTE', 'TEXT', smSystemScript);	    else 		qDebug("bogus %d", __LINE__);	} else 	    qDebug("bogus %d", __LINE__);	fclose(o);	if(perms)	    chmod(f.latin1(), perms);    }#else    Q_UNUSED(f)#endif    return TRUE;}boolMetrowerksMakefileGenerator::fixifyToMacPath(QString &p, QString &v, bool ){    v = "Absolute";    if(p.find(':') != -1) //guess its macish already	return TRUE;    static QString st_volume;    if(st_volume.isEmpty()) {	st_volume = var("QMAKE_VOLUMENAME");#if !defined(QWS) && defined(Q_OS_MACX)	if(st_volume.isEmpty()) {	    uchar foo[512];	    HVolumeParam pb;	    memset(&pb, '\0', sizeof(pb));	    pb.ioVRefNum = 0;	    pb.ioNamePtr = foo;	    if(PBHGetVInfoSync((HParmBlkPtr)&pb) == noErr) {		int len = foo[0];		memcpy(foo,foo+1, len);		foo[len] = '\0';		st_volume = (char *)foo;	    }	}#endif    }    QString volume = st_volume;    fixEnvVariables(p);    if(p.startsWith("\"") && p.endsWith("\""))	p = p.mid(1, p.length() - 2);    if(p.isEmpty()) 	return FALSE;    if(!p.endsWith("/"))	p += "/";    if(QDir::isRelativePath(p)) {	if(p.startsWith("{")) {	    int eoc = p.find('}');	    if(eoc == -1)		return FALSE;	    volume = p.mid(1, eoc - 1);	    p = p.right(p.length() - eoc - 1);	} else {	    QFileInfo fi(p);	    if(fi.convertToAbs()) //strange		return FALSE;	    p = fi.filePath();	}     }     p = QDir::cleanDirPath(p);    if(!volume.isEmpty()) 	v = volume;    p.replace("/", ":");    if(p.right(1) != ":")	p += ':';    return TRUE;}voidMetrowerksMakefileGenerator::processPrlFiles(){    QPtrList<MakefileDependDir> libdirs;    libdirs.setAutoDelete(TRUE);    const QString lflags[] = { "QMAKE_LIBS", QString::null };    for(int i = 0; !lflags[i].isNull(); i++) {	for(bool ret = FALSE; TRUE; ret = FALSE) {	    QStringList l_out;	    QStringList &l = project->variables()[lflags[i]];	    for(QStringList::Iterator it = l.begin(); it != l.end(); ++it) {		QString opt = (*it);		if(opt.startsWith("-")) {		    if(opt.startsWith("-L")) {			QString r = opt.right(opt.length() - 2), l = r;			fixEnvVariables(l);			libdirs.append(new MakefileDependDir(r.replace( "\"", ""),							     l.replace( "\"", "")));		    } else if(opt.left(2) == "-l") {			QString lib = opt.right(opt.length() - 2), prl;			for(MakefileDependDir *mdd = libdirs.first(); mdd; mdd = libdirs.next() ) {			    prl = mdd->local_dir + Option::dir_sep + "lib" + lib;			    if(processPrlFile(prl)) {				if(prl.startsWith(mdd->local_dir))				    prl.replace(0, mdd->local_dir.length(), mdd->real_dir);				QRegExp reg("^.*lib(" + lib + "[^.]*)\\." + 					    project->first("QMAKE_EXTENSION_SHLIB") + "$");				if(reg.exactMatch(prl))				    prl = "-l" + reg.cap(1);				opt = prl;				ret = TRUE;				break;			    }			}		    } else if(opt == "-framework") {			l_out.append(opt);			++it;			opt = (*it);			QString prl = "/System/Library/Frameworks/" + opt +				      ".framework/" + opt;			if(processPrlFile(prl))			    ret = TRUE;		    }		    if(!opt.isEmpty())			l_out.append(opt);		} else {		    if(processPrlFile(opt))			ret = TRUE;		    if(!opt.isEmpty())			l_out.append(opt);		}	    }	    if(ret)		l = l_out;	    else		break;	}    }}voidMetrowerksMakefileGenerator::processPrlVariable(const QString &var, const QStringList &l){    if(var == "QMAKE_PRL_LIBS") {	QStringList &out = project->variables()["QMAKE_LIBS"];	for(QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) {	    bool append = TRUE;	    if((*it).startsWith("-")) {		if((*it).startsWith("-l") || (*it).startsWith("-L")) {		    append = out.findIndex((*it)) == -1;		} else if((*it).startsWith("-framework")) {		    ++it;		    for(QStringList::ConstIterator outit = out.begin(); 			outit != out.end(); ++it) {			if((*outit) == "-framework") {			    ++outit;			    if((*outit) == (*it)) {				append = FALSE;				break;			    }			}		    }		}	    } else if(QFile::exists((*it))) {		append = out.findIndex((*it));	    }	    if(append)		out.append((*it));	}    } else {	MakefileGenerator::processPrlVariable(var, l);    }}boolMetrowerksMakefileGenerator::openOutput(QFile &file) const{    QString outdir;    if(!file.name().isEmpty()) {	QFileInfo fi(file);	if(fi.isDir())	    outdir = file.name() + QDir::separator();    }    if(!outdir.isEmpty() || file.name().isEmpty()) 	file.setName(outdir + project->first("TARGET") + ".xml");    return MakefileGenerator::openOutput(file);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -