This repository has been archived on 2025-12-24. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
yachat/qcm/jingle.qcm

377 lines
8.7 KiB
Text
Raw Normal View History

2025-12-25 01:37:49 +05:00
/*
-----BEGIN QCMOD-----
name: Jingle
arg: enable-jingle,Enable Jingle support
arg: with-expat-inc=[path],Path to Expat include files (for Jingle)
arg: with-expat-lib=[path],Path to Expat library files (for Jingle)
arg: with-speex-inc=[path],Path to Speex include files (for Jingle)
arg: with-speex-lib=[path],Path to Speex library files (for Jingle)
arg: with-ilbc-inc=[path],Path to iLBC include files (for Jingle)
arg: with-ilbc-lib=[path],Path to iLBC library files (for Jingle)
arg: with-ortp-inc=[path],Path to ORTP include files (for Jingle)
arg: with-ortp-lib=[path],Path to ORTP library files (for Jingle)
arg: with-alsa-inc=[path],Path to Alsa include files (for Jingle)
arg: with-alsa-lib=[path],Path to Alsa library files (for Jingle)
arg: with-portaudio-inc=[path],Path to PortAudio include files (for Jingle)
arg: with-portaudio-lib=[path],Path to PortAudio library files (for Jingle)
arg: with-glib-inc=[path],Path to GLib include files (for Jingle)
arg: with-glib-lib=[path],Path to GLib library files (for Jingle)
arg: with-glibconfig-inc=[path],Path to glibconfig include file (for Jingle)
-----END QCMOD-----
*/
//----------------------------------------------------------------------------
// qc_jingle
//----------------------------------------------------------------------------
class qc_jingle : public ConfObj
{
public:
qc_jingle(Conf *c) : ConfObj(c) {}
QString name() const { return "Jingle"; }
QString shortname() const { return "Jingle"; }
bool exec()
{
QString s;
// Check if Jingle was enabled explicitly
s = conf->getenv("QC_ENABLE_JINGLE");
if(s.isEmpty())
return false;
// Expat
s = conf->getenv("QC_WITH_EXPAT_INC");
if(!s.isEmpty()) {
if(!conf->checkHeader(s, "expat.h")) {
qWarning("Expat includes not found!");
return false;
}
conf->addIncludePath(s);
}
else {
if(!conf->findHeader("expat.h", QStringList(), &s)) {
qWarning("Expat includes not found!");
return false;
}
conf->addIncludePath(s);
}
s = conf->getenv("QC_WITH_EXPAT_LIB");
if(!s.isEmpty()) {
if(!conf->checkLibrary(s, "expat")) {
qWarning("Expat library not found!");
return false;
}
conf->addLib(QString("-L") + s);
}
else {
if(!conf->findLibrary("expat", &s)) {
qWarning("Expat library not found!");
return false;
}
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
conf->addLib("-lexpat");
// Speex
s = conf->getenv("QC_WITH_SPEEX_INC");
if(!s.isEmpty()) {
if(!conf->checkHeader(s, "speex.h")) {
qWarning("Speex includes not found!");
return false;
}
conf->addIncludePath(s);
}
else {
QStringList sl;
sl += "/usr/include/speex";
sl += "/usr/local/include/speex";
if(!conf->findHeader("speex.h", sl, &s)) {
qWarning("Speex includes not found!");
return false;
}
conf->addIncludePath(s);
}
s = conf->getenv("QC_WITH_SPEEX_LIB");
if(!s.isEmpty()) {
if(!conf->checkLibrary(s, "speex")) {
qWarning("Speex libraries not found!");
return false;
}
conf->addLib(QString("-L") + s);
}
else {
if(!conf->findLibrary("speex", &s)) {
qWarning("Speex libraries not found!");
return false;
}
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
conf->addDefine("HAVE_SPEEX");
conf->addLib("-lspeex");
// ILBC (optional)
QString ilbc_include, ilbc_lib;
s = conf->getenv("QC_WITH_ILBC_INC");
if(!s.isEmpty()) {
if(conf->checkHeader(s, "iLBC_encode.h")) {
ilbc_include = s;
}
}
else {
QStringList sl;
sl += "/usr/include/ilbc";
sl += "/usr/local/include/ilbc";
if(conf->findHeader("iLBC_encode.h", sl, &s)) {
ilbc_include = s;
}
}
s = conf->getenv("QC_WITH_ILBC_LIB");
if(!s.isEmpty()) {
if(conf->checkLibrary(s, "ilbc")) {
ilbc_lib = s;
}
}
else {
if(conf->findLibrary("ilbc", &s)) {
ilbc_lib = s;
}
}
if (!ilbc_include.isEmpty() && !ilbc_lib.isEmpty()) {
conf->addIncludePath(ilbc_include);
conf->addLib(QString("-L") + ilbc_lib);
conf->addLib("-lilbc");
conf->addDefine("HAVE_ILBC");
}
// ORTP
s = conf->getenv("QC_WITH_ORTP_INC");
if(!s.isEmpty()) {
if(conf->checkHeader(s, "ortp/ortp.h")) {
conf->addIncludePath(s);
}
else {
qWarning("ORTP includes not found!");
return false;
}
}
else {
QStringList sl;
sl += "/usr/include";
sl += "/usr/local/include";
if(conf->findHeader("ortp/ortp.h", sl, &s)) {
conf->addIncludePath(s);
}
else {
qWarning("ORTP includes not found!");
return false;
}
}
s = conf->getenv("QC_WITH_ORTP_LIB");
if(!s.isEmpty()) {
if(conf->checkLibrary(s, "ortp")) {
conf->addLib(QString("-L") + s);
}
else {
qWarning("ORTP libraries not found!");
return false;
}
}
else {
if(conf->findLibrary("ortp", &s)) {
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
else {
qWarning("ORTP libraries not found!");
return false;
}
}
conf->addLib("-lortp");
conf->addDefine("HAVE_ORTP");
#if defined(Q_WS_X11)
s = conf->getenv("QC_WITH_ALSA_INC");
if(!s.isEmpty()) {
if(conf->checkHeader(s, "alsa/asoundlib.h")) {
conf->addIncludePath(s);
}
else {
qWarning("Alsa includes not found!");
return false;
}
}
else {
QStringList sl;
sl += "/usr/include";
sl += "/usr/local/include";
if(conf->findHeader("alsa/asoundlib.h", sl, &s)) {
conf->addIncludePath(s);
}
else {
qWarning("Alsa includes not found!");
return false;
}
}
s = conf->getenv("QC_WITH_ALSA_LIB");
if(!s.isEmpty()) {
if(conf->checkLibrary(s, "asound")) {
conf->addLib(QString("-L") + s);
}
else {
qWarning("Alsa libraries not found!");
return false;
}
}
else {
if(conf->findLibrary("asound", &s)) {
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
else {
qWarning("Alsa libraries not found!");
return false;
}
}
conf->addLib("-lasound");
conf->addDefine("HAVE_ALSA_ASOUNDLIB_H");
conf->addDefine("__ALSA_ENABLED__");
#elif defined(Q_WS_MAC)
// Check for PortAudio
s = conf->getenv("QC_WITH_PORTAUDIO_INC");
if(!s.isEmpty()) {
if(!conf->checkHeader(s, "portaudio.h")) {
qWarning("Portaudio includes not found!");
return false;
}
conf->addIncludePath(s);
}
else {
if(!conf->findHeader("portaudio.h", QStringList(), &s)) {
qWarning("Portaudio includes not found!");
return false;
}
conf->addIncludePath(s);
}
s = conf->getenv("QC_WITH_PORTAUDIO_LIB");
if(!s.isEmpty()) {
if(!conf->checkLibrary(s, "portaudio")) {
qWarning("PortAudio library not found!");
return false;
}
conf->addLib(QString("-L") + s);
}
else {
if(!conf->findLibrary("portaudio", &s)) {
qWarning("PortAudio library not found!");
return false;
}
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
conf->addLib("-lportaudio");
conf->addDefine("HAVE_PORTAUDIO");
#endif
QFile file("third-party/libjingle/config.h");
if (file.open(QIODevice::WriteOnly))
file.close();
// GLib
s = conf->getenv("QC_WITH_GLIB_INC");
if(!s.isEmpty()) {
if(conf->checkHeader(s, "glib.h")) {
conf->addIncludePath(s);
}
else {
qWarning("GLib includes not found!");
return false;
}
}
else {
QStringList sl;
sl += "/usr/include/glib";
sl += "/usr/local/include/glib";
sl += "/usr/include/glib-2.0";
if(conf->findHeader("glib.h", sl, &s)) {
conf->addIncludePath(s);
}
else {
qWarning("GLib includes not found!");
return false;
}
}
s = conf->getenv("QC_WITH_GLIB_LIB");
if(!s.isEmpty()) {
if(conf->checkLibrary(s, "glib-2.0")) {
conf->addLib(QString("-L") + s);
}
else {
qWarning("GLib 2.0 libraries not found!");
return false;
}
}
else {
if(conf->findLibrary("glib-2.0", &s)) {
if (!s.isEmpty())
conf->addLib(QString("-L") + s);
}
else {
qWarning("GLib 2.0 libraries not found!");
return false;
}
}
conf->addLib("-lglib-2.0 -lgmodule-2.0 -lgthread-2.0");
conf->addDefine("HAVE_GLIB");
// Glibconfig
s = conf->getenv("QC_WITH_GLIBCONFIG_INC");
if(!s.isEmpty()) {
if(conf->checkHeader(s, "glibconfig.h")) {
conf->addIncludePath(s);
}
else {
qWarning("glibconfig.h includes not found!");
return false;
}
}
else {
if(conf->findHeader("glibconfig.h", QStringList("/usr/lib/glib-2.0/include"), &s)) {
conf->addIncludePath(s);
}
else {
qWarning("glibconfig.h not found!");
return false;
}
}
// Finish
conf->addExtra("CONFIG += jingle");
qWarning("");
qWarning("");
qWarning(" !!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!!");
qWarning(" LIBJINGLE SUPPORT IS STILL EXPERIMENTAL !!!");
qWarning(" USE AT YOUR OWN RISK !!!");
return true;
}
};