#!/bin/sh################################################################################# Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).## All rights reserved.## Contact: Nokia Corporation (qt-info@nokia.com)#### This file is part of the Qt Mobility Components.#### $QT_BEGIN_LICENSE:LGPL$## No Commercial Usage## This file contains pre-release code and may not be distributed.## You may use this file in accordance with the terms and conditions## contained in the Technology Preview License Agreement accompanying## this package.#### GNU Lesser General Public License Usage## Alternatively, this file may be used under the terms of the GNU Lesser## General Public License version 2.1 as published by the Free Software## Foundation and appearing in the file LICENSE.LGPL included in the## packaging of this file. Please review the following information to## ensure the GNU Lesser General Public License version 2.1 requirements## will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.#### In addition, as a special exception, Nokia gives you certain additional## rights. These rights are described in the Nokia Qt LGPL Exception## version 1.1, included in the file LGPL_EXCEPTION.txt in this package.#### If you have questions regarding the use of this file, please contact## Nokia at qt-info@nokia.com.################## $QT_END_LICENSE$################################################################################ return status of 1 if absolute path as first argument# also prints the return statusisAbsPath() { slash=$(echo $1 | cut -c 1) if [ "$slash" != "/" ]; then echo 0 return 0 fi echo 1 return 1}# Returns the absolute path for $1 for target $2# as an example $2 might have value "maemo5".# This is required because when building in scratchbox for# maemo we do not want to follow symbolic links that are # introduced by scratchboxabsPath() { if [ "$2" = "maemo5" -o "$2" = "maemo6" ]; then if [ `isAbsPath $1` = '1' ]; then echo $1; else echo >&2 "Relative prefix/bin/lib/header/plugin paths are not supported for Maemo" exit 1; fi else PATH=`$relpath/bin/pathhelper $1` echo $PATH fi}# the current directory (shadow build dir)shadowpath=`/bin/pwd`# the name of this scriptrelconf=`basename $0`# the directory of this script is the "source tree"relpath=`dirname $0`relpath=`(cd "$relpath"; /bin/pwd)`CONFIG_IN="$shadowpath/config.in"QT_MOBILITY_PREFIX=$shadowpath/installQT_MOBILITY_INCLUDE=QT_MOBILITY_LIB=QT_MOBILITY_BIN=QT_MOBILITY_PLUGINS=BUILD_UNITTESTS=BUILD_EXAMPLES=BUILD_DOCS=yesBUILD_TOOLS=yesRELEASEMODE=BUILD_SILENT=LINUX_TARGET=QMAKE_CACHE="$shadowpath/.qmake.cache"LIB_PATH="lib"BIN_PATH="bin"PLUGIN_PATH="plugins"MAC_SDK=MOBILITY_MODULES="bearer location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors"MOBILITY_MODULES_UNPARSED=QMKSPEC=OS="other"usage() { echo "Usage: configure [-prefix <dir>] [headerdir <dir>] [libdir <dir>]" echo " [-bindir <dir>] [-tests] [-examples] [-no-docs]" echo " [-no-tools] [-debug] [-release] [-silent]" echo " [-modules <list>]" echo echo "Options:" echo echo "-prefix <dir> ..... This will install everything relative to <dir>" echo " (default prefix: $shadowpath/install)" echo "-headerdir <dir> .. Header files will be installed to <dir>" echo " (default prefix: PREFIX/include)" echo "-libdir <dir> ..... Libraries will be installed to <dir>" echo " (default PREFIX/lib)" echo "-bindir <dir> ..... Executables will be installed to <dir>" echo " (default PREFIX/bin)" echo "-plugindir <dir> .. Plug-ins will be installed to <dir>" echo " (default PREFIX/plugins)" echo "-debug ............ Build with debugging symbols" echo "-release .......... Build without debugging symbols" echo "-silent ........... Reduces build output" echo "-tests ............ Build unit tests (not build by default)" echo " Note, this adds test symbols to all libraries" echo " and should not be used for release builds." echo "-examples ......... Build example applications" echo "-no-docs .......... Do not build documentation (build by default)" echo "-no-tools ......... Do not build tools (build by default)" echo "-modules <list> ... Restrict list of modules to build (default all supported)" echo " Choose from: bearer contacts location publishsubscribe" echo " messaging multimedia systeminfo serviceframework versit" echo " sensors" echo " Modules should be separated by a space and surrounded" echo " by double quotation. If a" echo " selected module depends on other modules dependencies" echo " will automatically be enabled." echo "-maemo6 ........... Build Qt Mobility for Maemo6 (Harmattan)." echo "-maemo5 ........... Build Qt Mobility for Maemo5 (Freemantle)." echo "-sdk <sdk>..........Build using Apple provided SDK <path/to/sdk>." echo " example: -sdk /Developer/SDKs/MacOSX10.6.sdk" echo rm -f "$CONFIG_IN" exit 1}rm -rf "$QMAKE_CACHE"CONFIG_LOG="$shadowpath/config.log"rm -rf "$CONFIG_LOG"while [ "$#" -gt 0 ]; do case "$1" in -h|-help|--help) usage ;; -headerdir) QT_MOBILITY_INCLUDE="$2" shift ;; -libdir) QT_MOBILITY_LIB="$2" shift ;; --prefix|-prefix) QT_MOBILITY_PREFIX="$2" shift ;; -bindir) QT_MOBILITY_BIN="$2" shift ;; -plugindir) QT_MOBILITY_PLUGINS="$2" shift ;; -tests) BUILD_UNITTESTS="yes" ;; -examples) BUILD_EXAMPLES="yes" ;; -no-docs) BUILD_DOCS= ;; -no-tools) BUILD_TOOLS= ;; -debug) RELEASEMODE=debug ;; -release) RELEASEMODE=release ;; -silent) BUILD_SILENT=yes ;; -maemo5) LINUX_TARGET=maemo5 ;; -maemo6) LINUX_TARGET=maemo6 ;; -sdk) MAC_SDK="$2" shift ;; -modules) MOBILITY_MODULES_UNPARSED=$2 #reset default selection MOBILITY_MODULES= for m in $MOBILITY_MODULES_UNPARSED; do case "$m" in bearer|contacts|location|messaging|multimedia|publishsubscribe|serviceframework|systeminfo|versit|sensors) MOBILITY_MODULES="$MOBILITY_MODULES $m"; ;; *) echo "Unknown module: $m" echo usage ;; esac done if [ -z "$MOBILITY_MODULES" ]; then echo "List of selected modules is empty." echo usage fi shift ;; *) echo "Unknown option: $1" usage ;; esac shiftdonecheckostype(){ match="darwin" if [ "$OSTYPE" = "${match}"* ]; then OS="darwin" QMKSPEC="-spec macx-g++" echo "QMAKESPEC = "$QMKSPEC >> "$CONFIG_IN" fi}findframeworks(){# figure out if Qt was built with frameworks# if so, install in the correct place.# and fix rpath echo "contains(QT_CONFIG,qt_framework):message(1)" > 1.pro SOMETHING=`qmake -spec macx-g++ 1.pro 2>&1` if [ "$SOMETHING" = "Project MESSAGE: 1" ]; then LIB_PATH="Library/Frameworks" BIN_PATH="Applications" fi rm 1.pro}findUniversal(){ if [ -e "mac.inc" ]; then rm mac.inc fi echo "contains(QT_CONFIG,x86): system(echo CONFIG+=x86 >> mac.inc)" > 2.pro echo "contains(QT_CONFIG,ppc): system(echo CONFIG+=ppc >> mac.inc)" >> 2.pro echo "contains(QT_CONFIG,ppc64): system(echo CONFIG+=ppc64 >> mac.inc)" >> 2.pro echo "contains(QT_CONFIG,x86_64): system(echo CONFIG+=x86_64 >> mac.inc)" >> 2.pro SOMETIME=`qmake -spec macx-g++ 2.pro 2>&1` rm 2.pro if [ -e "mac.inc" ]; then echo "exists(mac.inc): include(mac.inc)" >> "$CONFIG_IN" fi}checkostypeif [ "$OS" = "darwin" ] ; then findframeworksfiif [ -n "$BUILD_SILENT" ]; then echo "CONFIG += silent" > "$CONFIG_IN"fiif [ "$OS" = "darwin" ] ; then findUniversalfiif [ -z "$RELEASEMODE" ]; then RELEASEMODE="debug"fiecho "CONFIG += $RELEASEMODE" >> "$CONFIG_IN"#do we build for Maemo?if [ -n "$LINUX_TARGET" ]; then if [ "$LINUX_TARGET" = "maemo5" ]; then echo "CONFIG+=maemo5" >> "$CONFIG_IN" elif [ "$LINUX_TARGET" = "maemo6" ]; then echo "CONFIG+=maemo6" >> "$CONFIG_IN" fifi#process PREFIXQT_MOBILITY_PREFIX=`absPath $QT_MOBILITY_PREFIX $LINUX_TARGET`if [ "$?" -eq "1" ]; then exit 1fiecho "QT_MOBILITY_PREFIX = $QT_MOBILITY_PREFIX" >> "$CONFIG_IN"#process include pathif [ -z "$QT_MOBILITY_INCLUDE" ]; then QT_MOBILITY_INCLUDE="$QT_MOBILITY_PREFIX/include"else QT_MOBILITY_INCLUDE=`absPath $QT_MOBILITY_INCLUDE $LINUX_TARGET` if [ "$?" -eq "1" ]; then exit 1 fifiecho "QT_MOBILITY_INCLUDE = $QT_MOBILITY_INCLUDE" >> "$CONFIG_IN"#process library pathif [ -z "$QT_MOBILITY_LIB" ]; then QT_MOBILITY_LIB="$QT_MOBILITY_PREFIX/$LIB_PATH"else QT_MOBILITY_LIB=`absPath $QT_MOBILITY_LIB $LINUX_TARGET` if [ "$?" -eq "1" ]; then exit 1 fifiecho "QT_MOBILITY_LIB = $QT_MOBILITY_LIB" >> "$CONFIG_IN"#process bin pathif [ -z "$QT_MOBILITY_BIN" ]; then QT_MOBILITY_BIN="$QT_MOBILITY_PREFIX/$BIN_PATH"else QT_MOBILITY_BIN=`absPath $QT_MOBILITY_BIN $LINUX_TARGET` if [ "$?" -eq "1" ]; then exit 1 fifiecho "QT_MOBILITY_BIN = $QT_MOBILITY_BIN" >> "$CONFIG_IN"#process plugin pathif [ -z "$QT_MOBILITY_PLUGINS" ]; then QT_MOBILITY_PLUGINS="$QT_MOBILITY_PREFIX/$PLUGIN_PATH"else QT_MOBILITY_PLUGINS=`absPath $QT_MOBILITY_PLUGINS $LINUX_TARGET` if [ "$?" -eq "1" ]; then exit 1 fifiecho "QT_MOBILITY_PLUGINS = $QT_MOBILITY_PLUGINS" >> "$CONFIG_IN"echo "QT_MOBILITY_SOURCE_TREE = $relpath" >> "$QMAKE_CACHE"echo "QT_MOBILITY_BUILD_TREE = $shadowpath" >> "$QMAKE_CACHE"if [ -n "$MAC_SDK" ]; then QMAKE_MAC_SDK="$MAC_SDK" echo "QMAKE_MAC_SDK = $QMAKE_MAC_SDK" >> "$CONFIG_IN"fiif [ -z "$BUILD_UNITTESTS" ]; then echo "build_unit_tests = no" >> "$CONFIG_IN"else echo "build_unit_tests = yes" >> "$CONFIG_IN"fiif [ -z "$BUILD_EXAMPLES" ]; then echo "build_examples = no" >> "$CONFIG_IN"else echo "build_examples = yes" >> "$CONFIG_IN"fiif [ -z "$BUILD_DOCS" ]; then echo "build_docs = no" >> "$CONFIG_IN"else echo "build_docs = yes" >> "$CONFIG_IN"fiif [ -z "$BUILD_TOOLS" ]; then echo "build_tools = no" >> "$CONFIG_IN"else echo "build_tools = yes" >> "$CONFIG_IN"fiecho "Configuring Qt Mobility"echo WHICH="$relpath/config.tests/tools/which.test"printf "Checking available Qt"if ! "$WHICH" qmake 2>/dev/null 1>&2; then printf " ... Not found\n\n" >&2 echo >&2 "Cannot find 'qmake' in your PATH."; echo >&2 "Aborting." else printf " ... " qmake -query QT_VERSIONfi# find out which make we want to useMAKE=for m in make gmake; do if "$WHICH" $m >/dev/null 2>&1; then MAKE=`$WHICH $m` break fidoneif [ -z "$MAKE" ]; then echo >&2 "Cannot find 'make' or 'gmake' in your PATH"; echo >&2 "Aborting." ficompileTest(){ printf "Checking $1" CURRENT_PWD=`pwd` if [ "$shadowpath" = "$relpath" ]; then #doing source tree build cd "$relpath/config.tests/$2" rm -rf ./$2 else #using shadow build rm -rf config.tests/$2 mkdir -p config.tests/$2 cd config.tests/$2 fi qmake $QMKSPEC "$relpath/config.tests/$2/$2.pro" 2>> "$CONFIG_LOG" >> "$CONFIG_LOG" printf " ." "$MAKE" clean >> "$CONFIG_LOG" printf "." "$MAKE" >> "$CONFIG_LOG" 2>&1 printf ". " if [ -e ./$2 ]; then echo "OK" echo "$2_enabled = yes" >> "$CONFIG_IN" else echo "Not Found" echo "$2_enabled = no" >> "$CONFIG_IN" fi cd "$CURRENT_PWD"}#compile testscompileTest QMF qmfcompileTest NetworkManager networkmanagercompileTest "CoreWLAN (MacOS 10.6)" corewlancompileTest "Maemo ICD" maemo-icdcompileTest "Maemo ICD WLAN" maemo-icd-network-wlancompileTest "Maemo5 contacts dependencies" maemo5-contactscompileTest "Bluez" bluezif [ "$LINUX_TARGET" = maemo6 ]; then compileTest sensord sensordelse echo "sensord_enabled = no" >> "$CONFIG_IN"fi# It's a lot easier to make qmake do the dependency checking...echo "mobility_modules = $MOBILITY_MODULES" >> "$CONFIG_IN"echo "contains(mobility_modules,versit): mobility_modules *= contacts" >> "$CONFIG_IN"echo "maemo5|maemo6:contains(maemo-icd_enabled, no): mobility_modules -= bearer" >> "$CONFIG_IN"# If libicd-network-wlan-dev.h is not present, use own copy.# At time of writing, libicd-network-wlan-dev is not released for maemo5.echo "maemo5:contains(maemo-icd-network-wlan_enabled, no): INCLUDEPATH += $relpath/src/3rdparty/icd-network-wlan" >> "$CONFIG_IN"# Ideally we'd skip generating headers for modules that are not enabledecho "Generating Mobility Headers..."#remove old headersrm -rf $shadowpath/includemkdir $shadowpath/includefor module in $MOBILITY_MODULES; do case "$module" in bearer) $relpath/bin/syncheaders $shadowpath/include/QtBearer $relpath/src/bearer ;; publishsubscribe) $relpath/bin/syncheaders $shadowpath/include/QtPublishSubscribe $relpath/src/publishsubscribe ;; location) $relpath/bin/syncheaders $shadowpath/include/QtLocation $relpath/src/location ;; serviceframework) $relpath/bin/syncheaders $shadowpath/include/QtServiceFramework $relpath/src/serviceframework ;; systeminfo) $relpath/bin/syncheaders $shadowpath/include/QtSystemInfo $relpath/src/systeminfo ;; contacts) $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/details $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/requests $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/filters ;; multimedia) $relpath/bin/syncheaders $shadowpath/include/QtMultimediaKit $relpath/src/multimedia $relpath/bin/syncheaders $shadowpath/include/QtMultimediaKit $relpath/src/multimedia/audio $relpath/bin/syncheaders $shadowpath/include/QtMultimediaKit $relpath/src/multimedia/video ;; messaging) $relpath/bin/syncheaders $shadowpath/include/QtMessaging $relpath/src/messaging ;; versit) #versit implies contacts $relpath/bin/syncheaders $shadowpath/include/QtVersit $relpath/src/versit $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/details $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/requests $relpath/bin/syncheaders $shadowpath/include/QtContacts $relpath/src/contacts/filters ;; sensors) $relpath/bin/syncheaders $shadowpath/include/QtSensors $relpath/src/sensors ;; *) echo "Cannot generate headers for $module" ;; esacdonemv "$CONFIG_IN" config.primkdir -p "$shadowpath/features"if [ "$shadowpath" != "$relpath" ]; then cp -f "$relpath/features/strict_flags.prf" "$shadowpath/features"fiecho "Running qmake..."if qmake -makefile $QMKSPEC -recursive "$relpath/qtmobility.pro"; then echo "" echo "configure has finished. You may run make or gmake to build the project now."else echo "" echo "configure failed."fi