[Development] How I'm using qtchooser

Thiago Macieira thiago.macieira at intel.com
Tue Dec 18 08:33:03 CET 2012


Clone https://codereview.qt-project.org/p/qt/qtchooser
Run:
	make bindir=$HOME/bin install

Packagers, please install as:
	make INSTALL_ROOT=<insert-install-root-variable-here> install

For example, on my Mac:
$ qt
Not using Qt.
$ ls .config/qtchooser 
5-frameworks.conf  5-no-frameworks.conf
$ qt <press TAB>
5-frameworks     5-no-frameworks  none

$ qt 5-frameworks 
Using Qt 5-frameworks
$ echo $QT_SELECT 
5-frameworks
$ echo $QTLIBDIR 
/Users/tjmaciei/obj/qt/qt5-frameworks/qtbase/lib
$ echo $QTOBJDIR 
/Users/tjmaciei/obj/qt/qt5-frameworks/qtbase
$ echo $QTSRCDIR 
/Users/tjmaciei/src/qt/qt5-frameworks/qtbase
$ ls -l `which qmake`
lrwxr-xr-x 1 tjmaciei staff 9 Dec 17 22:47 /Users/tjmaciei/bin/qmake -> 
qtchooser
$ qmake -v
QMake version 3.0
Using Qt version 5.0.0 in /Users/tjmaciei/obj/qt/qt5-frameworks/qtbase/lib
$ moc -v
Qt Meta Object Compiler version 69 (Qt 5.0.0)
$ uic3 -v
uic3: could not exec '/Users/tjmaciei/obj/qt/qt5/qtbase/bin/uic3': No such file 
or directory

My "qt" function is:

function qt()
{
    # Get or set the Qt version
    if [ $# -eq 0 ]; then
        # Get the Qt version
        if [ -z "$QT_SELECT" ]; then
            echo "Not using Qt."
        else
            echo "Using Qt $QT_SELECT"
        fi
    else
        # Set the working Qt version
        unset QT_SELECT
        local QTTOOLDIR
        test x$1 = xnone || eval $(qtchooser -qt=$1 -print-env) || return $?

        # Remove old
        removefrom LD_LIBRARY_PATH $QTLIBDIR
        removefrom PKG_CONFIG_PATH $QTLIBDIR/pkgconfig

        # Add new
        if [ x$1 != xnone ]; then
            { pushd $QTLIBDIR/.. && QTOBJDIR=$PWD && 
                updatedirs && QTSRCDIR=$srcdir && popd; } > /dev/null 
2>/dev/null
            QTSRCDIR=${QTSRCDIR-$QTOBJDIR}

            addto LD_LIBRARY_PATH $QTLIBDIR
            addto PKG_CONFIG_PATH $QTLIBDIR/pkgconfig

            echo "Using Qt $1"
            export LD_LIBRARY_PATH PKG_CONFIG_PATH
            export QTOBJDIR QTSRCDIR QTLIBDIR QT_SELECT
        else
            unset QTOBJDIR QTSRCDIR QTLIBDIR
            echo "Not using Qt"
        fi
    fi
}

The removefrom and addto functions are trivial and left as an exercise for the 
reader. The updatedirs function is part of my shadow build manipulation and it 
updates $objdir and $srcdir indicating where the sources and binaries are. You 
may skip that line or update to whatever you currently use.

The zsh completion function is:
function _qt() {
    _wanted arguments expl 'Disable Qt' compadd "none"
    qtchooser -list-versions | while read ver; do 
        _wanted arguments expl "Qt version $ver" compadd $ver
    done
    return 1
}
compdef _qt qt

-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Software Architect - Intel Open Source Technology Center
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20121217/fe8d0bda/attachment.sig>


More information about the Development mailing list