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

📄 configure

📁 QCA的OPENSSL模块
💻
📖 第 1 页 / 共 3 页
字号:
			"QT -= gui\n";			proextra += qca_crypto_prf;		} else {			proextra =			"CONFIG += qt crypto\n"			"QT -= gui\n";		}		QString str =		"#include <QtCrypto>\n"		"\n"		"int main()\n"		"{\n"		"	unsigned long x = QCA_VERSION;\n"		"	if(x >= 0x020000 && x < 0x030000) return 0; else return 1;\n"		"}\n";		if(release)		{			int ret;			if(!conf->doCompileAndLink(str, QStringList(), QString(), proextra + "CONFIG += release\n", &ret))				return false;			if(ret != 0)				return false;		}		if(debug)		{			int ret;			if(!conf->doCompileAndLink(str, QStringList(), QString(), proextra + "CONFIG += debug\n", &ret))				return false;			if(ret != 0)				return false;		}		if(!qca_prefix.isEmpty())			conf->addExtra(qca_crypto_prf);		else			conf->addExtra("CONFIG += crypto\n");		return true;	}};#line 1 "openssl.qcm"/*-----BEGIN QCMOD-----name: OpenSSLarg: with-openssl-inc=[path],Path to OpenSSL include filesarg: with-openssl-lib=[path],Path to OpenSSL library files-----END QCMOD-----*/class qc_openssl : public ConfObj{public:	qc_openssl(Conf *c) : ConfObj(c) {}	QString name() const { return "OpenSSL"; }	QString shortname() const { return "openssl"; }	bool exec()	{		QString inc, lib;		QString s;		bool kb = false;		QString kbdir = "/usr/kerberos/include";		// Redhat 9?		if(QFileInfo(kbdir).exists())			kb = true;		s = conf->getenv("QC_WITH_OPENSSL_INC");		if(!s.isEmpty()) {			if(!conf->checkHeader(s, "openssl/ssl.h"))				return false;			inc = s;		}		else {			if(!conf->findHeader("openssl/ssl.h", QStringList(), &s))				return false;			inc = s;		}		s = conf->getenv("QC_WITH_OPENSSL_LIB");		if(!s.isEmpty()) {			if(!conf->checkLibrary(s, "ssl"))				return false;			lib = s;		}		else {			if(!conf->findLibrary("ssl", &s))				return false;			lib = s;		}		// is it at least openssl 0.9.7?		QString str =			"#include<openssl/opensslv.h>\n"			"int main()\n"			"{\n"			"  unsigned long x = OPENSSL_VERSION_NUMBER;\n"			"  if(x >= 0x00907000) return 0; else return 1;\n"			"}\n";		QStringList incs;		QString libs;		if(!inc.isEmpty())			incs += inc;		if(kb)			incs += kbdir;		if(!lib.isEmpty())			libs += QString("-L") + lib + ' ';		libs += "-lssl -lcrypto";		int ret;		if(!conf->doCompileAndLink(str, incs, libs, QString(), &ret))			return false;		if(ret == 0)			conf->addDefine("OSSL_097");		if(!inc.isEmpty())			conf->addIncludePath(inc);		if(kb)			conf->addIncludePath(kbdir);		if(!lib.isEmpty())			conf->addLib(QString("-L") + s);		conf->addLib("-lssl -lcrypto");		return true;	}};#line 1 "qcapluginpath.qcm"/*-----BEGIN QCMOD-----name: qcapluginpathsection: projectarg: plugins-path=[path],Path to install to.  Default: qtdir/plugins-----END QCMOD-----*/class qc_qcapluginpath : public ConfObj{public:	qc_qcapluginpath(Conf *c) : ConfObj(c) {}	QString name() const { return "qcapluginpath"; }	QString shortname() const { return "qcapluginpath"; }	// no output	QString checkString() const { return QString(); }	bool exec()	{		QString plugins_path = conf->getenv("QC_PLUGINS_PATH");		// default to qtdir		if(plugins_path.isEmpty())			plugins_path = QLibraryInfo::location(QLibraryInfo::PluginsPath);		// install into plugins path		QString str;		str += QString(		"target.path=%1/crypto\n"		"INSTALLS += target\n"		).arg(plugins_path);		conf->addExtra(str);		return true;	}};EOTcat >$1/modules_new.cpp <<EOT    o = new qc_buildmode(conf);    o->required = true;    o->disabled = false;    o = new qc_universal(conf);    o->required = true;    o->disabled = false;    o = new qc_qca(conf);    o->required = true;    o->disabled = false;    o = new qc_openssl(conf);    o->required = true;    o->disabled = false;    o = new qc_qcapluginpath(conf);    o->required = true;    o->disabled = false;EOTcat >$1/conf4.h <<EOT// For license information, see the COPYING file in the qconf base directory.#ifndef QC_CONF4_H#define QC_CONF4_H#include <QtCore>class Conf;enum VersionMode { VersionMin, VersionExact, VersionMax, VersionAny };// ConfObj//// Subclass ConfObj to create a new configuration module.class ConfObj{public:	Conf *conf;	bool required;	bool disabled;	bool success;	ConfObj(Conf *c);	virtual ~ConfObj();	// long or descriptive name of what is being checked/performed	// example: "KDE >= 3.3"	virtual QString name() const = 0;	// short name	// example: "kde"	virtual QString shortname() const = 0;	// string to display during check	// default: "Checking for [name] ..."	virtual QString checkString() const;	// string to display after check	// default: "yes" or "no", based on result of exec()	virtual QString resultString() const;	// this is where the checking code goes	virtual bool exec() = 0;};// Conf//// Interact with this class from your ConfObj to perform detection// operations and to output configuration parameters.class Conf{public:	bool debug_enabled;	QString qmake_path;	QString maketool;	QString DEFINES;	QString INCLUDEPATH;	QString LIBS;	QString extra;	QList<ConfObj*> list;	QMap<QString,QString> vars;	Conf();	~Conf();	QString getenv(const QString &var);	QString qvar(const QString &s);	bool exec();	void debug(const QString &s);	QString expandIncludes(const QString &inc);	QString expandLibs(const QString &lib);	int doCommand(const QString &s, QByteArray *out = 0);	int doCommand(const QString &prog, const QStringList &args, QByteArray *out = 0);	bool doCompileAndLink(const QString &filedata, const QStringList &incs, const QString &libs, const QString &proextra, int *retcode = 0);	bool checkHeader(const QString &path, const QString &h);	bool findHeader(const QString &h, const QStringList &ext, QString *inc);	bool checkLibrary(const QString &path, const QString &name);	bool findLibrary(const QString &name, QString *lib);	QString findProgram(const QString &prog);	bool findSimpleLibrary(const QString &incvar, const QString &libvar, const QString &incname, const QString &libname, QString *incpath, QString *libs);	bool findFooConfig(const QString &path, QString *version, QStringList *incs, QString *libs, QString *otherflags);	bool findPkgConfig(const QString &name, VersionMode mode, const QString &req_version, QString *version, QStringList *incs, QString *libs, QString *otherflags);	void addDefine(const QString &str);	void addLib(const QString &str);	void addIncludePath(const QString &str);	void addExtra(const QString &str);private:	bool first_debug;	friend class ConfObj;	void added(ConfObj *o);};#endifEOTcat >$1/conf4.cpp <<EOT// For license information, see the COPYING file in the qconf base directory.#include "conf4.h"#include <stdio.h>#include <stdlib.h>class MocTestObject : public QObject{	Q_OBJECTpublic:	MocTestObject() {}};QString qc_getenv(const QString &var){	char *p = ::getenv(var.toLatin1().data());	if(!p)		return QString();	return QString(p);}QStringList qc_pathlist(){	QStringList list;	QString path = qc_getenv("PATH");	if(!path.isEmpty())		list = path.split(':', QString::SkipEmptyParts);	return list;}QString qc_findprogram(const QString &prog){	QString out;	QStringList list = qc_pathlist();	for(int n = 0; n < list.count(); ++n)	{		QFileInfo fi(list[n] + '/' + prog);		if(fi.exists() && fi.isExecutable())		{			out = fi.filePath();			break;		}	}	return out;}QString qc_findself(const QString &argv0){	if(argv0.contains('/'))		return argv0;	else		return qc_findprogram(argv0);}int qc_runcommand(const QString &command, QByteArray *out, bool showOutput){	QString fullcmd = command;	if(!showOutput)		fullcmd += " 2>/dev/null";	FILE *f = popen(fullcmd.toLatin1().data(), "r");	if(!f)		return -1;	if(out)		out->clear();	while(1)	{		char c = (char)fgetc(f);		if(feof(f))			break;		if(out)			out->append(c);		if(showOutput)			fputc(c, stdout);	}	int ret = pclose(f);	if(ret == -1)		return -1;	return ret;}int qc_runprogram(const QString &prog, const QStringList &args, QByteArray *out, bool showOutput){	QString fullcmd = prog;	QString argstr = args.join(" ");	if(!argstr.isEmpty())		fullcmd += QString(" ") + argstr;	return qc_runcommand(fullcmd, out, showOutput);	// TODO: use QProcess once it is fixed	/*	QProcess process;	if(showOutput)		process.setReadChannelMode(ForwardedChannels);	process.start(prog, args);	process.waitForFinished(-1);	return process.exitCode();	*/}bool qc_removedir(const QString &dirPath){	QDir dir(dirPath);	if(!dir.exists())		return false;	QStringList list = dir.entryList();	foreach(QString s, list)	{		if(s == "." || s == "..")			continue;		QFileInfo fi(dir.filePath(s));		if(fi.isDir())		{			if(!qc_removedir(fi.filePath()))				return false;		}		else		{			if(!dir.remove(s))				return false;		}	}	QString dirName = dir.dirName();	if(!dir.cdUp())		return false;	if(!dir.rmdir(dirName))		return false;	return true;}void qc_splitcflags(const QString &cflags, QStringList *incs, QStringList *otherflags){	incs->clear();	otherflags->clear();	QStringList cflagsList = cflags.split(" ");	for(int n = 0; n < cflagsList.count(); ++n)	{		QString str = cflagsList[n];		if(str.startsWith("-I"))		{			// we want everything except the leading "-I"			incs->append(str.remove(0, 2));		}		else		{			// we want whatever is left			otherflags->append(str);		}	}}QString qc_escapeArg(const QString &str){	QString out;	for(int n = 0; n < (int)str.length(); ++n) {		if(str[n] == '-')			out += '_';		else			out += str[n];	}	return out;}//----------------------------------------------------------------------------// ConfObj//----------------------------------------------------------------------------ConfObj::ConfObj(Conf *c){	conf = c;	conf->added(this);	required = false;	disabled = false;	success = false;}ConfObj::~ConfObj(){}QString ConfObj::checkString() const{	return QString("Checking for %1 ...").arg(name());}QString ConfObj::resultString() const{	if(success)		return "yes";	else		return "no";}//----------------------------------------------------------------------------// qc_internal_pkgconfig//----------------------------------------------------------------------------class qc_internal_pkgconfig : public ConfObj{public:	QString pkgname, desc;	VersionMode mode;	QString req_ver;        qc_internal_pkgconfig(Conf *c, const QString &_name, const QString &_desc, VersionMode _mode, const QString &_req_ver) : ConfObj(c)	{		pkgname = _name;		desc = _desc;		mode = _mode;		req_ver = _req_ver;	}	QString name() const { return desc; }	QString shortname() const { return pkgname; }	bool exec()	{		QStringList incs;		QString version, libs, other;		if(!conf->findPkgConfig(pkgname, mode, req_ver, &version, &incs, &libs, &other))			return false;		for(int n = 0; n < incs.count(); ++n)			conf->addIncludePath(incs[n]);		if(!libs.isEmpty())			conf->addLib(libs);		//if(!other.isEmpty())		//	conf->addExtra(QString("QMAKE_CFLAGS += %1\n").arg(other));		return true;	}};//----------------------------------------------------------------------------// Conf//----------------------------------------------------------------------------Conf::Conf(){	// TODO: no more vars?	//vars.insert("QMAKE_INCDIR_X11", new QString(X11_INC));	//vars.insert("QMAKE_LIBDIR_X11", new QString(X11_LIBDIR));	//vars.insert("QMAKE_LIBS_X11",   new QString(X11_LIB));	//vars.insert("QMAKE_CC", CC);	debug_enabled = false;}Conf::~Conf(){	qDeleteAll(list);}void Conf::added(ConfObj *o){	list.append(o);}QString Conf::getenv(const QString &var){	return qc_getenv(var);}void Conf::debug(const QString &s){	if(debug_enabled)	{		if(first_debug)			printf("\n");		first_debug = false;		printf(" * %s\n", qPrintable(s));	}}bool Conf::exec(){	for(int n = 0; n < list.count(); ++n)	{		ConfObj *o = list[n];		// if this was a disabled-by-default option, check if it was enabled		if(o->disabled)		{			QString v = QString("QC_ENABLE_") + qc_escapeArg(o->shortname());			if(getenv(v) != "Y")				continue;		}		// and the opposite?		else		{			QString v = QString("QC_DISABLE_") + qc_escapeArg(o->shortname());			if(getenv(v) == "Y")				continue;		}		bool output = true;		QString check = o->checkString();		if(check.isEmpty())			output = false;		if(output)		{			printf("%s", check.toLatin1().data());			fflush(stdout);		}		first_debug = true;		bool ok = o->exec();		o->success = ok;		if(output)		{			QString result = o->resultString();

⌨️ 快捷键说明

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