summaryrefslogtreecommitdiffstats
path: root/openssl.qcm
blob: 242ad2098b237ff1535ee6fc61deac0d7ebab8c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
-----BEGIN QCMOD-----
name: OpenSSL
arg: with-openssl-inc=[path],Path to OpenSSL include files
arg: 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";
		QString ext;
		if(!inc.isEmpty())
			ext += QString("-I") + inc + ' ';
		if(kb)
			ext += QString("-I") + kbdir + ' ';
		if(!lib.isEmpty())
			ext += QString("-L") + lib + " -lssl -lcrypto ";
		int ret;
		if(!conf->doCompileAndLink(str, ext, &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;
	}
};