113481Sgiacomo.travaglini@arm.com#!/bin/sh
213481Sgiacomo.travaglini@arm.com
313481Sgiacomo.travaglini@arm.com# These variables are automatically filled in by the configure script.
413481Sgiacomo.travaglini@arm.comname="@PACKAGE_TARNAME@"
513481Sgiacomo.travaglini@arm.comversion="@PACKAGE_VERSION@"
613481Sgiacomo.travaglini@arm.com
713481Sgiacomo.travaglini@arm.comshow_usage()
813481Sgiacomo.travaglini@arm.com{
913481Sgiacomo.travaglini@arm.com  echo "Usage: gtest-config [OPTIONS...]"
1013481Sgiacomo.travaglini@arm.com}
1113481Sgiacomo.travaglini@arm.com
1213481Sgiacomo.travaglini@arm.comshow_help()
1313481Sgiacomo.travaglini@arm.com{
1413481Sgiacomo.travaglini@arm.com  show_usage
1513481Sgiacomo.travaglini@arm.com  cat <<\EOF
1613481Sgiacomo.travaglini@arm.com
1713481Sgiacomo.travaglini@arm.comThe `gtest-config' script provides access to the necessary compile and linking
1813481Sgiacomo.travaglini@arm.comflags to connect with Google C++ Testing Framework, both in a build prior to
1913481Sgiacomo.travaglini@arm.cominstallation, and on the system proper after installation. The installation
2013481Sgiacomo.travaglini@arm.comoverrides may be issued in combination with any other queries, but will only
2113481Sgiacomo.travaglini@arm.comaffect installation queries if called on a built but not installed gtest. The
2213481Sgiacomo.travaglini@arm.cominstallation queries may not be issued with any other types of queries, and
2313481Sgiacomo.travaglini@arm.comonly one installation query may be made at a time. The version queries and
2413481Sgiacomo.travaglini@arm.comcompiler flag queries may be combined as desired but not mixed. Different
2513481Sgiacomo.travaglini@arm.comversion queries are always combined with logical "and" semantics, and only the
2613481Sgiacomo.travaglini@arm.comlast of any particular query is used while all previous ones ignored. All
2713481Sgiacomo.travaglini@arm.comversions must be specified as a sequence of numbers separated by periods.
2813481Sgiacomo.travaglini@arm.comCompiler flag queries output the union of the sets of flags when combined.
2913481Sgiacomo.travaglini@arm.com
3013481Sgiacomo.travaglini@arm.com Examples:
3113481Sgiacomo.travaglini@arm.com  gtest-config --min-version=1.0 || echo "Insufficient Google Test version."
3213481Sgiacomo.travaglini@arm.com
3313481Sgiacomo.travaglini@arm.com  g++ $(gtest-config --cppflags --cxxflags) -o foo.o -c foo.cpp
3413481Sgiacomo.travaglini@arm.com  g++ $(gtest-config --ldflags --libs) -o foo foo.o
3513481Sgiacomo.travaglini@arm.com
3613481Sgiacomo.travaglini@arm.com  # When using a built but not installed Google Test:
3713481Sgiacomo.travaglini@arm.com  g++ $(../../my_gtest_build/scripts/gtest-config ...) ...
3813481Sgiacomo.travaglini@arm.com
3913481Sgiacomo.travaglini@arm.com  # When using an installed Google Test, but with installation overrides:
4013481Sgiacomo.travaglini@arm.com  export GTEST_PREFIX="/opt"
4113481Sgiacomo.travaglini@arm.com  g++ $(gtest-config --libdir="/opt/lib64" ...) ...
4213481Sgiacomo.travaglini@arm.com
4313481Sgiacomo.travaglini@arm.com Help:
4413481Sgiacomo.travaglini@arm.com  --usage                    brief usage information
4513481Sgiacomo.travaglini@arm.com  --help                     display this help message
4613481Sgiacomo.travaglini@arm.com
4713481Sgiacomo.travaglini@arm.com Installation Overrides:
4813481Sgiacomo.travaglini@arm.com  --prefix=<dir>             overrides the installation prefix
4913481Sgiacomo.travaglini@arm.com  --exec-prefix=<dir>        overrides the executable installation prefix
5013481Sgiacomo.travaglini@arm.com  --libdir=<dir>             overrides the library installation prefix
5113481Sgiacomo.travaglini@arm.com  --includedir=<dir>         overrides the header file installation prefix
5213481Sgiacomo.travaglini@arm.com
5313481Sgiacomo.travaglini@arm.com Installation Queries:
5413481Sgiacomo.travaglini@arm.com  --prefix                   installation prefix
5513481Sgiacomo.travaglini@arm.com  --exec-prefix              executable installation prefix
5613481Sgiacomo.travaglini@arm.com  --libdir                   library installation directory
5713481Sgiacomo.travaglini@arm.com  --includedir               header file installation directory
5813481Sgiacomo.travaglini@arm.com  --version                  the version of the Google Test installation
5913481Sgiacomo.travaglini@arm.com
6013481Sgiacomo.travaglini@arm.com Version Queries:
6113481Sgiacomo.travaglini@arm.com  --min-version=VERSION      return 0 if the version is at least VERSION
6213481Sgiacomo.travaglini@arm.com  --exact-version=VERSION    return 0 if the version is exactly VERSION
6313481Sgiacomo.travaglini@arm.com  --max-version=VERSION      return 0 if the version is at most VERSION
6413481Sgiacomo.travaglini@arm.com
6513481Sgiacomo.travaglini@arm.com Compilation Flag Queries:
6613481Sgiacomo.travaglini@arm.com  --cppflags                 compile flags specific to the C-like preprocessors
6713481Sgiacomo.travaglini@arm.com  --cxxflags                 compile flags appropriate for C++ programs
6813481Sgiacomo.travaglini@arm.com  --ldflags                  linker flags
6913481Sgiacomo.travaglini@arm.com  --libs                     libraries for linking
7013481Sgiacomo.travaglini@arm.com
7113481Sgiacomo.travaglini@arm.comEOF
7213481Sgiacomo.travaglini@arm.com}
7313481Sgiacomo.travaglini@arm.com
7413481Sgiacomo.travaglini@arm.com# This function bounds our version with a min and a max. It uses some clever
7513481Sgiacomo.travaglini@arm.com# POSIX-compliant variable expansion to portably do all the work in the shell
7613481Sgiacomo.travaglini@arm.com# and avoid any dependency on a particular "sed" or "awk" implementation.
7713481Sgiacomo.travaglini@arm.com# Notable is that it will only ever compare the first 3 components of versions.
7813481Sgiacomo.travaglini@arm.com# Further components will be cleanly stripped off. All versions must be
7913481Sgiacomo.travaglini@arm.com# unadorned, so "v1.0" will *not* work. The minimum version must be in $1, and
8013481Sgiacomo.travaglini@arm.com# the max in $2. TODO(chandlerc@google.com): If this ever breaks, we should
8113481Sgiacomo.travaglini@arm.com# investigate expanding this via autom4te from AS_VERSION_COMPARE rather than
8213481Sgiacomo.travaglini@arm.com# continuing to maintain our own shell version.
8313481Sgiacomo.travaglini@arm.comcheck_versions()
8413481Sgiacomo.travaglini@arm.com{
8513481Sgiacomo.travaglini@arm.com  major_version=${version%%.*}
8613481Sgiacomo.travaglini@arm.com  minor_version="0"
8713481Sgiacomo.travaglini@arm.com  point_version="0"
8813481Sgiacomo.travaglini@arm.com  if test "${version#*.}" != "${version}"; then
8913481Sgiacomo.travaglini@arm.com    minor_version=${version#*.}
9013481Sgiacomo.travaglini@arm.com    minor_version=${minor_version%%.*}
9113481Sgiacomo.travaglini@arm.com  fi
9213481Sgiacomo.travaglini@arm.com  if test "${version#*.*.}" != "${version}"; then
9313481Sgiacomo.travaglini@arm.com    point_version=${version#*.*.}
9413481Sgiacomo.travaglini@arm.com    point_version=${point_version%%.*}
9513481Sgiacomo.travaglini@arm.com  fi
9613481Sgiacomo.travaglini@arm.com
9713481Sgiacomo.travaglini@arm.com  min_version="$1"
9813481Sgiacomo.travaglini@arm.com  min_major_version=${min_version%%.*}
9913481Sgiacomo.travaglini@arm.com  min_minor_version="0"
10013481Sgiacomo.travaglini@arm.com  min_point_version="0"
10113481Sgiacomo.travaglini@arm.com  if test "${min_version#*.}" != "${min_version}"; then
10213481Sgiacomo.travaglini@arm.com    min_minor_version=${min_version#*.}
10313481Sgiacomo.travaglini@arm.com    min_minor_version=${min_minor_version%%.*}
10413481Sgiacomo.travaglini@arm.com  fi
10513481Sgiacomo.travaglini@arm.com  if test "${min_version#*.*.}" != "${min_version}"; then
10613481Sgiacomo.travaglini@arm.com    min_point_version=${min_version#*.*.}
10713481Sgiacomo.travaglini@arm.com    min_point_version=${min_point_version%%.*}
10813481Sgiacomo.travaglini@arm.com  fi
10913481Sgiacomo.travaglini@arm.com
11013481Sgiacomo.travaglini@arm.com  max_version="$2"
11113481Sgiacomo.travaglini@arm.com  max_major_version=${max_version%%.*}
11213481Sgiacomo.travaglini@arm.com  max_minor_version="0"
11313481Sgiacomo.travaglini@arm.com  max_point_version="0"
11413481Sgiacomo.travaglini@arm.com  if test "${max_version#*.}" != "${max_version}"; then
11513481Sgiacomo.travaglini@arm.com    max_minor_version=${max_version#*.}
11613481Sgiacomo.travaglini@arm.com    max_minor_version=${max_minor_version%%.*}
11713481Sgiacomo.travaglini@arm.com  fi
11813481Sgiacomo.travaglini@arm.com  if test "${max_version#*.*.}" != "${max_version}"; then
11913481Sgiacomo.travaglini@arm.com    max_point_version=${max_version#*.*.}
12013481Sgiacomo.travaglini@arm.com    max_point_version=${max_point_version%%.*}
12113481Sgiacomo.travaglini@arm.com  fi
12213481Sgiacomo.travaglini@arm.com
12313481Sgiacomo.travaglini@arm.com  test $(($major_version)) -lt $(($min_major_version)) && exit 1
12413481Sgiacomo.travaglini@arm.com  if test $(($major_version)) -eq $(($min_major_version)); then
12513481Sgiacomo.travaglini@arm.com    test $(($minor_version)) -lt $(($min_minor_version)) && exit 1
12613481Sgiacomo.travaglini@arm.com    if test $(($minor_version)) -eq $(($min_minor_version)); then
12713481Sgiacomo.travaglini@arm.com      test $(($point_version)) -lt $(($min_point_version)) && exit 1
12813481Sgiacomo.travaglini@arm.com    fi
12913481Sgiacomo.travaglini@arm.com  fi
13013481Sgiacomo.travaglini@arm.com
13113481Sgiacomo.travaglini@arm.com  test $(($major_version)) -gt $(($max_major_version)) && exit 1
13213481Sgiacomo.travaglini@arm.com  if test $(($major_version)) -eq $(($max_major_version)); then
13313481Sgiacomo.travaglini@arm.com    test $(($minor_version)) -gt $(($max_minor_version)) && exit 1
13413481Sgiacomo.travaglini@arm.com    if test $(($minor_version)) -eq $(($max_minor_version)); then
13513481Sgiacomo.travaglini@arm.com      test $(($point_version)) -gt $(($max_point_version)) && exit 1
13613481Sgiacomo.travaglini@arm.com    fi
13713481Sgiacomo.travaglini@arm.com  fi
13813481Sgiacomo.travaglini@arm.com
13913481Sgiacomo.travaglini@arm.com  exit 0
14013481Sgiacomo.travaglini@arm.com}
14113481Sgiacomo.travaglini@arm.com
14213481Sgiacomo.travaglini@arm.com# Show the usage line when no arguments are specified.
14313481Sgiacomo.travaglini@arm.comif test $# -eq 0; then
14413481Sgiacomo.travaglini@arm.com  show_usage
14513481Sgiacomo.travaglini@arm.com  exit 1
14613481Sgiacomo.travaglini@arm.comfi
14713481Sgiacomo.travaglini@arm.com
14813481Sgiacomo.travaglini@arm.comwhile test $# -gt 0; do
14913481Sgiacomo.travaglini@arm.com  case $1 in
15013481Sgiacomo.travaglini@arm.com    --usage)          show_usage;         exit 0;;
15113481Sgiacomo.travaglini@arm.com    --help)           show_help;          exit 0;;
15213481Sgiacomo.travaglini@arm.com
15313481Sgiacomo.travaglini@arm.com    # Installation overrides
15413481Sgiacomo.travaglini@arm.com    --prefix=*)       GTEST_PREFIX=${1#--prefix=};;
15513481Sgiacomo.travaglini@arm.com    --exec-prefix=*)  GTEST_EXEC_PREFIX=${1#--exec-prefix=};;
15613481Sgiacomo.travaglini@arm.com    --libdir=*)       GTEST_LIBDIR=${1#--libdir=};;
15713481Sgiacomo.travaglini@arm.com    --includedir=*)   GTEST_INCLUDEDIR=${1#--includedir=};;
15813481Sgiacomo.travaglini@arm.com
15913481Sgiacomo.travaglini@arm.com    # Installation queries
16013481Sgiacomo.travaglini@arm.com    --prefix|--exec-prefix|--libdir|--includedir|--version)
16113481Sgiacomo.travaglini@arm.com      if test -n "${do_query}"; then
16213481Sgiacomo.travaglini@arm.com        show_usage
16313481Sgiacomo.travaglini@arm.com        exit 1
16413481Sgiacomo.travaglini@arm.com      fi
16513481Sgiacomo.travaglini@arm.com      do_query=${1#--}
16613481Sgiacomo.travaglini@arm.com      ;;
16713481Sgiacomo.travaglini@arm.com
16813481Sgiacomo.travaglini@arm.com    # Version checking
16913481Sgiacomo.travaglini@arm.com    --min-version=*)
17013481Sgiacomo.travaglini@arm.com      do_check_versions=yes
17113481Sgiacomo.travaglini@arm.com      min_version=${1#--min-version=}
17213481Sgiacomo.travaglini@arm.com      ;;
17313481Sgiacomo.travaglini@arm.com    --max-version=*)
17413481Sgiacomo.travaglini@arm.com      do_check_versions=yes
17513481Sgiacomo.travaglini@arm.com      max_version=${1#--max-version=}
17613481Sgiacomo.travaglini@arm.com      ;;
17713481Sgiacomo.travaglini@arm.com    --exact-version=*)
17813481Sgiacomo.travaglini@arm.com      do_check_versions=yes
17913481Sgiacomo.travaglini@arm.com      exact_version=${1#--exact-version=}
18013481Sgiacomo.travaglini@arm.com      ;;
18113481Sgiacomo.travaglini@arm.com
18213481Sgiacomo.travaglini@arm.com    # Compiler flag output
18313481Sgiacomo.travaglini@arm.com    --cppflags)       echo_cppflags=yes;;
18413481Sgiacomo.travaglini@arm.com    --cxxflags)       echo_cxxflags=yes;;
18513481Sgiacomo.travaglini@arm.com    --ldflags)        echo_ldflags=yes;;
18613481Sgiacomo.travaglini@arm.com    --libs)           echo_libs=yes;;
18713481Sgiacomo.travaglini@arm.com
18813481Sgiacomo.travaglini@arm.com    # Everything else is an error
18913481Sgiacomo.travaglini@arm.com    *)                show_usage;         exit 1;;
19013481Sgiacomo.travaglini@arm.com  esac
19113481Sgiacomo.travaglini@arm.com  shift
19213481Sgiacomo.travaglini@arm.comdone
19313481Sgiacomo.travaglini@arm.com
19413481Sgiacomo.travaglini@arm.com# These have defaults filled in by the configure script but can also be
19513481Sgiacomo.travaglini@arm.com# overridden by environment variables or command line parameters.
19613481Sgiacomo.travaglini@arm.comprefix="${GTEST_PREFIX:-@prefix@}"
19713481Sgiacomo.travaglini@arm.comexec_prefix="${GTEST_EXEC_PREFIX:-@exec_prefix@}"
19813481Sgiacomo.travaglini@arm.comlibdir="${GTEST_LIBDIR:-@libdir@}"
19913481Sgiacomo.travaglini@arm.comincludedir="${GTEST_INCLUDEDIR:-@includedir@}"
20013481Sgiacomo.travaglini@arm.com
20113481Sgiacomo.travaglini@arm.com# We try and detect if our binary is not located at its installed location. If
20213481Sgiacomo.travaglini@arm.com# it's not, we provide variables pointing to the source and build tree rather
20313481Sgiacomo.travaglini@arm.com# than to the install tree. This allows building against a just-built gtest
20413481Sgiacomo.travaglini@arm.com# rather than an installed gtest.
20513481Sgiacomo.travaglini@arm.combindir="@bindir@"
20613481Sgiacomo.travaglini@arm.comthis_relative_bindir=`dirname $0`
20713481Sgiacomo.travaglini@arm.comthis_bindir=`cd ${this_relative_bindir}; pwd -P`
20813481Sgiacomo.travaglini@arm.comif test "${this_bindir}" = "${this_bindir%${bindir}}"; then
20913481Sgiacomo.travaglini@arm.com  # The path to the script doesn't end in the bindir sequence from Autoconf,
21013481Sgiacomo.travaglini@arm.com  # assume that we are in a build tree.
21113481Sgiacomo.travaglini@arm.com  build_dir=`dirname ${this_bindir}`
21213481Sgiacomo.travaglini@arm.com  src_dir=`cd ${this_bindir}; cd @top_srcdir@; pwd -P`
21313481Sgiacomo.travaglini@arm.com
21413481Sgiacomo.travaglini@arm.com  # TODO(chandlerc@google.com): This is a dangerous dependency on libtool, we
21513481Sgiacomo.travaglini@arm.com  # should work to remove it, and/or remove libtool altogether, replacing it
21613481Sgiacomo.travaglini@arm.com  # with direct references to the library and a link path.
21713481Sgiacomo.travaglini@arm.com  gtest_libs="${build_dir}/lib/libgtest.la @PTHREAD_CFLAGS@ @PTHREAD_LIBS@"
21813481Sgiacomo.travaglini@arm.com  gtest_ldflags=""
21913481Sgiacomo.travaglini@arm.com
22013481Sgiacomo.travaglini@arm.com  # We provide hooks to include from either the source or build dir, where the
22113481Sgiacomo.travaglini@arm.com  # build dir is always preferred. This will potentially allow us to write
22213481Sgiacomo.travaglini@arm.com  # build rules for generated headers and have them automatically be preferred
22313481Sgiacomo.travaglini@arm.com  # over provided versions.
22413481Sgiacomo.travaglini@arm.com  gtest_cppflags="-I${build_dir}/include -I${src_dir}/include"
22513481Sgiacomo.travaglini@arm.com  gtest_cxxflags="@PTHREAD_CFLAGS@"
22613481Sgiacomo.travaglini@arm.comelse
22713481Sgiacomo.travaglini@arm.com  # We're using an installed gtest, although it may be staged under some
22813481Sgiacomo.travaglini@arm.com  # prefix. Assume (as our own libraries do) that we can resolve the prefix,
22913481Sgiacomo.travaglini@arm.com  # and are present in the dynamic link paths.
23013481Sgiacomo.travaglini@arm.com  gtest_ldflags="-L${libdir}"
23113481Sgiacomo.travaglini@arm.com  gtest_libs="-l${name} @PTHREAD_CFLAGS@ @PTHREAD_LIBS@"
23213481Sgiacomo.travaglini@arm.com  gtest_cppflags="-I${includedir}"
23313481Sgiacomo.travaglini@arm.com  gtest_cxxflags="@PTHREAD_CFLAGS@"
23413481Sgiacomo.travaglini@arm.comfi
23513481Sgiacomo.travaglini@arm.com
23613481Sgiacomo.travaglini@arm.com# Do an installation query if requested.
23713481Sgiacomo.travaglini@arm.comif test -n "$do_query"; then
23813481Sgiacomo.travaglini@arm.com  case $do_query in
23913481Sgiacomo.travaglini@arm.com    prefix)           echo $prefix;       exit 0;;
24013481Sgiacomo.travaglini@arm.com    exec-prefix)      echo $exec_prefix;  exit 0;;
24113481Sgiacomo.travaglini@arm.com    libdir)           echo $libdir;       exit 0;;
24213481Sgiacomo.travaglini@arm.com    includedir)       echo $includedir;   exit 0;;
24313481Sgiacomo.travaglini@arm.com    version)          echo $version;      exit 0;;
24413481Sgiacomo.travaglini@arm.com    *)                show_usage;         exit 1;;
24513481Sgiacomo.travaglini@arm.com  esac
24613481Sgiacomo.travaglini@arm.comfi
24713481Sgiacomo.travaglini@arm.com
24813481Sgiacomo.travaglini@arm.com# Do a version check if requested.
24913481Sgiacomo.travaglini@arm.comif test "$do_check_versions" = "yes"; then
25013481Sgiacomo.travaglini@arm.com  # Make sure we didn't receive a bad combination of parameters.
25113481Sgiacomo.travaglini@arm.com  test "$echo_cppflags" = "yes" && show_usage && exit 1
25213481Sgiacomo.travaglini@arm.com  test "$echo_cxxflags" = "yes" && show_usage && exit 1
25313481Sgiacomo.travaglini@arm.com  test "$echo_ldflags" = "yes"  && show_usage && exit 1
25413481Sgiacomo.travaglini@arm.com  test "$echo_libs" = "yes"     && show_usage && exit 1
25513481Sgiacomo.travaglini@arm.com
25613481Sgiacomo.travaglini@arm.com  if test "$exact_version" != ""; then
25713481Sgiacomo.travaglini@arm.com    check_versions $exact_version $exact_version
25813481Sgiacomo.travaglini@arm.com    # unreachable
25913481Sgiacomo.travaglini@arm.com  else
26013481Sgiacomo.travaglini@arm.com    check_versions ${min_version:-0.0.0} ${max_version:-9999.9999.9999}
26113481Sgiacomo.travaglini@arm.com    # unreachable
26213481Sgiacomo.travaglini@arm.com  fi
26313481Sgiacomo.travaglini@arm.comfi
26413481Sgiacomo.travaglini@arm.com
26513481Sgiacomo.travaglini@arm.com# Do the output in the correct order so that these can be used in-line of
26613481Sgiacomo.travaglini@arm.com# a compiler invocation.
26713481Sgiacomo.travaglini@arm.comoutput=""
26813481Sgiacomo.travaglini@arm.comtest "$echo_cppflags" = "yes" && output="$output $gtest_cppflags"
26913481Sgiacomo.travaglini@arm.comtest "$echo_cxxflags" = "yes" && output="$output $gtest_cxxflags"
27013481Sgiacomo.travaglini@arm.comtest "$echo_ldflags" = "yes"  && output="$output $gtest_ldflags"
27113481Sgiacomo.travaglini@arm.comtest "$echo_libs" = "yes"     && output="$output $gtest_libs"
27213481Sgiacomo.travaglini@arm.comecho $output
27313481Sgiacomo.travaglini@arm.com
27413481Sgiacomo.travaglini@arm.comexit 0
275