1############################################################################
2# Usage:
3#   SIM_AC_HAVE_COIN_IFELSE( IF-FOUND, IF-NOT-FOUND )
4#
5# Description:
6#   This macro locates the Coin development system.  If it is found,
7#   the set of variables listed below are set up as described and made
8#   available to the configure script.
9#
10#   The $sim_ac_coin_desired variable can be set to false externally to
11#   make Coin default to be excluded.
12#
13# Autoconf Variables:
14# > $sim_ac_coin_desired     true | false (defaults to true)
15# < $sim_ac_coin_avail       true | false
16# < $sim_ac_coin_cppflags    (extra flags the preprocessor needs)
17# < $sim_ac_coin_cflags      (extra flags the C compiler needs)
18# < $sim_ac_coin_cxxflags    (extra flags the C++ compiler needs)
19# < $sim_ac_coin_ldflags     (extra flags the linker needs)
20# < $sim_ac_coin_libs        (link library flags the linker needs)
21# < $sim_ac_coin_datadir     (location of Coin data files)
22# < $sim_ac_coin_includedir  (location of Coin headers)
23# < $sim_ac_coin_version     (the libCoin version)
24# < $sim_ac_coin_msvcrt      (the MSVC++ C library Coin was built with)
25# < $sim_ac_coin_configcmd   (the path to coin-config or "false")
26#
27# Authors:
28#   Lars J. Aas, <larsa@sim.no>
29#   Morten Eriksen, <mortene@sim.no>
30#
31# TODO:
32#
33
34AC_DEFUN([SIM_AC_HAVE_COIN_IFELSE], [
35AC_PREREQ([2.14a])
36
37# official variables
38sim_ac_coin_avail=false
39sim_ac_coin_cppflags=
40sim_ac_coin_cflags=
41sim_ac_coin_cxxflags=
42sim_ac_coin_ldflags=
43sim_ac_coin_libs=
44sim_ac_coin_datadir=
45sim_ac_coin_includedir=
46sim_ac_coin_version=
47
48# internal variables
49: ${sim_ac_coin_desired=true}
50sim_ac_coin_extrapath=
51
52AC_ARG_WITH([coin],
53AC_HELP_STRING([--with-coin], [enable use of Coin [[default=yes]]])
54AC_HELP_STRING([--with-coin=DIR], [give prefix location of Coin]),
55  [ case $withval in
56    no)  sim_ac_coin_desired=false ;;
57    yes) sim_ac_coin_desired=true ;;
58    *)   sim_ac_coin_desired=true
59         sim_ac_coin_extrapath=$withval ;;
60    esac],
61  [])
62
63case $build in
64*-mks ) sim_ac_pathsep=";" ;;
65* )     sim_ac_pathsep="${PATH_SEPARATOR}" ;;
66esac
67
68if $sim_ac_coin_desired; then
69  sim_ac_path=$PATH
70  test -z "$sim_ac_coin_extrapath" || ## search in --with-coin path
71    sim_ac_path="$sim_ac_coin_extrapath/bin${sim_ac_pathsep}$sim_ac_path"
72  test x"$prefix" = xNONE ||          ## search in --prefix path
73    sim_ac_path="$sim_ac_path${sim_ac_pathsep}$prefix/bin"
74
75  AC_PATH_PROG(sim_ac_coin_configcmd, coin-config, false, $sim_ac_path)
76
77  if test "X$sim_ac_coin_configcmd" != "Xfalse"; then
78    test -n "$CONFIG" &&
79      $sim_ac_coin_configcmd --alternate=$CONFIG >/dev/null 2>/dev/null &&
80      sim_ac_coin_configcmd="$sim_ac_coin_configcmd --alternate=$CONFIG"
81  fi
82
83  if $sim_ac_coin_configcmd; then
84    sim_ac_coin_version=`$sim_ac_coin_configcmd --version`
85    sim_ac_coin_cppflags=`$sim_ac_coin_configcmd --cppflags`
86    sim_ac_coin_cflags=`$sim_ac_coin_configcmd --cflags 2>/dev/null`
87    sim_ac_coin_cxxflags=`$sim_ac_coin_configcmd --cxxflags`
88    sim_ac_coin_ldflags=`$sim_ac_coin_configcmd --ldflags`
89    sim_ac_coin_libs=`$sim_ac_coin_configcmd --libs`
90    sim_ac_coin_datadir=`$sim_ac_coin_configcmd --datadir`
91    # Hide stderr on the following, as ``--includedir'', ``--msvcrt''
92    # and ``--cflags'' options were added late to coin-config.
93    sim_ac_coin_includedir=`$sim_ac_coin_configcmd --includedir 2>/dev/null`
94    sim_ac_coin_msvcrt=`$sim_ac_coin_configcmd --msvcrt 2>/dev/null`
95    sim_ac_coin_cflags=`$sim_ac_coin_configcmd --cflags 2>/dev/null`
96    AC_CACHE_CHECK(
97      [if we can compile and link with the Coin library],
98      sim_cv_coin_avail,
99      [sim_ac_save_cppflags=$CPPFLAGS
100      sim_ac_save_cxxflags=$CXXFLAGS
101      sim_ac_save_ldflags=$LDFLAGS
102      sim_ac_save_libs=$LIBS
103      CPPFLAGS="$CPPFLAGS $sim_ac_coin_cppflags"
104      CXXFLAGS="$CXXFLAGS $sim_ac_coin_cxxflags"
105      LDFLAGS="$LDFLAGS $sim_ac_coin_ldflags"
106      LIBS="$sim_ac_coin_libs $LIBS"
107      AC_LANG_PUSH(C++)
108
109      AC_TRY_LINK(
110        [#include <Inventor/SoDB.h>],
111        [SoDB::init();],
112        [sim_cv_coin_avail=true],
113        [sim_cv_coin_avail=false])
114
115      AC_LANG_POP
116      CPPFLAGS=$sim_ac_save_cppflags
117      CXXFLAGS=$sim_ac_save_cxxflags
118      LDFLAGS=$sim_ac_save_ldflags
119      LIBS=$sim_ac_save_libs
120    ])
121    sim_ac_coin_avail=$sim_cv_coin_avail
122
123    if $sim_ac_coin_avail; then :; else
124      AC_MSG_WARN([
125Compilation and/or linking with the Coin main library SDK failed, for
126unknown reason. If you are familiar with configure-based configuration
127and building, investigate the 'config.log' file for clues.
128
129If you can not figure out what went wrong, please forward the 'config.log'
130file to the email address <coin-support@coin3d.org> and ask for help by
131describing the situation where this failed.
132])
133    fi
134  else # no 'coin-config' found
135
136# FIXME: test for Coin without coin-config script here
137    if test x"$COINDIR" != x""; then
138      sim_ac_coindir=`cygpath -u "$COINDIR" 2>/dev/null || echo "$COINDIR"`
139      if test -d $sim_ac_coindir/bin && test -d $sim_ac_coindir/lib && test -d $sim_ac_coindir/include/Inventor; then
140        # using newest version (last alphabetically) in case of multiple libs
141        sim_ac_coin_lib_file=`echo $sim_ac_coindir/lib/coin*.lib | sed -e 's,.* ,,g'`
142        if test -f $sim_ac_coin_lib_file; then
143          sim_ac_coin_lib_name=`echo $sim_ac_coin_lib_file | sed -e 's,.*/,,g' -e 's,.lib,,'`
144          sim_ac_save_cppflags=$CPPFLAGS
145          sim_ac_save_libs=$LIBS
146          sim_ac_save_ldflags=$LDFLAGS
147          CPPFLAGS="$CPPFLAGS -I$sim_ac_coindir/include"
148          if test -f $sim_ac_coindir/bin/$sim_ac_coin_lib_name.dll; then
149            CPPFLAGS="$CPPFLAGS -DCOIN_DLL"
150          fi
151          LDFLAGS="$LDFLAGS -L$sim_ac_coindir/lib"
152          LIBS="-l$sim_ac_coin_lib_name -lopengl32 $LIBS"
153
154          AC_LANG_PUSH(C++)
155
156          AC_TRY_LINK(
157            [#include <Inventor/SoDB.h>],
158            [SoDB::init();],
159            [sim_cv_coin_avail=true],
160            [sim_cv_coin_avail=false])
161
162          AC_LANG_POP
163          CPPFLAGS=$sim_ac_save_cppflags
164          LDFLAGS=$sim_ac_save_ldflags
165          LIBS=$sim_ac_save_libs
166          sim_ac_coin_avail=$sim_cv_coin_avail
167        fi
168      fi
169    fi
170
171    if $sim_ac_coin_avail; then
172      sim_ac_coin_cppflags=-I$sim_ac_coindir/include
173      if test -f $sim_ac_coindir/bin/$sim_ac_coin_lib_name.dll; then
174        sim_ac_coin_cppflags="$sim_ac_coin_cppflags -DCOIN_DLL"
175      fi
176      sim_ac_coin_ldflags=-L$sim_ac_coindir/lib
177      sim_ac_coin_libs="-l$sim_ac_coin_lib_name -lopengl32"
178      sim_ac_coin_datadir=$sim_ac_coindir/data
179    else
180      locations=`IFS="${sim_ac_pathsep}"; for p in $sim_ac_path; do echo " -> $p/coin-config"; done`
181      AC_MSG_WARN([cannot find 'coin-config' at any of these locations:
182$locations])
183      AC_MSG_WARN([
184Need to be able to run 'coin-config' to figure out how to build and link
185against the Coin library. To rectify this problem, you most likely need
186to a) install Coin if it has not been installed, b) add the Coin install
187bin/ directory to your PATH environment variable.
188])
189    fi
190  fi
191fi
192
193if $sim_ac_coin_avail; then
194  ifelse([$1], , :, [$1])
195else
196  ifelse([$2], , :, [$2])
197fi
198]) # SIM_AC_HAVE_COIN_IFELSE()
199
200