1#!/bin/sh
2
3BUILD_TREE=`/bin/pwd`
4SOURCE_TREE=`dirname $0`
5SOURCE_TREE=`cd "$SOURCE_TREE"; /bin/pwd`
6CONFIG_VARS="$BUILD_TREE/.config.vars"
7
8INSTALL_PREFIX=
9INSTALL_LIBS=
10INSTALL_BINS=
11INSTALL_HEADERS=
12INSTALL_FEATURES=
13INSTALL_IMPORTS=
14INSTALL_QML=
15
16BUILD_EXAMPLES=yes
17BUILD_QML=yes
18BUILD_TESTS=yes
19
20BUILD_UCHARDET=auto
21BUILD_ICU=auto
22
23QMAKE_CONFIG=
24QMAKE_PARAMS=
25QMAKE_DEBUG=
26QMAKE_SPEC=
27OPT_HELP=no
28
29QMAKE=`which qmake || which qmake-qt5 || which qmake-qt4` 2>/dev/null
30
31if [ -f "$CONFIG_VARS" ]; then
32    rm "$CONFIG_VARS"
33fi
34
35#-------------------------------------------------------------------------------
36# parse command line arguments
37#-------------------------------------------------------------------------------
38
39# parse the arguments, setting things to "yes" or "no"
40while [ "$#" -gt 0 ]; do
41    CURRENT_OPT="$1"
42    UNKNOWN_ARG=no
43    case "$1" in
44    #Autoconf style options
45    --enable-*)
46        VAR=`echo $1 | sed "s,^--enable-\(.*\),\1,"`
47        VAL=yes
48        ;;
49    --disable-*)
50        VAR=`echo $1 | sed "s,^--disable-\(.*\),\1,"`
51        VAL=no
52        ;;
53    --*=*)
54        VAR=`echo $1 | sed "s,^--\(.*\)=.*,\1,"`
55        VAL=`echo $1 | sed "s,^--.*=\(.*\),\1,"`
56        ;;
57    --nomake|--make|--prefix|--libdir|--bindir|--headerdir|--featuredir|--importdir|--qmldir|--qmake|--spec|--config|--var)
58        VAR=`echo $1 | sed "s,^--\(.*\),\1,"`
59        shift
60        VAL="$1"
61        ;;
62    --no-*)
63        VAR=`echo $1 | sed "s,^--no-\(.*\),\1,"`
64        VAL=no
65        ;;
66    --*)
67        VAR=`echo $1 | sed "s,^--\(.*\),\1,"`
68        VAL=yes
69        ;;
70    #Qt style options that pass an argument
71    -nomake|-make|-prefix|-libdir|-bindir|-headerdir|-featuredir|-importdir|-qmldir|-qmake|-spec|-config|-var)
72        VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
73        shift
74        VAL="$1"
75        ;;
76    #Qt style no options
77    -no-uchardet|-no-icu)
78        VAR=`echo $1 | sed 's,^-no-\(.*\),\1,'`
79        VAL=no
80        ;;
81    #Qt style yes options
82    -uchardet|-icu)
83        VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
84        VAL=yes
85        ;;
86    -*)
87        VAR=`echo $1 | sed 's,^-\(.*\),\1,'`
88        VAL=unknown
89        ;;
90    *)
91        UNKNOWN_ARG=yes
92        ;;
93    esac
94    if [ "$UNKNOWN_ARG" = "yes" ]; then
95        echo "$1: unknown argument"
96        OPT_HELP=yes
97        ERROR=yes
98        shift
99        continue
100    fi
101    shift
102
103    UNKNOWN_OPT=no
104    case "$VAR" in
105    prefix)
106        INSTALL_PREFIX="$VAL"
107        ;;
108    libdir)
109        INSTALL_LIBS="$VAL"
110        ;;
111    bindir)
112        INSTALL_BINS="$VAL"
113        ;;
114    headerdir)
115        INSTALL_HEADERS="$VAL"
116        ;;
117    featuredir)
118        INSTALL_FEATURES="$VAL"
119        ;;
120    importdir)
121        INSTALL_IMPORTS="$VAL"
122        ;;
123    qmldir)
124        INSTALL_QML="$VAL"
125        ;;
126    nomake)
127        case "$VAL" in
128        examples)
129            BUILD_EXAMPLES=no
130            ;;
131        qml)
132            BUILD_QML=no
133            ;;
134        tests)
135            BUILD_TESTS=no
136            ;;
137        *)
138            CURRENT_OPT="$VAL"
139            UNKNOWN_OPT=yes
140            ;;
141        esac
142        ;;
143    make)
144        case "$VAL" in
145        examples)
146            BUILD_EXAMPLES=yes
147            ;;
148        qml)
149            BUILD_QML=yes
150            ;;
151        tests)
152            BUILD_TESTS=yes
153            ;;
154        *)
155            CURRENT_OPT="$VAL"
156            UNKNOWN_OPT=yes
157            ;;
158        esac
159        ;;
160    verbose)
161        QMAKE_CONFIG="$QMAKE_CONFIG verbose"
162        ;;
163    static)
164        QMAKE_CONFIG="$QMAKE_CONFIG static"
165        ;;
166    qmake)
167        QMAKE="$VAL"
168        ;;
169    spec)
170        QMAKE_SPEC="$VAL"
171        ;;
172    config)
173        QMAKE_CONFIG="$QMAKE_CONFIG $VAL"
174        ;;
175    var)
176        echo "$VAL" >> "$CONFIG_VARS"
177        ;;
178    d)
179        QMAKE_DEBUG="$QMAKE_DEBUG -d"
180        ;;
181    uchardet)
182        if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
183            BUILD_UCHARDET=$VAL
184        else
185            UNKNOWN_OPT=yes
186        fi
187        ;;
188    icu)
189        if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
190            BUILD_ICU=$VAL
191        else
192            UNKNOWN_OPT=yes
193        fi
194        ;;
195    h|help)
196        OPT_HELP=yes
197        ;;
198    *)
199        UNKNOWN_OPT=yes
200        ;;
201    esac
202    if [ "$UNKNOWN_OPT" = "yes" ]; then
203        echo "${CURRENT_OPT}: unknown option"
204        OPT_HELP=yes
205        ERROR=yes
206    fi
207done
208
209if [ "$OPT_HELP" = "yes" ]; then
210    cat << EOF
211Usage:  configure [options]
212
213Installation options:
214
215    -prefix <dir> ............ The installation prefix
216    -libdir <dir> ............ Libraries will be installed to <dir>
217                               (default QT_INSTALL_LIBS)
218    -bindir <dir> ............ Binaries will be installed to <dir>
219                               (default QT_INSTALL_BINS)
220    -headerdir <dir> ......... Headers will be installed to <dir>
221                               (default QT_INSTALL_HEADERS/Communi)
222    -featuredir <dir> ........ Features will be installed to <dir>
223                               (default QT_HOST_DATA/mkspecs/features)
224    -importdir <dir> ......... Imports for QML1 will be installed to <dir>/Communi
225                               (default QT_INSTALL_IMPORTS/Communi)
226    -qmldir <dir> ............ Imports for QML2 will be installed to <dir>/Communi
227                               (default QT_INSTALL_QML/Communi)
228
229Configure options:
230
231    -verbose ................. Verbose build output
232    -static .................. Build static library
233    -qmake ................... qmake to use
234    -config (config) ......... Additional configuration options recognized by qmake
235                               (eg. -config warn_off)
236    -var (value) ............. Additional variables recognized by qmake
237                               (eg. -var "QMAKE_LFLAGS += -L/path/to/icu")
238    -make (part) ............. Add part to the list of parts to be built at
239                               make time (available parts: examples qml tests)
240    -nomake (part) ........... Exclude part from the list of parts to be built
241
242Additional options:
243
244    -no-uchardet ............. Do not build uchardet support
245    -uchardet ................ Build uchardet support
246
247    -no-icu .................. Do not build ICU support
248    -icu ..................... Build ICU support
249
250EOF
251    [ "x$ERROR" = "xyes" ] && exit 1
252    exit 0
253fi
254
255if [ ! -f "$QMAKE" ]; then
256    echo "ERROR: Unable to find qmake. Try $0 -qmake /path/to/qmake."
257    exit 1
258fi
259
260if [ "$INSTALL_PREFIX" != "" ]; then
261    [ "$INSTALL_LIBS" = "" ] && INSTALL_LIBS="$INSTALL_PREFIX/lib"
262    [ "$INSTALL_BINS" = "" ] && INSTALL_BINS="$INSTALL_PREFIX/bin"
263    [ "$INSTALL_HEADERS" = "" ] && INSTALL_HEADERS="$INSTALL_PREFIX/include"
264    [ "$INSTALL_FEATURES" = "" ] && INSTALL_FEATURES="$INSTALL_PREFIX/features"
265    [ "$INSTALL_IMPORTS" = "" ] && INSTALL_IMPORTS="$INSTALL_PREFIX/imports"
266    [ "$INSTALL_QML" = "" ] && INSTALL_QML="$INSTALL_PREFIX/qml"
267fi
268[ "$INSTALL_LIBS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_LIBS=$INSTALL_LIBS"
269[ "$INSTALL_BINS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_BINS=$INSTALL_BINS"
270[ "$INSTALL_HEADERS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_HEADERS=$INSTALL_HEADERS"
271[ "$INSTALL_FEATURES" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_FEATURES=$INSTALL_FEATURES"
272[ "$INSTALL_IMPORTS" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_IMPORTS=$INSTALL_IMPORTS"
273[ "$INSTALL_QML" != "" ] && QMAKE_PARAMS="$QMAKE_PARAMS IRC_INSTALL_QML=$INSTALL_QML"
274
275[ "$INSTALL_LIBS" = "" ] && INSTALL_LIBS=`$QMAKE -query QT_INSTALL_LIBS`
276[ "$INSTALL_BINS" = "" ] && INSTALL_BINS=`$QMAKE -query QT_INSTALL_BINS`
277[ "$INSTALL_HEADERS" = "" ] && INSTALL_HEADERS=`$QMAKE -query QT_INSTALL_HEADERS`/Communi
278
279if [ "$INSTALL_FEATURES" = "" ]; then
280    $QMAKE -query QT_HOST_DATA > /dev/null 2>&1
281    if [ $? != 0 ]; then
282        INSTALL_FEATURES=`$QMAKE -query QMAKE_MKSPECS`/features
283    else
284        INSTALL_FEATURES=`$QMAKE -query QT_HOST_DATA`/mkspecs/features
285    fi
286fi
287
288[ "$INSTALL_IMPORTS" = "" ] && INSTALL_IMPORTS=`$QMAKE -query QT_INSTALL_IMPORTS`
289[ "$INSTALL_QML" = "" ] && INSTALL_QML=`$QMAKE -query QT_INSTALL_QML`
290
291[ "$BUILD_EXAMPLES" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_examples"
292[ "$BUILD_QML" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_qml"
293[ "$BUILD_TESTS" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_tests"
294
295[ "$BUILD_UCHARDET" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_uchardet"
296[ "$BUILD_ICU" = "no" ] && QMAKE_PARAMS="$QMAKE_PARAMS -config no_icu"
297
298[ "$QMAKE_SPEC" != "" ] && QMAKE_SPEC="-spec $QMAKE_SPEC"
299
300echo
301echo "Running $QMAKE $QMAKE_SPEC..."
302
303$QMAKE $QMAKE_SPEC $QMAKE_DEBUG $QMAKE_PARAMS "CONFIG+=$QMAKE_CONFIG" -r $SOURCE_TREE/libcommuni.pro
304if [ $? != 0 ]; then
305    echo "ERROR: qmake run failed."
306    exit 1
307fi
308
309echo
310echo "Communi build configuration:"
311if [ "$QMAKE_CONFIG" != "" ]; then
312    echo "Configuration ...................$QMAKE_CONFIG"
313fi
314echo "uchardet support ................ $BUILD_UCHARDET"
315echo "ICU support ..................... $BUILD_ICU"
316echo "Examples ........................ $BUILD_EXAMPLES"
317echo "QML ............................. $BUILD_QML"
318echo "Tests ........................... $BUILD_TESTS"
319echo
320echo "Install libs .................... $INSTALL_LIBS"
321#echo "Install binaries ................ $INSTALL_BINS"
322echo "Install headers ................. $INSTALL_HEADERS"
323echo "Install features ................ $INSTALL_FEATURES"
324if [ "$BUILD_QML" = "yes" ]; then
325    echo "Install QML1 imports ............ $INSTALL_IMPORTS"
326    echo "Install QML2 imports ............ $INSTALL_QML"
327fi
328echo
329echo Communi is now configured for building. Just run \'make\'.
330echo
331