Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 654 lines (600 sloc) 20.9 KB
#!/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$
## Commercial Usage
## Licensees holding valid Qt Commercial licenses may use this file in
## accordance with the Qt Commercial License Agreement provided with
## the Software or, alternatively, in accordance with the terms
## contained in a written agreement between you and Nokia.
##
## 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.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 3.0 as published by the Free Software
## Foundation and appearing in the file LICENSE.GPL included in the
## packaging of this file. Please review the following information to
## ensure the GNU General Public License version 3.0 requirements will be
## met: http://www.gnu.org/copyleft/gpl.html.
##
## If you are unsure which license is appropriate for your use, please
## contact the sales department at qt-sales@nokia.com.
## $QT_END_LICENSE$
##
#############################################################################
# return status of 1 if absolute path as first argument
# also prints the return status
isAbsPath() {
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 scratchbox
absPath() {
if [ "$2" = "maemo5" -o "$2" = "maemo6" -o "$2" = "" ]; 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 script
relconf=`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/install
QT_MOBILITY_INCLUDE=
QT_MOBILITY_LIB=
QT_MOBILITY_BIN=
QT_MOBILITY_PLUGINS=
QT_MOBILITY_EXAMPLES=
QT_MOBILITY_DEMOS=
BUILD_UNITTESTS=
BUILD_PUBLIC_UNITTESTS=
BUILD_EXAMPLES=
BUILD_DEMOS=
BUILD_DOCS=yes
BUILD_TOOLS=yes
RELEASEMODE=
BUILD_SILENT=
LINUX_TARGET=
QMAKE_CACHE="$shadowpath/.qmake.cache"
QMAKE_EXEC=qmake
LIB_PATH="lib"
BIN_PATH="bin"
PLUGIN_PATH="plugins"
MAC_SDK=
MOBILITY_MODULES="bearer location contacts multimedia publishsubscribe versit messaging systeminfo serviceframework sensors gallery organizer feedback"
MOBILITY_MODULES_UNPARSED=
QMKSPEC=
OS="other"
ORGANIZER_REQUESTED=
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 "-demosdir <dir> ... Demos will be installed to <dir>"
echo " (default: PREFIX/bin)"
echo "-examplesdir <dir> Examples will be installed to <dir>"
echo " (default PREFIX/bin)"
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 "-demos ............ Build demo 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 gallery location publishsubscribe"
echo " messaging multimedia systeminfo serviceframework"
echo " sensors versit organizer feedback"
echo " Modules should be separated by a space and surrounded"
echo " by double quotation. If a selected module depends on other modules"
echo " those modules (and their dependencies) will automatically be enabled."
echo "-maemo6 ........... Build Qt Mobility for Maemo6 (Harmattan)."
echo "-maemo5 ........... Build Qt Mobility for Maemo5 (Fremantle)."
echo "-sdk <sdk> ........ Build using Apple provided SDK <path/to/sdk>."
echo " example: -sdk /Developer/SDKs/MacOSX10.6.sdk"
echo "-qmake-exec <name> Sets custom binary name for qmake binary"
echo " (default: qmake)"
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
;;
-examplesdir)
QT_MOBILITY_EXAMPLES="$2"
shift
;;
-demosdir)
QT_MOBILITY_DEMOS="$2"
shift
;;
-tests)
BUILD_UNITTESTS="yes"
;;
-public-tests-only)
BUILD_PUBLIC_UNITTESTS="yes"
;;
-demos)
BUILD_DEMOS="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
;;
-qmake-exec)
QMAKE_EXEC="$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|sensors|gallery|versit|feedback)
MOBILITY_MODULES="$MOBILITY_MODULES $m";
;;
organizer)
MOBILITY_MODULES="$MOBILITY_MODULES $m";
ORGANIZER_REQUESTED=yes
;;
*)
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
shift
done
checkostype()
{
match="Darwin"
if [ `uname -s` = "${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_EXEC -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_EXEC -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
}
checkostype
if [ "$OS" = "darwin" ] ; then
findframeworks
fi
if [ -n "$BUILD_SILENT" ]; then
echo "CONFIG += silent" > "$CONFIG_IN"
fi
if [ "$OS" = "darwin" ] ; then
findUniversal
fi
if [ -z "$RELEASEMODE" ]; then
RELEASEMODE="debug"
fi
echo "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"
fi
fi
#process PREFIX
QT_MOBILITY_PREFIX=`absPath $QT_MOBILITY_PREFIX $LINUX_TARGET`
if [ "$?" -eq "1" ]; then
exit 1
fi
echo "QT_MOBILITY_PREFIX = $QT_MOBILITY_PREFIX" >> "$CONFIG_IN"
#process include path
if [ -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
fi
fi
echo "QT_MOBILITY_INCLUDE = $QT_MOBILITY_INCLUDE" >> "$CONFIG_IN"
#process library path
if [ -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
fi
fi
echo "QT_MOBILITY_LIB = $QT_MOBILITY_LIB" >> "$CONFIG_IN"
#process bin path
if [ -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
fi
fi
echo "QT_MOBILITY_BIN = $QT_MOBILITY_BIN" >> "$CONFIG_IN"
#process plugin path
if [ -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
fi
fi
echo "QT_MOBILITY_PLUGINS = $QT_MOBILITY_PLUGINS" >> "$CONFIG_IN"
#process examples path
if [ -z "$QT_MOBILITY_EXAMPLES" ]; then
QT_MOBILITY_EXAMPLES="$QT_MOBILITY_PREFIX/$BIN_PATH"
else
QT_MOBILITY_EXAMPLES=`absPath $QT_MOBILITY_EXAMPLES $LINUX_TARGET`
if [ "$?" -eq "1" ]; then
exit 1
fi
fi
echo "QT_MOBILITY_EXAMPLES = $QT_MOBILITY_EXAMPLES" >> "$CONFIG_IN"
#process demos path
if [ -z "$QT_MOBILITY_DEMOS" ]; then
QT_MOBILITY_DEMOS="$QT_MOBILITY_PREFIX/$BIN_PATH"
else
QT_MOBILITY_DEMOS=`absPath $QT_MOBILITY_DEMOS $LINUX_TARGET`
if [ "$?" -eq "1" ]; then
exit 1
fi
fi
echo "QT_MOBILITY_DEMOS = $QT_MOBILITY_DEMOS" >> "$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"
fi
if [ -z "$BUILD_UNITTESTS" ]; then
echo "build_unit_tests = no" >> "$CONFIG_IN"
else
echo "build_unit_tests = yes" >> "$CONFIG_IN"
fi
if [ -z "$BUILD_PUBLIC_UNITTESTS" ]; then
echo "build_public_unit_tests = no" >> "$CONFIG_IN"
else
echo "build_public_unit_tests = yes" >> "$CONFIG_IN"
fi
if [ -z "$BUILD_EXAMPLES" ]; then
echo "build_examples = no" >> "$CONFIG_IN"
else
echo "build_examples = yes" >> "$CONFIG_IN"
fi
if [ -z "$BUILD_DEMOS" ]; then
echo "build_demos = no" >> "$CONFIG_IN"
else
echo "build_demos = yes" >> "$CONFIG_IN"
fi
if [ -z "$BUILD_DOCS" ]; then
echo "build_docs = no" >> "$CONFIG_IN"
else
echo "build_docs = yes" >> "$CONFIG_IN"
fi
if [ -z "$BUILD_TOOLS" ]; then
echo "build_tools = no" >> "$CONFIG_IN"
else
echo "build_tools = yes" >> "$CONFIG_IN"
fi
echo "Configuring Qt Mobility"
echo
WHICH="$relpath/config.tests/tools/which.test"
printf "Checking available Qt"
if ! "$WHICH" $QMAKE_EXEC 2>/dev/null 1>&2; then
QMAKE_EXEC_ALTERNATIVE=
if "$WHICH" qmake4 2>/dev/null 1>&2; then
QMAKE_EXEC_ALTERNATIVE=qmake4
elif "$WHICH" qmake-qt4 2>/dev/null 1>&2; then
QMAKE_EXEC_ALTERNATIVE=qmake-qt4
fi
if [ -z "$QMAKE_EXEC_ALTERNATIVE" ]; then
printf " ... Not found\n\n" >&2
echo >&2 "Cannot find "$QMAKE_EXEC" in your PATH.";
echo >&2 "Aborting."
exit 1
else
QMAKE_EXEC="$QMAKE_EXEC_ALTERNATIVE"
fi
fi
#we found a qmake binary
printf " ... "
$QMAKE_EXEC -query QT_VERSION
# find out which make we want to use
MAKE=
for m in make gmake; do
if "$WHICH" $m >/dev/null 2>&1; then
MAKE=`$WHICH $m`
break
fi
done
if [ -z "$MAKE" ]; then
echo >&2 "Cannot find 'make' or 'gmake' in your PATH";
echo >&2 "Aborting."
exit 1
fi
compileTest()
{
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_EXEC $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 tests
compileTest QMF qmf
compileTest NetworkManager networkmanager
compileTest "CoreWLAN (MacOS 10.6)" corewlan
compileTest Immersion immersion
compileTest "Maemo ICD" maemo-icd
compileTest "Maemo ICD WLAN" maemo-icd-network-wlan
compileTest "Maemo5 contacts dependencies" maemo5-contacts
compileTest "Maemo5 organizer dependencies" maemo5-calendar
compileTest "Bluez" bluez
compileTest "Gstreamer Photography" gstreamer-photography
compileTest "Pulse Audio" pulseaudio
if [ "$LINUX_TARGET" = maemo6 ]; then
compileTest sensord sensord
else
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"
echo "Generating Mobility Headers..."
#remove old headers
rm -rf $shadowpath/include
mkdir $shadowpath/include
$relpath/bin/syncheaders $shadowpath/include/QtMobility $relpath/src/global
for 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
$relpath/bin/syncheaders $shadowpath/include/QtLocation $relpath/src/location/landmarks
$relpath/bin/syncheaders $shadowpath/include/QtLocation $relpath/src/location/maps
$relpath/bin/syncheaders $shadowpath/include/QtLocation $relpath/src/location/maps/tiled
;;
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. organizer includes might also be necessary
$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
if [ -n "$ORGANIZER_REQUESTED" ]; then
$relpath/bin/syncheaders $shadowpath/include/QtVersitOrganizer $relpath/src/versitorganizer
fi
;;
sensors)
$relpath/bin/syncheaders $shadowpath/include/QtSensors $relpath/src/sensors
;;
feedback)
$relpath/bin/syncheaders $shadowpath/include/QtFeedback $relpath/src/feedback
;;
gallery)
$relpath/bin/syncheaders $shadowpath/include/QtGallery $relpath/src/gallery
;;
organizer)
$relpath/bin/syncheaders $shadowpath/include/QtOrganizer $relpath/src/organizer
$relpath/bin/syncheaders $shadowpath/include/QtOrganizer $relpath/src/organizer/items
$relpath/bin/syncheaders $shadowpath/include/QtOrganizer $relpath/src/organizer/requests
$relpath/bin/syncheaders $shadowpath/include/QtOrganizer $relpath/src/organizer/filters
$relpath/bin/syncheaders $shadowpath/include/QtOrganizer $relpath/src/organizer/details
;;
*)
echo "Cannot generate headers for $module"
;;
esac
done
mv "$CONFIG_IN" config.pri
mkdir -p "$shadowpath/features"
if [ "$shadowpath" != "$relpath" ]; then
cp -f "$relpath/features/strict_flags.prf" "$shadowpath/features"
fi
echo "Running $QMAKE_EXEC..."
if $QMAKE_EXEC -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