Macro: ac_cxx_template_objs

Back to the Main Page. | # ac_cxx_template_objs | Download the M4 Source.

Synopsis

  `AC_CXX_TEMPLATE_OBJS`

Version

  1.1.1.1 (2001/07/26) C++_Support @ ac-archive-0.5.39

Author

  Luc Maisonobe

Description

  This macro tries to find the place where the objects files resulting from templates instantiations are stored and the associated compiler flags. This is particularly useful to include these files in libraries. Currently only g++/egcs and SUN CC are supported (there is nothing to be done for the formers while the latter uses directory ./Templates.DB if you use the -ptr. flag). This macro sets the CXXFLAGS if needed, it also sets the output variable TEMPLATES_OBJ. Note that if you use libtool, this macro does work correctly with the SUN compilers ONLY while building static libraries. Since there are sometimes problems with exception handling with multiple levels of shared libraries even with g++ on this platform, you may wish to enforce the usage of static libraires there. You can do this by putting the following statements in your configure.in file:

  `AC_CANONICAL_HOST`
  `case x$host_os in`
  `xsolaris*) AC_DISABLE_SHARED ;;`
  `esac`
  `AM_PROG_LIBTOOL`

M4 Source Code

      AC_DEFUN([AC_CXX_TEMPLATE_OBJS],
      [AC_CACHE_CHECK(where template objects are stored, ac_cv_cxx_templobjs,
       [ ac_cv_cxx_templobjs='unknown'
         if test "$GXX" = yes; then
           ac_cv_cxx_templobjs='nowhere'
         else
           case $CXX in
             CC|*/CC)
              cat > conftest.cc <<EOF
      template<class T> class A { public : A () {} };
      template<class T> void f (const A<T>&) {}
      main()
      { A<double> d;
        A<int> i;
        f (d);
        f (i);
        return 0;
      }
      EOF
              if test "$ac_cv_cxx_templobjs" = 'unknown' ; then
                if test -d Templates.DB ; then
                  rm -fr Templates.DB
                fi
                if $CXX $CXXFLAGS -ptr. -c conftest.cc 1> /dev/null 2>&1; then
                  if test -d Templates.DB ; then
      #             this should be Sun CC <= 4.2
                    CXXFLAGS="$CXXFLAGS -ptr."
                    if test x"$LIBTOOL" = x ; then
                      ac_cv_cxx_templobjs='Templates.DB/*.o'
                    else
                      ac_cv_cxx_templobjs='Templates.DB/*.lo'
                    fi
                    rm -fr Templates.DB
                  fi
                fi
              fi
              if test "$ac_cv_cxx_templobjs" = 'unknown' ; then
                if test -d SunWS_cache ; then
                  rm -fr SunWS_cache
                fi
                if $CXX $CXXFLAGS -c conftest.cc 1> /dev/null 2>&1; then
                  if test -d SunWS_cache ; then
      #             this should be Sun WorkShop C++ compiler 5.x
      #             or Sun Forte C++ compiler >= 6.x
                    if test x"$LIBTOOL" = x ; then
                      ac_cv_cxx_templobjs='SunWS_cache/*/*.o'
                    else
                      ac_cv_cxx_templobjs='SunWS_cache/*/*.lo'
                    fi
                    rm -fr SunWS_cache
                  fi
                fi
              fi
              rm -f conftest* ;;
           esac
         fi
         case "x$ac_cv_cxx_templobjs" in
           xunknown|xnowhere)
           TEMPLATE_OBJS="" ;;
           *)
           TEMPLATE_OBJS="$ac_cv_cxx_templobjs" ;;
         esac
         AC_SUBST(TEMPLATE_OBJS)])])