/* -----BEGIN QCMOD----- name: libboost arg: with-libboost-inc=[path], Path to libboost include files arg: with-libboost-lib=[path], Path to libboost library files -----END QCMOD----- */ #include class qc_libboost : public ConfObj { public: qc_libboost(Conf *c) : ConfObj(c) {} QString name() const { return "libboost"; } QString shortname() const { return "libboost"; } QString findBoostLib(QString path, QString lib) const { QString name; QDir libDir(path); QStringList filters; filters << "libboost_"+lib+"*-mt*.so"; QStringList result = libDir.entryList(filters, QDir::Files); if(!result.empty()) { name = result.first().mid(3); // Remove .so name.chop(3); } else { // Fall back to non -mt boost lib filters.clear(); filters << "libboost_"+lib+"*.so"; result = libDir.entryList(filters, QDir::Files); if(!result.empty()) { name = result.first().mid(3); // Remove .so name.chop(3); } } return name; } bool exec(){ QString s; s = conf->getenv("QC_WITH_LIBBOOST_INC"); if(!s.isEmpty()) { if(!conf->checkHeader(s, "boost/format.hpp")) { return false; } if(!conf->checkHeader(s, "boost/date_time/posix_time/posix_time.hpp")) { return false; } if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) { return false; } }else{ QStringList sl; sl << "/usr/include"; sl << "/usr/local/include"; bool found = false; foreach(s, sl){ if(conf->checkHeader(s, "boost/format.hpp")){ found = true; break; } } if(!found) { return false; } if(!conf->checkHeader(s, "boost/date_time/posix_time/posix_time.hpp")) { return false; } if(!conf->checkHeader(s, "boost/filesystem/path.hpp")) { return false; } } conf->addIncludePath(s); // Find library s = conf->getenv("QC_WITH_LIBBOOST_LIB"); QStringList required_libs; #if BOOST_VERSION >= 103500 required_libs << "system"; #endif if(conf->getenv("QC_DISABLE_GUI").isEmpty()) { // Not required by nox required_libs << "filesystem" ; } QStringList libDirs; libDirs << "/usr/lib/" << "/usr/lib64/" << "/usr/local/lib/" << "/usr/local/lib64/"; foreach(const QString& lib, required_libs) { if(!s.isEmpty()) { QString detected_name = findBoostLib(s, lib); if(detected_name.isEmpty()) { printf("Could not find boost %s library!\n", qPrintable(lib)); return false; } else { conf->addLib("-l"+detected_name); } } else { bool found = false; foreach(const QString& libDir, libDirs) { QString detected_name = findBoostLib(libDir, lib); if(!detected_name.isEmpty()) { conf->addLib("-l"+detected_name); found = true; break; } } if(!found) { printf("Could not find boost %s library!\n", qPrintable(lib)); return false; } } } return true; } };