VTK Autoconf

From KitwarePublic
Revision as of 15:34, 20 November 2005 by Frm (talk | contribs) (added AM_PATH_VTK macro)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Hopefully you can find the most updated AM_PATH_VTK macro which I wrote in the VtkPlot CVS repository; in case the link breaks, here it is the current version which I use:



dnl ====================================================================================== dnl Author: Francesco Montorsi dnl RCS-ID: $Id: vtk.m4,v 1.1 2005/11/20 14:47:40 frm Exp $ dnl dnl Implements the AM_OPTIONS_VTK, to add the --with-vtk=path option, and the dnl AM_PATH_VTK macro used to detect VTK presence, location and version. dnl ======================================================================================



dnl dnl AM_OPTIONS_VTK dnl ------------------------------------------------------------------------ dnl Adds the --with-vtk=path option to the configure options dnl AC_DEFUN([AM_OPTIONS_VTK],

   [
       AC_ARG_WITH([vtk], [AC_HELP_STRING([--with-vtk],  [The prefix where VTK is installed (default is /usr/local)])],
               [with_vtk=$withval], [with_vtk="/usr/local"])
   ])


dnl dnl AM_PATH_VTK([minimum-version], [action-if-found], [action-if-not-found]) dnl ------------------------------------------------------------------------ dnl dnl NOTE: [minimum-version] must be in the form [X.Y.Z] dnl AC_DEFUN([AM_PATH_VTK],

   [
       dnl do we want to check for VTK ?
       if $with_vtk = "yes" ; then
           dnl in case user wrote --with-vtk=yes
           with_vtk="/usr/local"
       fi
       if $with_vtk != "no" ; then
           VTK_PREFIX="$with_vtk"
           AC_CHECK_FILE([$VTK_PREFIX/include/vtk/vtkCommonInstantiator.h], [vtkFound="OK"])
           AC_MSG_CHECKING([if VTK is installed in $VTK_PREFIX])
           if -z "$vtkFound" ; then
               dnl not found !
               AC_MSG_RESULT([no])
               $3
           else
               dnl found !
               AC_MSG_RESULT([yes])
               dnl these are the VTK libraries of a default build
               VTK_LIBS="-lvtkCommon -lvtkDICOMParser -lvtkexpat -lvtkFiltering -lvtkfreetype -lvtkftgl -lvtkGraphics -lvtkHybrid -lvtkImaging -lvtkIO -lvtkjpeg -lvtkpng -lvtkRendering -lvtktiff -lvtkzlib"
               dnl set VTK c,cpp,ld flags
               VTK_CFLAGS="-I$VTK_PREFIX/include/vtk"
               VTK_CXXFLAGS="$VTK_CFLAGS"
               VTK_LDFLAGS="-L$VTK_PREFIX/lib/vtk $VTK_LIBS"
               dnl now, eventually check version
               if -n "$1" ; then
                   dnl the version of VTK we need:
                   maj=`echo $1 | sed 's/\(0-9*\).\(0-9*\).\(0-9*\)/\1/'`
                   min=`echo $1 | sed 's/\(0-9*\).\(0-9*\).\(0-9*\)/\2/'`
                   rel=`echo $1 | sed 's/\(0-9*\).\(0-9*\).\(0-9*\)/\3/'`
                   AC_MSG_CHECKING([if VTK version is at least $maj.$min.$rel])
                   dnl in order to be able to compile the following test program, we need to add
                   dnl to the current flags, the VTK settings...
                   OLD_CFLAGS=$CFLAGS
                   OLD_CXXFLAGS=$CXXFLAGS
                   OLD_LDFLAGS=$LDFLAGS
                   CFLAGS="$VTK_CFLAGS $CFLAGS"
                   CXXFLAGS="$VTK_CXXFLAGS $CXXFLAGS"
                   LDFLAGS="$VTK_LDFLAGS $LDFLAGS"
                   dnl check if the installed VTK is greater or not
                   AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <vtk/vtkVersion.h>],
                                               [
                                                   printf("VTK version is: %d.%d.%d", VTK_MAJOR_VERSION, VTK_MINOR_VERSION, VTK_BUILD_VERSION);
                                                   #if VTK_MAJOR_VERSION < $maj
                                                       #error Installed VTK is too old !
                                                   #endif
                                                   #if VTK_MINOR_VERSION < $min
                                                       #error Installed VTK is too old !
                                                   #endif
                                                   #if VTK_BUILD_VERSION < $rel
                                                       #error Installed VTK is too old !
                                                   #endif
                                               ])
                                   ], [vtkVersion="OK"])
                   if "$vtkVersion" = "OK" ; then
                       AC_MSG_RESULT([yes])
                       $2
                   else
                       AC_MSG_RESULT([no])
                       dnl restore all flags without VTK values
                       CFLAGS=$OLD_CFLAGS
                       CXXFLAGS=$OLD_CXXFLAGS
                       LDFLAGS=$OLD_LDFLAGS
                       $3
                   fi
               else
                   dnl if we don't have to check for minimum version (because the user did not set that option),
                   dnl then we can execute here the block action-if-found
                   CFLAGS="$VTK_CFLAGS $CFLAGS"
                   CXXFLAGS="$VTK_CXXFLAGS $CXXFLAGS"
                   LDFLAGS="$VTK_LDFLAGS $LDFLAGS"
                   $2
               fi
           fi
       fi
   ])