From 2ddcaf008be7b6b88568fdf2c688ca8e03711615 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Wed, 29 Aug 2007 10:20:39 +0000 Subject: [PATCH] - Improved ImageMagick detection and it should be able to build without it too now --- configure | 142 ++++++++++++++++++++++++++++++++-------------- qbittorrent.qc | 5 +- qcm/libmagick.qcm | 26 ++++++--- src/rss.h | 4 +- src/src.pro | 53 +++++++++-------- 5 files changed, 150 insertions(+), 80 deletions(-) diff --git a/configure b/configure index 7361c48cb..13ddadc2e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #!/bin/sh # -# Generated by qconf 1.3 ( http://delta.affinix.com/qconf/ ) +# Generated by qconf 1.4 ( http://delta.affinix.com/qconf/ ) # show_usage() { @@ -189,7 +189,7 @@ while [ $# -gt 0 ]; do ;; --verbose) - QC_DEBUG="Y" + QC_VERBOSE="Y" shift ;; --help) show_usage; exit ;; @@ -203,7 +203,7 @@ DATADIR=${DATADIR:-$PREFIX/share} echo "Configuring qbittorrent ..." -if [ "$QC_DEBUG" = "Y" ]; then +if [ "$QC_VERBOSE" = "Y" ]; then echo echo PREFIX=$PREFIX echo BINDIR=$BINDIR @@ -223,31 +223,50 @@ fi printf "Verifying Qt 4 build environment ... " -if [ "$QC_DEBUG" = "Y" ]; then +# run qmake -v and check version +qmake_check_v4() { + if [ -x "$1" ]; then + if echo `$1 -v 2>&1` | grep "Qt version 4\." >/dev/null 2>&1; then + return 0 + elif [ "$QC_VERBOSE" = "Y" ]; then + echo "Warning: $1 not for Qt 4" + fi + fi + return 1 +} + +if [ "$QC_VERBOSE" = "Y" ]; then echo fi qm="" +names="qmake-qt4 qmake4 qmake" # qt4 check: --qtdir -if [ -z "$qm" ]; then - qstr=$EX_QTDIR/bin/qmake - if [ -x "$qstr" ]; then - qm=$qstr - fi +if [ -z "$qm" ] && [ ! -z "$EX_QTDIR" ]; then + for n in $names; do + qstr=$EX_QTDIR/bin/$n + if qmake_check_v4 "$qstr"; then + qm=$qstr + break; + fi + done fi -if [ -z "$qm" ] && [ "$QC_DEBUG" = "Y" ]; then +if [ -z "$qm" ] && [ "$QC_VERBOSE" = "Y" ]; then echo "Warning: qmake not found via --qtdir" fi # qt4 check: QTDIR -if [ -z "$qm" ]; then - qstr=$QTDIR/bin/qmake - if [ -x "$qstr" ]; then - qm=$qstr - fi +if [ -z "$qm" ] && [ ! -z "$QTDIR" ]; then + for n in $names; do + qstr=$QTDIR/bin/$n + if qmake_check_v4 "$qstr"; then + qm=$qstr + break; + fi + done fi -if [ -z "$qm" ] && [ "$QC_DEBUG" = "Y" ]; then +if [ -z "$qm" ] && [ "$QC_VERBOSE" = "Y" ]; then echo "Warning: qmake not found via \$QTDIR" fi @@ -255,40 +274,46 @@ fi if [ -z "$qm" ]; then str=`pkg-config QtCore --variable=exec_prefix 2>/dev/null` if [ ! -z "$str" ]; then - qstr=$str/bin/qmake - if [ -x "$qstr" ]; then - qm=$qstr - fi + for n in $names; do + qstr=$str/bin/$n + if qmake_check_v4 "$qstr"; then + qm=$qstr + break; + fi + done fi fi -if [ -z "$qm" ] && [ "$QC_DEBUG" = "Y" ]; then +if [ -z "$qm" ] && [ "$QC_VERBOSE" = "Y" ]; then echo "Warning: qmake not found via pkg-config" fi # qt4 check: PATH if [ -z "$qm" ]; then - qstr=`$WHICH qmake 2>/dev/null` - if [ -x "$qstr" ]; then - qm=$qstr - fi + for n in $names; do + qstr=`$WHICH $n 2>/dev/null` + if qmake_check_v4 "$qstr"; then + qm=$qstr + break; + fi + done fi -if [ -z "$qm" ] && [ "$QC_DEBUG" = "Y" ]; then +if [ -z "$qm" ] && [ "$QC_VERBOSE" = "Y" ]; then echo "Warning: qmake not found via \$PATH" fi if [ -z "$qm" ]; then - if [ "$QC_DEBUG" = "Y" ]; then + if [ "$QC_VERBOSE" = "Y" ]; then echo " -> fail" else echo "fail" fi printf "\n" - printf "Reason: Unable to find the 'qmake' tool.\n" + printf "Reason: Unable to find the 'qmake' tool for Qt 4.\n" printf "\n" show_qt_info exit 1; fi -if [ "$QC_DEBUG" = "Y" ]; then +if [ "$QC_VERBOSE" = "Y" ]; then echo qmake found in $qm fi @@ -535,13 +560,20 @@ public: qc_libmagick(Conf *c) : ConfObj(c) {} QString name() const { return "ImageMagick library (libmagick++)"; } QString shortname() const { return "libmagick++"; } + QString checkString() const { + if(!conf->getenv("QC_DISABLE_libmagick").isEmpty()) + return ""; + return ConfObj::checkString(); + } bool exec(){ - QString s; + if(!conf->getenv("QC_DISABLE_libmagick").isEmpty()) + return false; + QString s; s = conf->getenv("QC_WITH_LIBMAGICK_INC"); if(!s.isEmpty()) { if(!conf->checkHeader(s, "Magick++.h")) { return false; - } + } }else{ QStringList sl; sl << "/usr/include"; @@ -553,17 +585,17 @@ public: break; } } - if(!found) { + if(!found) return false; - } } conf->addIncludePath(s); s = conf->getenv("QC_WITH_LIBMAGICK_LIB"); if(!s.isEmpty()) { - if(!QFile::exists(s+QString("libMagick++.so"))) - return false; - conf->addLib(QString("-L") + s); + if(!QFile::exists(s+QString("libMagick++.so"))){ + return false; + } + conf->addLib(QString("-L") + s); }else{ QStringList sl; sl << "/usr/lib/"; @@ -572,11 +604,14 @@ public: foreach(s, sl){ if(QFile::exists(s+QString("libMagick++.so"))){ found = true; + break; } } - if(!found) return false; + if(!found) + return false; conf->addLib(QString("-L") + s); } + conf->addDefine("HAVE_MAGICK"); return true; } }; @@ -624,6 +659,8 @@ cat >$1/modules_new.cpp <$1/conf4.h <$1/conf4.cpp < @@ -878,6 +917,18 @@ void qc_splitcflags(const QString &cflags, QStringList *incs, QStringList *other } } +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 //---------------------------------------------------------------------------- @@ -994,14 +1045,14 @@ bool Conf::exec() // if this was a disabled-by-default option, check if it was enabled if(o->disabled) { - QString v = QString("QC_ENABLE_") + o->shortname(); + QString v = QString("QC_ENABLE_") + qc_escapeArg(o->shortname()); if(getenv(v) != "Y") continue; } // and the opposite? else { - QString v = QString("QC_DISABLE_") + o->shortname(); + QString v = QString("QC_DISABLE_") + qc_escapeArg(o->shortname()); if(getenv(v) == "Y") continue; } @@ -1428,7 +1479,7 @@ int main() # include"modules_new.cpp" #endif - conf->debug_enabled = (qc_getenv("QC_DEBUG") == "Y") ? true: false; + conf->debug_enabled = (qc_getenv("QC_VERBOSE") == "Y") ? true: false; if(conf->debug_enabled) printf(" -> ok\n"); else @@ -1484,6 +1535,9 @@ int main() var = qc_getenv("BINDIR"); if(!var.isEmpty()) str += QString("BINDIR = %1\n").arg(var); + var = qc_getenv("INCDIR"); + if(!var.isEmpty()) + str += QString("INCDIR = %1\n").arg(var); var = qc_getenv("LIBDIR"); if(!var.isEmpty()) str += QString("LIBDIR = %1\n").arg(var); @@ -1556,7 +1610,7 @@ export QC_WITH_LIBCOMMONCPP2_LIB export QC_DISABLE_libmagick export QC_WITH_LIBMAGICK_INC export QC_WITH_LIBMAGICK_LIB -export QC_DEBUG +export QC_VERBOSE rm -rf .qconftemp ( mkdir .qconftemp @@ -1569,7 +1623,7 @@ rm -rf .qconftemp if [ "$?" != "0" ]; then rm -rf .qconftemp - if [ "$QC_DEBUG" = "Y" ]; then + if [ "$QC_VERBOSE" = "Y" ]; then echo " -> fail" else echo "fail" @@ -1578,7 +1632,7 @@ if [ "$?" != "0" ]; then printf "Reason: There was an error compiling 'conf'. See conf.log for details.\n" printf "\n" show_qt_info - if [ "$QC_DEBUG" = "Y" ]; then + if [ "$QC_VERBOSE" = "Y" ]; then echo "conf.log:" cat conf.log fi @@ -1602,7 +1656,7 @@ if [ "$ret" = "1" ]; then else if [ "$ret" != "0" ]; then rm -rf .qconftemp - if [ "$QC_DEBUG" = "Y" ]; then + if [ "$QC_VERBOSE" = "Y" ]; then echo " -> fail" else echo "fail" diff --git a/qbittorrent.qc b/qbittorrent.qc index 32921e49c..16b88e5c6 100644 --- a/qbittorrent.qc +++ b/qbittorrent.qc @@ -2,6 +2,7 @@ qbittorrent qbittorrent.pro qcm + @@ -14,9 +15,7 @@ - - - + diff --git a/qcm/libmagick.qcm b/qcm/libmagick.qcm index 0c21387f6..8a2725d11 100644 --- a/qcm/libmagick.qcm +++ b/qcm/libmagick.qcm @@ -11,13 +11,20 @@ public: qc_libmagick(Conf *c) : ConfObj(c) {} QString name() const { return "ImageMagick library (libmagick++)"; } QString shortname() const { return "libmagick++"; } + QString checkString() const { + if(!conf->getenv("QC_DISABLE_libmagick").isEmpty()) + return ""; + return ConfObj::checkString(); + } bool exec(){ - QString s; + if(!conf->getenv("QC_DISABLE_libmagick").isEmpty()) + return false; + QString s; s = conf->getenv("QC_WITH_LIBMAGICK_INC"); if(!s.isEmpty()) { if(!conf->checkHeader(s, "Magick++.h")) { return false; - } + } }else{ QStringList sl; sl << "/usr/include"; @@ -29,17 +36,17 @@ public: break; } } - if(!found) { + if(!found) return false; - } } conf->addIncludePath(s); s = conf->getenv("QC_WITH_LIBMAGICK_LIB"); if(!s.isEmpty()) { - if(!QFile::exists(s+QString("libMagick++.so"))) - return false; - conf->addLib(QString("-L") + s); + if(!QFile::exists(s+QString("libMagick++.so"))){ + return false; + } + conf->addLib(QString("-L") + s); }else{ QStringList sl; sl << "/usr/lib/"; @@ -48,11 +55,14 @@ public: foreach(s, sl){ if(QFile::exists(s+QString("libMagick++.so"))){ found = true; + break; } } - if(!found) return false; + if(!found) + return false; conf->addLib(QString("-L") + s); } + conf->addDefine("HAVE_MAGICK"); return true; } }; diff --git a/src/rss.h b/src/rss.h index 372e5f99b..cb147db97 100644 --- a/src/rss.h +++ b/src/rss.h @@ -41,7 +41,7 @@ #include "misc.h" #include "downloadThread.h" -#ifndef NO_MAGICK +#ifdef HAVE_MAGICK #include using namespace Magick; #endif @@ -389,7 +389,7 @@ class RssManager : public QObject{ if(url.endsWith("favicon.ico")){ // Icon downloaded QImage fileIcon; -#ifndef NO_MAGICK +#ifdef HAVE_MAGICK try{ QFile::copy(path, path+".ico"); Image image(QDir::cleanPath(path+".ico").toUtf8().data()); diff --git a/src/src.pro b/src/src.pro index db96bd7bb..acb8a85a9 100644 --- a/src/src.pro +++ b/src/src.pro @@ -27,29 +27,6 @@ contains(DEBUG_MODE, 0){ message(Release build!) } -QMAKE_CXXFLAGS_RELEASE += -fwrapv -O2 -QMAKE_CXXFLAGS_DEBUG += -fwrapv -O1 - -CONFIG += link_pkgconfig -PKGCONFIG += libtorrent libccext2 libccgnu2 ImageMagick++ -QT += network xml - -DEFINES += QT_NO_CAST_TO_ASCII -#QT_NO_CAST_FROM_ASCII - -contains(DEBUG_MODE, 0){ - contains(QT_VERSION, 4.2.0) { - message(Qt 4.2.0 detected : enabling debug output because of a bug in this version of Qt) - }else{ - contains(QT_VERSION, 4.2.1) { - message(Qt 4.2.1 detected : enabling debug output because of a bug in this version of Qt) - }else{ - DEFINES += QT_NO_DEBUG_OUTPUT - } - } - CONFIG += release -} - # Install !win32 { @@ -95,6 +72,36 @@ contains(DEBUG_MODE, 0){ INSTALLS += icon16 icon22 icon24 icon32 icon36 icon48 icon64 icon72 icon96 icon128 icon192 } +QMAKE_CXXFLAGS_RELEASE += -fwrapv -O2 +QMAKE_CXXFLAGS_DEBUG += -fwrapv -O1 + +CONFIG += link_pkgconfig +PKGCONFIG += libtorrent libccext2 libccgnu2 + +contains(DEFINES, HAVE_MAGICK){ + PKGCONFIG += ImageMagick++ +}else{ + message(ImageMagick disabled) +} + +QT += network xml + +DEFINES += QT_NO_CAST_TO_ASCII +#QT_NO_CAST_FROM_ASCII + +contains(DEBUG_MODE, 0){ + contains(QT_VERSION, 4.2.0) { + message(Qt 4.2.0 detected : enabling debug output because of a bug in this version of Qt) + }else{ + contains(QT_VERSION, 4.2.1) { + message(Qt 4.2.1 detected : enabling debug output because of a bug in this version of Qt) + }else{ + DEFINES += QT_NO_DEBUG_OUTPUT + } + } + CONFIG += release +} + # Windows win32 { LIBS += -ltorrent -lccext2 -lccgnu2