summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Dickow <jjdickow@gmail.com>2014-04-14 09:00:36 -0400
committerJustin Dickow <jjdickow@gmail.com>2014-04-14 09:00:36 -0400
commitc2d62a426169550b5c35b6d448951a56a4ead1aa (patch)
tree0c7a50e8c484620c29731ad07e34521a0d03a5ee
parent0c4c4c651ee0aab0c42d5f11fb7e1d51c6ef4580 (diff)
downloadsmartdevicelink-c2d62a426169550b5c35b6d448951a56a4ead1aa.tar.gz
Added FindQt.sh to ${CMAKE_SOURCE_DIR}
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
-rw-r--r--SDL_Core/FindQt.sh174
1 files changed, 174 insertions, 0 deletions
diff --git a/SDL_Core/FindQt.sh b/SDL_Core/FindQt.sh
new file mode 100644
index 000000000..71a7b10a1
--- /dev/null
+++ b/SDL_Core/FindQt.sh
@@ -0,0 +1,174 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2013, Ford Motor Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided with the
+# distribution.
+#
+# Neither the name of the Ford Motor Company nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+usage() {
+ echo "Usage: $0 [-v <version>] [-b] [<file name>]"
+ echo
+ echo " Look for file in Qt directory."
+ echo " If file name isn't set then look for bin directory."
+ echo
+ echo " -v <version> look for Qt specific version x.x.x"
+ echo " -b look for binary file"
+ echo
+}
+
+version2int() {
+ IFS="."
+ local ver=0
+ for i in $1; do
+ ver=$(( $ver * 32 + $i ))
+ done
+ echo $ver
+}
+
+version_match() {
+ v1=$(version2int $1)
+ v2=$(version2int $2)
+ # It's bash way to say "if ((version1 < version2) and (major1 == major2))
+ if [[ ( $v1 -le $v2 ) && ( $(( ($v1 / 1024) - ($v2 / 1024) )) == 0 ) ]]; then
+ return 0;
+ else
+ return 1;
+ fi
+}
+
+qmake_data() {
+ $1 --version 2>/dev/null | grep "Using Qt version" | sed "s/.*Qt version \\([0-9\\.]*\\) in \\(.*\\)$/\\$2/"
+}
+
+find_binary() {
+ local qt_binary="$1/$2" # check specified binary
+ if [[ -x $qt_binary && ! -d $qt_binary ]]; then # to be executable and not to be directory
+ echo -n $qt_binary # output without newline
+ return 0
+ fi
+ return 1
+}
+
+find_file() {
+ local qt_file=$(find $1 -name "$2" -type f -print0 -quit 2>/dev/null) # check specified binary
+ if [[ -n $qt_file && ! -d $qt_file ]]; then # if found
+ echo -n $qt_file #output without newline
+ return 0
+ fi
+ return 1
+}
+
+type=file
+version="0.0.0"
+while getopts :v:b option; do
+ case "$option" in
+ v) version=$OPTARG ;;
+ b) type=binary ;;
+ *) usage; exit 1; ;;
+ esac
+done
+
+shift $(( OPTIND - 1 ))
+if [[ -z $1 ]]; then
+ type=bindir
+else
+ file_name=$1
+fi
+
+## First attempt - using locate
+if command -v locate > /dev/null; then
+ for searchloc in $CUSTOM_QT_DIR ~ /opt /usr/local; do
+ qmake_list=$(locate $searchloc/*/bin/qmake)
+ for qmake in $qmake_list; do
+ if [[ ! -x $qmake || -d $qmake ]]; then
+ continue
+ fi
+ # called with "qmake 1" return qmake version
+ qt_version=$(qmake_data $qmake 1)
+ if ! version_match $version $qt_version; then
+ continue
+ fi
+
+ case $type in
+ binary)
+ qt_dir=$(dirname $qmake 2> /dev/null)
+ if find_binary $qt_dir $file_name; then
+ exit 0
+ fi
+ ;;
+ file)
+ # called with "qmake 2" return Qt installation dir
+ qt_installdir=$(qmake_data $qmake 2)
+ if find_file $qt_installdir $file_name; then
+ exit 0
+ fi
+ ;;
+ bindir)
+ echo -n $(dirname $qmake 2>/dev/null)
+ exit 0
+ ;;
+ esac
+ done
+ done
+fi
+
+## Second attempt - using find
+export -f find_file
+export -f qmake_data
+export -f version_match
+export -f version2int
+
+qmake=$(find -L $CUSTOM_QT_DIR ~ /opt /usr/local -name '.*' -prune \
+ -o -name qmake -type f \
+ -executable \
+ -exec /bin/bash -c "version_qt=\$(qmake_data {} 1);version_match $version \$version_qt" {} \; -print -quit > /dev/null)
+if ! [ $? ]; then
+ exit 1;
+fi
+
+case $type in
+ binary)
+ qt_dir=$(dirname $qmake 2>/dev/null)
+ if find_binary $qt_dir $file_name; then
+ exit 0
+ fi
+ ;;
+ file)
+ # called with "qmake 2" return Qt installation dir
+ qt_installdir=$(qmake_data $qmake 2)
+ if find_file $qt_installdir $file_name; then
+ exit 0
+ fi
+ ;;
+ bindir)
+ echo -n $(dirname $qmake 2>/dev/null)
+ exit 0
+ ;;
+esac
+
+exit 1