Files correlati : Commento : Aggiunto il preprocessore c++ mcpp per sostituire il compilatore nella compilazione delle maschere.
		
			
				
	
	
		
			779 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			779 lines
		
	
	
		
			26 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| dnl configure.ac for MCPP   2003/11, 2008/11  kmatsui
 | |
| dnl Process this file with autoconf to produce a configure script.
 | |
| 
 | |
| dnl WARNING: This script does not assume cross-compiling.
 | |
| dnl To cross-compile you must edit here and there of this file.
 | |
| 
 | |
| AC_INIT( mcpp, 2.7.2, kmatsui@t3.rim.or.jp)
 | |
| AC_CONFIG_SRCDIR( src/main.c)
 | |
| AM_CONFIG_HEADER( src/config.h)
 | |
| AC_CONFIG_AUX_DIR( config)
 | |
| AC_CANONICAL_TARGET
 | |
| AM_INIT_AUTOMAKE( no-dependencies)
 | |
| 
 | |
| dnl Checks for programs.
 | |
| 
 | |
| AC_PROG_CC
 | |
| AC_PROG_CPP
 | |
| AC_PROG_INSTALL
 | |
| AC_PROG_EGREP
 | |
| AC_LIBTOOL_WIN32_DLL
 | |
| AC_PROG_LIBTOOL
 | |
| 
 | |
| dnl WARNING: Configure must check the characteristics of target compiler.
 | |
| dnl MCPP may modify the behavior of the target compiler-system.
 | |
| dnl You must uninstall MCPP before re-configuring.
 | |
| 
 | |
| AC_MSG_CHECKING( [whether the cpp is target preprocessor])
 | |
| mcpp=`$CPP $CFLAGS -xc -v /dev/null 2>&1 | grep 'MCPP'`
 | |
| if test "x$mcpp" != x; then
 | |
|     AC_MSG_ERROR( Do 'make uninstall' before configuring again.)
 | |
| fi
 | |
| AC_MSG_RESULT( yes)
 | |
| 
 | |
| dnl Define host system and target system
 | |
| 
 | |
| case $host_os in
 | |
| linux*)
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_LINUX], [Define the host system.])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_LINUX]
 | |
|     ;;
 | |
| freebsd*)
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_FREEBSD])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_FREEBSD]
 | |
|     ;;
 | |
| darwin*)
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_MAC])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_MAC]
 | |
|     ;;
 | |
| cygwin*)
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_CYGWIN])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_CYGWIN]
 | |
|     ;;
 | |
| mingw*)
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_MINGW])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_MINGW]
 | |
|     ;;
 | |
| *)
 | |
|     AC_MSG_WARN( [Unsupported host OS, assuming to be an UNIX variant])
 | |
|     AC_DEFINE( [HOST_SYSTEM], [SYS_UNIX])
 | |
|     ac_c_define_HOST_SYSTEM=[SYS_UNIX]
 | |
|     ;;
 | |
| esac
 | |
| host_system=$ac_c_define_HOST_SYSTEM
 | |
| 
 | |
| case $target_os in
 | |
| linux*)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_LINUX], [Define the target system.])
 | |
|     ;;
 | |
| freebsd*)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_FREEBSD])
 | |
|     ;;
 | |
| darwin*)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_MAC])
 | |
|     ;;
 | |
| cygwin*)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_CYGWIN])
 | |
|     ;;
 | |
| mingw*)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_MINGW])
 | |
|     ;;
 | |
| *)
 | |
|     AC_MSG_WARN( Unsupported target OS, assuming to be an UNIX variant)
 | |
|     AC_DEFINE( [SYSTEM], [SYS_UNIX])
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| ## --enable-replace-cpp option
 | |
| AC_ARG_ENABLE( replace-cpp,
 | |
|     AC_HELP_STRING( [--enable-replace-cpp],
 | |
|         [Replace the resident preprocessor with mcpp]),
 | |
|     ,       ## the compiler name will be defined later
 | |
|     AC_DEFINE( [COMPILER], [INDEPENDENT], [Define the target compiler.])
 | |
|             ## else define COMPILER as INDEPENDENT
 | |
| )
 | |
| 
 | |
| ## Generally this configure does not support cross-compiling.
 | |
| ## Nevertheless, it can configure cross-compiler of Apple-GCC (i686 vs ppc).
 | |
| if test x$enable_replace_cpp = xyes    \
 | |
|         && test $ac_c_define_HOST_SYSTEM = SYS_MAC    \
 | |
|         && test $host_cpu != $target_cpu; then
 | |
| ## Enable to build mcpp into cross-compiler of Apple-GCC
 | |
| ## --with-target-cc option
 | |
| AC_ARG_WITH( target_cc,
 | |
|     AC_HELP_STRING( [--with-target-cc],
 | |
|         [Specify the target compiler to build mcpp into on Mac OS X]),
 | |
|     if test x${withval+set} = xset; then
 | |
|         target_cc=$withval
 | |
|         target_name=`echo $target_cc | sed 's/-gcc.*$//'`
 | |
|         if test $target_name != $target_alias; then
 | |
|             AC_MSG_ERROR( [The argument of --with-target-cc option conflicts with --target option.])
 | |
|         fi
 | |
|         AC_SUBST( [target_cc])
 | |
|     fi
 | |
| )
 | |
| fi
 | |
| 
 | |
| dnl Define a target specific macro.
 | |
| 
 | |
| AC_MSG_CHECKING( for target cpu)
 | |
| 
 | |
| ## These are not predefined macros of MCPP.  MCPP will define predefined macros
 | |
| ## on compile time based on the CPU macro, and possibly redefine them at an
 | |
| ## execution time.
 | |
| 
 | |
| case $target_cpu in
 | |
| x86_64|amd64)
 | |
|     Target_Cpu=x86_64
 | |
|     ;;
 | |
| i?86*)
 | |
|     Target_Cpu=i386
 | |
|     ;;
 | |
| powerpc64|ppc64)
 | |
|     Target_Cpu=ppc64
 | |
|     ;;
 | |
| powerpc|ppc|ppc7400)
 | |
|     Target_Cpu=ppc
 | |
|     ;;
 | |
| *)
 | |
|     Target_Cpu=$target_cpu
 | |
|     ;;
 | |
| esac
 | |
| 
 | |
| AC_MSG_RESULT( $Target_Cpu)
 | |
| AC_DEFINE_UNQUOTED( [CPU], "$Target_Cpu", [Define the cpu-specific-macro.])
 | |
| 
 | |
| ## Build into cross-compiler on Mac OS
 | |
| if test x$enable_replace_cpp = xyes    \
 | |
|         && test $ac_c_define_HOST_SYSTEM = SYS_MAC    \
 | |
|         && test x${target_cc+set} = xset; then
 | |
|     arch_opt="-arch $Target_Cpu"
 | |
| fi
 | |
| 
 | |
| dnl Checks for header files.
 | |
| 
 | |
| AC_CHECK_HEADERS( [unistd.h, stdint.h, inttypes.h])
 | |
| 
 | |
| dnl Checks for typedefs, and compiler characteristics.
 | |
| 
 | |
| AC_CHECK_TYPES( [intmax_t, long long])
 | |
| 
 | |
| dnl Check for library functions.
 | |
| 
 | |
| AC_CHECK_FUNCS( [stpcpy])
 | |
| 
 | |
| dnl Checks for some system characteristics.
 | |
| 
 | |
| AC_CACHE_CHECK( if the cases of filename are folded,
 | |
|     ac_cv_fname_fold,
 | |
|     [touch hJkL
 | |
|     [ac_cv_fname_fold=no]
 | |
|     AC_RUN_IFELSE( [[
 | |
| #include    <stdio.h>
 | |
| #include    <errno.h>
 | |
|     void exit();
 | |
| int main( void)
 | |
| {
 | |
|     if (fopen( "HjKl", "r") == NULL)
 | |
|         exit( errno);
 | |
|     else
 | |
|         exit( 0);
 | |
| } ]],
 | |
|         [ac_cv_fname_fold=yes],
 | |
|         [],
 | |
|         AC_MSG_WARN( cannot run on cross-compiling so assumes that the cases of filename are not folded.)
 | |
|     )
 | |
|     rm hJkL],
 | |
| )
 | |
| if test x$ac_cv_fname_fold = xyes; then
 | |
|     AC_DEFINE( [FNAME_FOLD], 1,
 | |
|         [Define if the cases of file name are folded.])
 | |
| fi
 | |
| 
 | |
| dnl Checks for some host compiler characteristics.
 | |
| 
 | |
| AC_DEFINE_UNQUOTED( [OBJEXT], ["$ac_cv_objext"],
 | |
|     [Define the suffix of object file.])
 | |
| 
 | |
| dnl Check printf length modifier of the longest integer.
 | |
| 
 | |
| # AC_CHECK_MOD_LL( modifier, additional include header)
 | |
| # Try the printf length modifier for the longest integer.
 | |
| # The redundant sscanf() is for some compilers which cannot handle
 | |
| # long long integer token.
 | |
| AC_DEFUN([AC_CHECK_MOD_LL], [
 | |
|     AC_CACHE_CHECK( [printf length modifier for the longest integer],
 | |
|         [ac_cv_c_printf_modifier],
 | |
|         AC_RUN_IFELSE( [[
 | |
| #include    <stdio.h>
 | |
| #include    <assert.h>
 | |
|     int     strcmp();
 | |
|     void    exit();
 | |
| $3
 | |
| int main( void)
 | |
| {   char    buf@<:@ 20@:>@;
 | |
|     $1  num;
 | |
|     sscanf( "1234567890123456789", "%$2d", &num);
 | |
|     sprintf( buf, "%$2d", num);
 | |
|     assert( strcmp( buf, "1234567890123456789") == 0);
 | |
|     exit( 0);
 | |
| } ]],
 | |
|             [ac_cv_c_printf_modifier=$2],
 | |
|             ,
 | |
|             AC_MSG_WARN( cannot run on cross-compiling so assumes the length modifier of long long is "%ll")
 | |
|             AC_DEFINE( [LL_FORM], "ll",
 | |
|                 [Define printf length modifier for the longest integer.])
 | |
|             [ac_cv_c_printf_modifier=ll]
 | |
|         )
 | |
|     )
 | |
| ] )
 | |
| 
 | |
| if test x$ac_cv_type_intmax_t = xyes; then
 | |
|     AC_CHECK_MOD_LL( [intmax_t], [j], [#include <stdint.h>])
 | |
|     if test $ac_c_define_HOST_SYSTEM = SYS_CYGWIN \
 | |
|             || test $ac_c_define_HOST_SYSTEM = SYS_MINGW; then
 | |
|         sleep 1         # wait for cleanup
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| if test x$ac_cv_type_long_long = xyes; then
 | |
|     for modifier in ll I64 q L
 | |
|     do
 | |
|         AC_CHECK_MOD_LL( [long long], ${modifier})
 | |
|         if test x${ac_cv_c_printf_modifier+set} = xset; then
 | |
|             break
 | |
|         fi
 | |
|         if test $ac_c_define_HOST_SYSTEM = SYS_CYGWIN \
 | |
|                 || test $ac_c_define_HOST_SYSTEM = SYS_MINGW; then
 | |
|             sleep 1         # wait for cleanup
 | |
|         fi
 | |
|     done
 | |
| fi
 | |
| 
 | |
| if test x${ac_cv_c_printf_modifier+set} = xset; then
 | |
|     AC_DEFINE_UNQUOTED( [LL_FORM], "$ac_cv_c_printf_modifier",
 | |
|         [Define printf length modifier for the longest integer.])
 | |
| fi
 | |
| 
 | |
| if test $ac_c_define_HOST_SYSTEM = SYS_FREEBSD &&   \
 | |
|         test x$mcpp_ac_c_define_SYSTEM_SP_STD != x__FreeBSD__; then
 | |
|     fbsd_ver=`echo '__FreeBSD__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ .*//'`
 | |
|     AC_DEFINE_UNQUOTED( [SYSTEM_EXT_VAL], "$fbsd_ver",
 | |
|         [Define the version of FreeBSD.])
 | |
| fi
 | |
| 
 | |
| if test x$ac_cv_c_compiler_gnu = xyes; then
 | |
| 
 | |
|     AC_DEFINE( [HOST_COMPILER], [GNUC], [Define the host compiler.])
 | |
| 
 | |
|     AC_DEFINE( [HOST_CMP_NAME], "GCC", [Define the host compiler name.])
 | |
| 
 | |
|     AC_MSG_CHECKING( for value of __GNUC__)
 | |
|     gcc_maj_ver=`echo '__GNUC__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ *//'`
 | |
|     AC_MSG_RESULT( $gcc_maj_ver)
 | |
|     AC_DEFINE_UNQUOTED( [GCC_MAJOR_VERSION], "$gcc_maj_ver",
 | |
|         [Define gcc major version.])
 | |
|     AC_MSG_CHECKING( for value of __GNUC_MINOR__)
 | |
|     gcc_min_ver=`echo __GNUC_MINOR__ | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ *//'`
 | |
|     AC_MSG_RESULT( $gcc_min_ver)
 | |
|     AC_DEFINE_UNQUOTED( [GCC_MINOR_VERSION], "$gcc_min_ver",
 | |
|         [Define gcc minor version.])
 | |
| 
 | |
|     cw=`pwd`
 | |
|     if test x$srcdir = "x." || test x$srcdir = x; then
 | |
|         src_dir=$cw
 | |
|     else
 | |
|         src_dir=$srcdir
 | |
|     fi
 | |
|     if test $ac_c_define_HOST_SYSTEM = SYS_CYGWIN; then
 | |
|         AC_CACHE_CHECK( the root directory,
 | |
|             ac_cv_cygwin_root,
 | |
|             [ac_cv_cygwin_root=`$src_dir/config/cygwin_root`]
 | |
|         )
 | |
|         AC_DEFINE_UNQUOTED( [CYGWIN_ROOT_DIRECTORY], "$ac_cv_cygwin_root",
 | |
|             [Define root directory of CYGWIN.])
 | |
|     fi
 | |
|     if test $ac_c_define_HOST_SYSTEM = SYS_MINGW; then
 | |
|         AC_CACHE_CHECK( the root directory,
 | |
|             ac_cv_msys_root,
 | |
|             cd /tmp
 | |
|             cat > getcwd.c <<\_EOF
 | |
| #include <stdio.h>
 | |
| #include <unistd.h>
 | |
| #include <limits.h>
 | |
| int main( int argc, char ** argv)
 | |
| {   char    buf@<:@ PATH_MAX@:>@;
 | |
|     getcwd( buf, PATH_MAX);
 | |
|     puts( buf);
 | |
|     return 0;
 | |
| }
 | |
| _EOF
 | |
|             $CC getcwd.c
 | |
|             cd /
 | |
|             [ac_cv_msys_root=`$src_dir/config/mingw_root`]
 | |
|         )
 | |
|         AC_CACHE_CHECK( the /mingw directory,
 | |
|             ac_cv_mingw_dir,
 | |
|             cd /mingw
 | |
|             [ac_cv_mingw_dir=`$src_dir/config/mingw_root`]
 | |
|         )
 | |
|         cd $cw
 | |
|         rm -f /tmp/getcwd.c /tmp/a.exe
 | |
|         AC_DEFINE_UNQUOTED( [MSYS_ROOT_DIRECTORY], "$ac_cv_msys_root",
 | |
|             [Define root directory of MSYS.])
 | |
|         AC_DEFINE_UNQUOTED( [MINGW_DIRECTORY], "$ac_cv_mingw_dir",
 | |
|             [Define /mingw directory.])
 | |
|     fi
 | |
| 
 | |
| else    # not gcc
 | |
| 
 | |
| # mcpp_AC_C_DEFINE( SYSTEM | CPU | COMPILER, STD | OLD, $enableval)
 | |
| # Specify the target-specific predefined macro.
 | |
| AC_DEFUN([mcpp_AC_C_DEFINE], [
 | |
|     name=`echo $3 | sed 's/=.*//'`
 | |
|     mcpp_macro=$1_SP_$2
 | |
|     stripped_mcpp_macro=`echo $mcpp_macro | sed 's/STD//'`
 | |
|     if test x$stripped_mcpp_macro != x$mcpp_macro; then
 | |
|         stripped_name=`echo $name | sed 's/^_//'`
 | |
|         if test x$stripped_name = x$name; then
 | |
|             AC_MSG_ERROR( The macro name '$name' should begin with '_'.)
 | |
|         fi
 | |
|     else
 | |
|         stripped_name=`echo $name | sed 's/^@<:@A-Za-z@:>@//'`
 | |
|         if test x$stripped_name = x$name; then
 | |
|             AC_MSG_ERROR( The macro name '$name' should begin with an alphabetic letter.)
 | |
|         fi
 | |
|     fi
 | |
|     if test x$name = x$3; then
 | |
|         [replace=1]
 | |
|     else
 | |
|         [replace=`echo $3 | sed 's/^.*=//'`]
 | |
|     fi
 | |
|     AC_DEFINE_UNQUOTED( [$mcpp_macro], "$name")
 | |
|     AC_DEFINE_UNQUOTED( [${mcpp_macro}_VAL], "$replace")
 | |
|     mcpp_ac_c_define_$1_$2=$name
 | |
| ])
 | |
| 
 | |
| # mcpp_AC_C_PREDEF( SYSTEM | CPU | COMPILER, STD | OLD, additional description)
 | |
| # Specify the target-specific predefined macro via mcpp_AC_C_DEFINE.
 | |
| AC_DEFUN([mcpp_AC_C_PREDEF], [
 | |
|     AC_ARG_ENABLE( $1-$2-macro,
 | |
|         AC_HELP_STRING( --enable-$1-$2-macro=name@<:@=replace@:>@,
 | |
|             [specify the $1-specific $2-style predefined macro.  $3]),
 | |
|         if test x$enableval = xyes || test x$enableval = xno; then
 | |
|             AC_MSG_ERROR( This option requires an argument as 'name@<:@=replace@:>@'.)
 | |
|         fi
 | |
|         mcpp_AC_C_DEFINE( $1, $2, $enableval)
 | |
|         AH_TEMPLATE( [$1_SP_$2],
 | |
|             [Define the name of $1-specific $2-style predefined macro.])
 | |
|         AH_TEMPLATE( [$1_SP_$2_VAL],
 | |
|             [Define the value of $1-specific $2-style predefined macro.])
 | |
|     )
 | |
| ])
 | |
| 
 | |
| mcpp_AC_C_PREDEF( [SYSTEM], [STD],
 | |
|     [In all this and the following 5 options,
 | |
|     'STD'-style name begins with an '_',
 | |
|     'OLD'-style name begins with an alphabetic and
 | |
|     if '=replace' is missing the macro is defined as 1.]
 | |
| )
 | |
| mcpp_AC_C_PREDEF( [SYSTEM], [OLD])
 | |
| mcpp_AC_C_PREDEF( [CPU], [STD])
 | |
| mcpp_AC_C_PREDEF( [CPU], [OLD])
 | |
| mcpp_AC_C_PREDEF( [COMPILER], [STD])
 | |
| mcpp_AC_C_PREDEF( [COMPILER], [OLD])
 | |
| 
 | |
| fi
 | |
| 
 | |
| ## MacOS has "framework" directories.
 | |
| if test $ac_c_define_HOST_SYSTEM = SYS_MAC; then
 | |
|     AC_MSG_CHECKING( for the MacOS-specific framework directory)
 | |
|     frameworks=`$CPP $CFLAGS $arch_opt -xc -v /dev/null 2>&1 | sed 's/^ *//' | sed 's/ .*$//' | $EGREP '/Frameworks$'`
 | |
|     n=1
 | |
|     for dir in $frameworks
 | |
|     do
 | |
|         case $n in
 | |
|         1)  framework1=$dir;;
 | |
|         2)  framework2=$dir;;
 | |
|         3)  framework3=$dir;;
 | |
|         esac
 | |
|         let n=n+1
 | |
|     done
 | |
|     if test x${framework1+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [FRAMEWORK1], "$framework1",
 | |
|             [Define MacOS-specific framework directory 1.])
 | |
|         AC_MSG_RESULT( $framework1)
 | |
|     else
 | |
|         AC_MSG_RESULT( none)
 | |
|     fi
 | |
|     if test x${framework2+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [FRAMEWORK2], "$framework2",
 | |
|             [Define MacOS-specific framework directory 2.])
 | |
|         AC_MSG_RESULT( $framework2)
 | |
|     fi
 | |
|     if test x${framework3+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [FRAMEWORK3], "$framework3",
 | |
|             [Define MacOS-specific framework directory 3.])
 | |
|         AC_MSG_RESULT( $framework3)
 | |
|     fi
 | |
| fi  ## SYS_MAC
 | |
| 
 | |
| ## --enable-mcpplib option
 | |
| AC_ARG_ENABLE( mcpplib,
 | |
|     AC_HELP_STRING( [--enable-mcpplib],
 | |
|         [Build libmcpp rather than stand-alone mcpp])
 | |
| )
 | |
| 
 | |
| if test x$enable_mcpplib = xyes; then               ## mcpplib mode
 | |
|     AC_DEFINE( [MCPP_LIB], 1, [Define if build libmcpp])
 | |
|     if test x$enable_replace_cpp = xyes; then
 | |
|         AC_MSG_WARN( Ignores enable-replace-cpp option)
 | |
|         [enable_replace_cpp=no]
 | |
|     fi
 | |
| 
 | |
| else
 | |
| 
 | |
| if test x$enable_replace_cpp = xyes; then           ## replace-cpp mode
 | |
| 
 | |
| dnl Check the characteristics of target compiler.
 | |
| dnl Note: The following 3 hundred and more lines are for replace-cpp-mode.
 | |
| dnl Target-compiler-specific configuration need these lines.
 | |
| dnl These lines are not used in compiler-independent configuration.
 | |
| 
 | |
| dnl Check which header file CPP includes,
 | |
| dnl relative to CURRENT or SOURCE directory.
 | |
| 
 | |
| # AC_C_INCLUDE_PREF( CURRENT | SOURCE | NEXT)
 | |
| # Check the include preference ('NEXT' means CURRENT & SOURCE)
 | |
| AC_DEFUN([AC_C_INCLUDE_PREF], [
 | |
|     AC_EGREP_CPP( $1, [
 | |
| #include "../next/header.h"
 | |
| ],
 | |
|         [ac_cv_c_include_pref=$1],
 | |
|     )
 | |
| ])
 | |
| 
 | |
| AC_CACHE_CHECK( include preference - relative to current or source directory,
 | |
|     ac_cv_c_include_pref,
 | |
|     mkdir mcpp-tmp
 | |
|     cd mcpp-tmp
 | |
|     mkdir dir ../next ../next/dir
 | |
|     echo '#include "dir/what.h"'    > ../next/header.h
 | |
|     echo '#include "next.h"'        >> ../next/header.h
 | |
|     echo 'CURRENT'  > dir/what.h
 | |
|     echo 'SOURCE'   > ../next/dir/what.h
 | |
|     echo 'NEXT'     > ../next/next.h
 | |
|     AC_C_INCLUDE_PREF( [SOURCE])
 | |
|     if test x$ac_cv_c_include_pref != xSOURCE; then
 | |
|         AC_C_INCLUDE_PREF( [CURRENT])
 | |
|         if test x$ac_cv_c_include_pref = xCURRENT; then
 | |
|             AC_C_INCLUDE_PREF( [NEXT])
 | |
|             if test x$ac_cv_c_include_pref = xNEXT; then
 | |
|                 [ac_cv_c_include_pref="(CURRENT & SOURCE)"]
 | |
|             fi
 | |
|         else
 | |
|             AC_MSG_ERROR( Failed to include header file.)
 | |
|         fi
 | |
|     fi
 | |
|     cd ..
 | |
|     rm -rf mcpp-tmp next
 | |
|     if test $ac_c_define_HOST_SYSTEM = SYS_CYGWIN \
 | |
|             || test $ac_c_define_HOST_SYSTEM = SYS_MINGW; then
 | |
|         sleep 1         # wait for cleanup
 | |
|     fi
 | |
| )
 | |
| AC_DEFINE_UNQUOTED( [SEARCH_INIT], $ac_cv_c_include_pref,
 | |
|     [Define include preference.])
 | |
|  
 | |
| AC_CACHE_CHECK( if the argument of pragma is macro expanded,
 | |
|     ac_cv_c_pragma_is_expanded,
 | |
|     AC_COMPILE_IFELSE( [[
 | |
| #define once
 | |
| #pragma once]],
 | |
|         [ac_cv_c_pragma_is_expanded=no],
 | |
|         [ac_cv_c_pragma_is_expanded=yes]
 | |
|     )
 | |
| )
 | |
| if test x$ac_cv_c_pragma_is_expanded = xyes; then
 | |
|     AC_DEFINE( [EXPAND_PRAGMA], 1,
 | |
|         [Define if the argument of pragma is macro expanded.])
 | |
| fi
 | |
| 
 | |
| AC_CACHE_CHECK( if digraphs can be used,
 | |
|     ac_cv_c_digraph,
 | |
|     [AC_PREPROC_IFELSE( [
 | |
| %:if 1
 | |
| %:endif],
 | |
|         [ac_cv_c_digraph=yes],
 | |
|         [ac_cv_c_digraph=no]
 | |
|     )]
 | |
| )
 | |
| if test x$ac_cv_c_digraph = xyes; then
 | |
|     AC_DEFINE( [HAVE_DIGRAPHS], 1, [Define if digraphs are available.])
 | |
| fi
 | |
| 
 | |
| AC_CACHE_CHECK( preprocessor output format of line directive,
 | |
|     ac_cv_c_line_format,
 | |
|     [ac_cv_c_line_format=\"`echo '#line 4321' | $CPP - | grep 432 | sed 's/432.*$//'`\"]
 | |
| ## Note: the output line number may be 4320 on GCC 2.* or other preprocessors.
 | |
| )
 | |
| AC_DEFINE_UNQUOTED( [LINE_PREFIX], $ac_cv_c_line_format,
 | |
|     [Define output format of line directive.])
 | |
| if test "x$ac_cv_c_line_format" = "x\"#line \""; then
 | |
|     ac_cv_c_std_line_prefix=1
 | |
| else
 | |
|     ac_cv_c_std_line_prefix=0
 | |
| fi
 | |
| AC_DEFINE_UNQUOTED( [STD_LINE_PREFIX], $ac_cv_c_std_line_prefix,
 | |
|     [Define whether output format of line directive is C source style.])
 | |
| 
 | |
| AC_CACHE_CHECK( default value of __STDC__,
 | |
|     ac_cv_c_stdc,
 | |
|     [stdc=`echo '__STDC__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ .*//'`]
 | |
|     if test x"$stdc" = x"__STDC__"; then
 | |
|         [ac_cv_c_stdc=0]
 | |
|     else
 | |
|         [ac_cv_c_stdc=$stdc]
 | |
|     fi
 | |
| )
 | |
| AC_DEFINE_UNQUOTED( [STDC], $ac_cv_c_stdc,
 | |
|     [Define the default value of __STDC__.])
 | |
| 
 | |
| AC_CACHE_CHECK( default value of __STDC_VERSION__,
 | |
|     ac_cv_c_stdc_ver,
 | |
|     [stdc_ver=`echo '__STDC_VERSION__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ .*//'`]
 | |
|     if test x"$stdc_ver" = x"__STDC_VERSION__"; then
 | |
|         [ac_cv_c_stdc_ver=0]
 | |
|     else
 | |
|         [ac_cv_c_stdc_ver=$stdc_ver]
 | |
|     fi
 | |
| )
 | |
| AC_DEFINE_UNQUOTED( [STDC_VERSION], $ac_cv_c_stdc_ver,
 | |
|     [Define the default value of __STDC_VERSION__.])
 | |
| 
 | |
| if test x${ac_cv_c_compiler_gnu} != xyes; then
 | |
| 
 | |
| # Specify the compiler's name
 | |
| AC_ARG_WITH( compiler-name,
 | |
|     AC_HELP_STRING( [--with-compiler-name=NAME],
 | |
|         [specify the compiler name which is used as the definition of COMPILER macro]),
 | |
|     AC_DEFINE_UNQUOTED( [COMPILER], $compiler_name, [specify the compiler name]),
 | |
|     AC_MSG_ERROR( --with-compiler-name=NAME option should be specified to define [COMPILER] macro.)
 | |
| )
 | |
| 
 | |
| # Specify the C++ header file directory
 | |
| AC_ARG_WITH( cxx-include-dir,
 | |
|     AC_HELP_STRING( [--with-cxx-include-dir=directory],
 | |
|         [specify the C++ include directory by absolute path [[none]]]),
 | |
|     [case "${withval}" in
 | |
|     [\\/]* | [A-Za-z]:[\\/]*)
 | |
|         cxx_include_dir=`echo $withval | sed 's,/$,,'; 's,\\$,,'`
 | |
|         AC_DEFINE_UNQUOTED( [CPLUS_INCLUDE_DIR1], $cxx_include_dir,
 | |
|             [Define the C++ include directory.])
 | |
|         ;;
 | |
|     *)  AC_MSG_ERROR( $withval should be an absolute path.) ;;
 | |
|     esac]
 | |
| )
 | |
| 
 | |
| fi  # not gcc
 | |
| 
 | |
| dnl Define compiler specific elements.
 | |
| 
 | |
| AC_MSG_NOTICE( checking for some compiler specific elements)
 | |
| 
 | |
| # Define GCC specific elements.
 | |
| if test x$ac_cv_c_compiler_gnu = xyes; then
 | |
| 
 | |
|     AC_DEFINE( [COMPILER], [GNUC], [Define the target compiler.])
 | |
| 
 | |
|     cpp_call=`$CPP $CFLAGS $arch_opt -xc -v /dev/null 2>&1 | $EGREP '/cpp|/cc1' | sed 's/^ *//; s/ .*//'` 
 | |
|     AC_MSG_CHECKING( for the directory to install mcpp)
 | |
|     cpp_name=`expr $cpp_call : '.*/\(.*\)'`
 | |
|     bindir=`expr $cpp_call : "\(.*\)/$cpp_name"`
 | |
|     AC_MSG_RESULT( $bindir)
 | |
| 
 | |
|     AC_PATH_PROG( [gcc_path], [$CC], , [$PATH])
 | |
|     cc_path=`echo $CC | $EGREP "/"`
 | |
|     if test x$cc_path != x; then
 | |
|         AC_MSG_ERROR( [Environment variables CC and CXX for GCC-specific-build should not contain a directory part.]);
 | |
|     fi
 | |
|     ## force to set $prefix to GCC's prefix
 | |
|     ## (i.e. "/usr/local" of "/usr/local/bin/gcc")
 | |
|     gcc_prefix=`echo $gcc_path | $EGREP "/bin/$CC\$" | sed "s,/bin/$CC\$,,"`
 | |
|     if test "x$gcc_prefix" != xNONE; then
 | |
|         if test "x$prefix" != xNONE && "x$gcc_prefix" != "x$prefix"; then
 | |
|             AC_MSG_WARN( [Ignored --prefix option, since it conflicts with GCC path])
 | |
|         fi
 | |
|         prefix=$gcc_prefix
 | |
|     else
 | |
|         if test "x$prefix" = xNONE; then
 | |
|             prefix=$ac_default_prefix
 | |
|         fi
 | |
|     fi
 | |
|     lang_save=$LANG
 | |
|     export LANG=C
 | |
| 
 | |
|     AC_MSG_CHECKING( for the compiler-specific C include directory)
 | |
|     exclude="^/usr(/local|)/include\$|^${prefix}(/local|)/include\$|/Frameworks|End of search list"
 | |
|     c_include_dirs=`$CPP $CFLAGS $arch_opt -xc -v /dev/null 2>&1 | sed '1,/<...> search starts here/d' | sed '/End of search list/q' | sed 's/^ *//' | $EGREP -v "$exclude"`
 | |
|     n=1
 | |
|     for dir in $c_include_dirs
 | |
|     do
 | |
|         case $n in
 | |
|         1)  c_include_dir1=$dir;;
 | |
|         2)  c_include_dir2=$dir;;
 | |
|         3)  c_include_dir3=$dir;;
 | |
|         esac
 | |
|         let n=n+1
 | |
|     done
 | |
|     if test x${c_include_dir1+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [C_INCLUDE_DIR1], "$c_include_dir1",
 | |
|             [Define compiler-specific C include directory 1.])
 | |
|         AC_MSG_RESULT( $c_include_dir1)
 | |
|     else
 | |
|         AC_MSG_RESULT( none)
 | |
|     fi
 | |
|     if test x${c_include_dir2+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [C_INCLUDE_DIR2], "$c_include_dir2",
 | |
|             [Define compiler-specific C include directory 2.])
 | |
|         AC_MSG_RESULT( $c_include_dir2)
 | |
|     fi
 | |
|     if test x${c_include_dir3+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [C_INCLUDE_DIR3], "$c_include_dir3",
 | |
|             [Define compiler-specific C include directory 3.])
 | |
|         AC_MSG_RESULT( $c_include_dir3)
 | |
|     fi
 | |
| 
 | |
|     AC_PROG_CXX
 | |
|     AC_PROG_CXXCPP
 | |
|     AC_LANG_PUSH( C++)
 | |
|     AC_MSG_CHECKING( for the compiler-specific C++ include directory)
 | |
|     exclude="^/usr(/local|)/include\$|^${prefix}(/local|)/include\$|/Frameworks|^${c_include_dir1}\$|^${c_include_dir2}\$|^${c_include_dir3}\$"
 | |
|     cxx_include_dirs=`${CXXCPP} ${CXXFLAGS} $arch_opt -xc++ -v /dev/null 2>&1 | sed '1,/<...> search starts here/d' | sed '/End of search list/q' | sed '/End of search list/d' | sed 's/^ *//' | $EGREP -v "$exclude"`
 | |
|     n=1
 | |
|     for dir in ${cxx_include_dirs}
 | |
|     do
 | |
|         case $n in
 | |
|         1)  cxx_include_dir1=$dir;;
 | |
|         2)  cxx_include_dir2=$dir;;
 | |
|         3)  cxx_include_dir3=$dir;;
 | |
|         4)  cxx_include_dir4=$dir;;
 | |
|         esac
 | |
|         let n=n+1
 | |
|     done
 | |
|     if test x${cxx_include_dir1+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [CPLUS_INCLUDE_DIR1], "$cxx_include_dir1",
 | |
|             [Define compiler-specific C++ include directory 1.])
 | |
|         AC_MSG_RESULT( $cxx_include_dir1)
 | |
|     fi
 | |
|     if test x${cxx_include_dir2+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [CPLUS_INCLUDE_DIR2], "$cxx_include_dir2",
 | |
|             [Define compiler-specific C++ include directory 2.])
 | |
|         AC_MSG_RESULT( $cxx_include_dir2)
 | |
|     fi
 | |
|     if test x${cxx_include_dir3+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [CPLUS_INCLUDE_DIR3], "$cxx_include_dir3",
 | |
|             [Define compiler-specific C++ include directory 3.])
 | |
|         AC_MSG_RESULT( $cxx_include_dir3)
 | |
|     fi
 | |
|     if test x${cxx_include_dir4+set} = xset; then
 | |
|         AC_DEFINE_UNQUOTED( [CPLUS_INCLUDE_DIR4], "$cxx_include_dir4",
 | |
|             [Define compiler-specific C++ include directory 4.])
 | |
|         AC_MSG_RESULT( $cxx_include_dir4)
 | |
|     fi
 | |
|     AC_LANG_POP( C++)
 | |
| 
 | |
|     export LANG=$lang_save
 | |
| 
 | |
|     ## the directory into which mcpp_g*.h header files are generated
 | |
|     ## '/mcpp-gcc' will be appended to 'inc_dir'
 | |
|     if test $ac_c_define_HOST_SYSTEM = SYS_MINGW; then
 | |
|         inc_dir=$c_include_dir2
 | |
|     else
 | |
|         if test x${c_include_dir1+set} = xset; then
 | |
|             inc_dir=$c_include_dir1
 | |
|         else
 | |
|             inc_dir="$prefix"/include
 | |
|         fi
 | |
|     fi
 | |
|     AC_DEFINE_UNQUOTED( [INC_DIR], "$inc_dir",
 | |
|         [Define include directory to install mcpp_g*.h header files.])
 | |
| 
 | |
|     AC_SUBST( [CPPFLAGS])
 | |
|     AC_SUBST( [host_system])
 | |
|     AC_SUBST( [Target_Cpu])
 | |
|     AC_SUBST( [inc_dir])
 | |
|     AC_SUBST( [gcc_maj_ver])
 | |
|     AC_SUBST( [gcc_min_ver])
 | |
|     AC_SUBST( [cpp_call])
 | |
|     AC_PROG_LN_S
 | |
| 
 | |
|     if test x$gcc_maj_ver = x2; then
 | |
| 
 | |
|         AC_CACHE_CHECK( for value of predefined macro '__SIZE_TYPE__',
 | |
|             size_type,
 | |
|             [size_type=`echo '__SIZE_TYPE__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ *//'`]
 | |
|         )
 | |
|         AC_DEFINE_UNQUOTED( [COMPILER_SP1_VAL], "$size_type",
 | |
|             [Define the type of size_t.])
 | |
| 
 | |
|         AC_CACHE_CHECK( for value of predefined macro '__PTRDIFF_TYPE__',
 | |
|             ptrdiff_type,
 | |
|             [ptrdiff_type=`echo '__PTRDIFF_TYPE__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ *$//'`]
 | |
|         )
 | |
|         AC_DEFINE_UNQUOTED( [COMPILER_SP2_VAL], "$ptrdiff_type",
 | |
|             [Define the type of ptrdiff_t.])
 | |
| 
 | |
|         AC_CACHE_CHECK( for value of predefined macro '__WCHAR_TYPE__',
 | |
|             wchar_type,
 | |
|             [wchar_type=`echo '__WCHAR_TYPE__' | $CPP - | sed 's/^ *//' | $EGREP -v '^#|^$' | sed 's/ *$//'`]
 | |
|         )
 | |
|         AC_DEFINE_UNQUOTED( [COMPILER_SP3_VAL], "$wchar_type",
 | |
|         [Define the type of wchar_t.])
 | |
| 
 | |
|     fi
 | |
| fi
 | |
| 
 | |
| ## Handling of multi-byte characters containing '0x5c' codes:
 | |
| ## These tests cannot be executed without appropriate options for the
 | |
| ## compiler.  So, here we define all of these macros as FALSE.
 | |
| ## User should edit config.h by hand after executing this script.
 | |
| ## These should be 0 for GCC at least upto V.4.1.
 | |
|     AC_DEFINE( [SJIS_IS_ESCAPE_FREE], 0,
 | |
|         [Define if '0x5c' in SJIS multi-byte character is safe.])
 | |
|     AC_DEFINE( [ISO2022_JP_IS_ESCAPE_FREE], 0,
 | |
|         [Define if '0x5c' in ISO2022-JP multi-byte character is safe.])
 | |
|     AC_DEFINE( [BIGFIVE_IS_ESCAPE_FREE], 0,
 | |
|         [Define if '0x5c' in BIG5 multi-byte character is safe.])
 | |
| 
 | |
| fi ## replace-cpp mode
 | |
| fi ## build-cpp mode or replace-cpp mode
 | |
| 
 | |
| AC_ARG_WITH( [gcc-testsuite-dir],
 | |
|     AC_HELP_STRING( [--with-gcc-testsuite-dir=directory],
 | |
|         [specify the gcc testsuite directory to do make check.
 | |
|         e.g. /usr/src/rpm/SOURCES/gcc-2.95.4/gcc/testsuite,
 | |
|         /usr/local/src/gcc-3.2/gcc/testsuite, etc.
 | |
|         The testsuite of mcpp uses gcc testsuite, hence needs gcc source
 | |
|         or at least gcc testsuite.
 | |
|         This option needs --enable-replace-cpp option.]),
 | |
|     if test x${withval+set} = xset; then
 | |
|         if test x$enable_replace_cpp = xyes; then
 | |
|             [gcc_testsuite_dir=`echo $withval | sed 's,/$,,'`]
 | |
|         else
 | |
|             AC_MSG_ERROR( [--with-gcc-testsuite-dir option requires --enable-replace-cpp option.])
 | |
|         fi
 | |
|     else
 | |
|         AC_MSG_ERROR( [--with-gcc-testsuite-dir option requires an argument.])
 | |
|     fi
 | |
| )
 | |
| AC_SUBST( [gcc_testsuite_dir])
 | |
| AM_CONDITIONAL( [GNUC], test x$ac_cv_c_compiler_gnu = xyes)
 | |
| AM_CONDITIONAL( [MCPP_LIB], test x$enable_mcpplib = xyes)
 | |
| AM_CONDITIONAL( [REPLACE_CPP], test x$enable_replace_cpp = xyes)
 | |
| AM_CONDITIONAL( [MINGW], test $ac_c_define_HOST_SYSTEM = SYS_MINGW)
 | |
| 
 | |
| dnl Final output.
 | |
| 
 | |
| AC_OUTPUT( Makefile src/Makefile tests/Makefile)
 |