Please check the GNU Autoconf Macro Archive for Updates
AC-Archive
Autoconf Macro Archive

ac-archive.sf.net: - Project CVS - Download
Macro Index
- AM Support
- C++ Support
- C Support
- Fortran Support
- Java Support
- Cross Compilation
- Installed Packages
- Miscellaneous
- LaTeX Support
- Uncategorized
- archive macros
- adl's macros
- bkorb's macros
- guidod's macros
- latex's macros
- other's macros
- rleigh's macros
- obsoleted macros
- released macros
- search index

Documentation
- Contribute!
- History
- acincludedir m4
- acinclude (tool)
- macro howto
- ax tricks
- maintainers
- License
- Topics

generated...
2007-08-05

(C) 2007 guidod
Download the M4 Source.

ac_need_target_h

Back to the Main Page.

Synopsis
AC_NEED_TARGET_H [(PREFIX, [HEADER-FILE])]
, 
Version

2006-10-13

Author

Guido U. Draheim <guidod@gmx.de>

License

GPLWithACException
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation. As a special exception, the respective Autoconf Macro's copyright owner gives unlimited permission to copy, distribute and modify the configure scripts that are the output of Autoconf when processing the Macro. You need not follow the terms of the GNU General Public License when using or distributing such scripts

Category

cryp.to ac-archive's Obsoleted (obsoleted)

Documentation

  • obsoleted Superseded by AC_CREATE_TARGET_H.

Create the header-file and let it contain '#defines' for the target platform. This macro is used for libraries that have platform-specific quirks. Instead of inventing a target-specific target.h.in files, just let it create a header file from the definitions of AC_CANONICAL_SYSTEM and put only 'ifdef's in the installed header-files.

If the PREFIX is absent, [TARGET] is used. if the HEADER-FILE is absent, [target.h] is used. the prefix can be the packagename. (`tr a-z- A-Z_`)

The defines look like...

#ifndef TARGET_CPU_M68K
#define TARGET_CPU_M68K "m68k"
#endif

#ifndef TARGET_OS_LINUX
#define TARGET_OS_LINUX "linux-gnu"
#endif

#ifndef TARGET_OS_TYPE                     /* the string itself */
#define TARGET_OS_TYPE "linux-gnu"
#endif

Detail: In the case of hppa1.1, the three idents "hppa1_1" "hppa1" and "hppa" are derived, for an m68k it just two, "m68k" and "m".

The NEED_TARGET_OS_H variant is almost the same function, but everything is lowercased instead of uppercased, and there is a "__" in front of each prefix, so it looks like...

#ifndef __target_os_linux
#define __target_os_linux "linux-gnulibc2"
#endif

#ifndef __target_os__                     /* the string itself */
#define __target_os__ "linux-gnulibc2"
#endif

#ifndef __target_cpu_i586
#define __target_cpu_i586 "i586"
#endif

#ifndef __target_arch_i386
#define __target_arch_i386 "i386"
#endif

#ifndef __target_arch__                   /* cpu family arch */
#define __target_arch__ "i386"
#endif

Other differences: The default string-define is "__" insteadof "_TYPE" and the default filename is "target-os.h" instead of just "target.h".

Personally I prefer the second variant (which had been the first in the devprocess of this file but I assume people will often fallback to the primary variant presented herein).

M4 Source Code
AC_DEFUN([AC_NEED_TARGET_H],
[AC_REQUIRE([AC_CANONICAL_SYSTEM_ARCH])
ac_need_target_h_file=`echo ifelse($2, , target.h, $2)`
ac_need_target_h_prefix=`echo ifelse($1, , target, $1) | tr abcdefghijklmnopqrstuvwxyz- ABCDEFGHIJKLMNOPQRSTUVWXYZ_ | tr -dc ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_ `
AC_MSG_RESULT(creating $ac_need_target_h_file - to export target_os as $ac_need_target_h_prefix-defines)
#
changequote({, })dnl
#
target_os0=`echo "$target_os"  | tr abcdefghijklmnopqrstuvwxyz.- ABCDEFGHIJKLMNOPQRSTUVWXYZ__ | tr -dc ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_ `
target_os1=`echo "$target_os0" | sed -e 's:\([^0-9]*\).*:\1:' `
target_os2=`echo "$target_os0" | sed -e 's:\([^_]*\).*:\1:' `
target_os3=`echo "$target_os2" | sed -e 's:\([^0-9]*\).*:\1:' `
#
target_cpu0=`echo "$target_cpu"  | tr abcdefghijklmnopqrstuvwxyz.- ABCDEFGHIJKLMNOPQRSTUVWXYZ__ | tr -dc ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_`
target_cpu1=`echo "$target_cpu0" | sed -e 's:\([^0-9]*\).*:\1:' `
target_cpu2=`echo "$target_cpu0" | sed -e 's:\([^_]*\).*:\1:' `
target_cpu3=`echo "$target_cpu2" | sed -e 's:\([^0-9]*\).*:\1:' `
#
target_cpu_arch0=`echo "$target_cpu_arch" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`
#
changequote([, ])dnl
#
echo /'*' automatically generated by $PACKAGE configure '*'/ &gt;$ac_need_target_h_file
echo /'*' on `date` '*'/ &gt;&gt;$ac_need_target_h_file
dnl
old1=""
old2=""
for i in $target_os0 $target_os1 $target_os2 $target_os3 "TYPE"
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef "$ac_need_target_h_prefix"_OS_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define "$ac_need_target_h_prefix"_OS_"$i '"'"$target_os"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
#
old1=""
old2=""
for i in $target_cpu0 $target_cpu1 $target_cpu2 $target_cpu3 "TYPE"
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef "$ac_need_target_h_prefix"_CPU_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define "$ac_need_target_h_prefix"_CPU_"$i '"'"$target_cpu"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
#
old1=""
old2=""
for i in $target_cpu_arch0 "TYPE"
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef "$ac_need_target_h_prefix"_ARCH_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define "$ac_need_target_h_prefix"_ARCH_"$i '"'"$target_cpu_arch"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
])

dnl
dnl ... the lowercase variant ...
dnl
AC_DEFUN([AC_NEED_TARGET_OS_H],
[AC_REQUIRE([AC_CANONICAL_SYSTEM_ARCH])
ac_need_target_h_file=`echo ifelse($2, , target-os.h, $2)`
ac_need_target_h_prefix=`echo ifelse($1, , target, $1) | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ- abcdefghijklmnopqrstuvwxyz_ | tr -dc abcdefghijklmnopqrstuvwxyz1234567890_`
AC_MSG_RESULT(creating $ac_need_target_h_file - to export target_os as __$ac_need_target_h_prefix-defines)
#
changequote({, })dnl
#
target_os0=`echo "$target_os"  | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ.- abcdefghijklmnopqrstuvwxyz__ | tr -dc abcdefghijklmnopqrstuvwxyz1234567890_ `
target_os1=`echo "$target_os0" | sed -e 's:\([^0-9]*\).*:\1:' `
target_os2=`echo "$target_os0" | sed -e 's:\([^_]*\).*:\1:' `
target_os3=`echo "$target_os2" | sed -e 's:\([^0-9]*\).*:\1:' `
#
target_cpu0=`echo "$target_cpu"  | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ.- abcdefghijklmnopqrstuvwxyz__ | tr -dc abcdefghijklmnopqrstuvwxyz1234567890_`
target_cpu1=`echo "$target_cpu0" | sed -e 's:\([^0-9]*\).*:\1:' `
target_cpu2=`echo "$target_cpu0" | sed -e 's:\([^_]*\).*:\1:' `
target_cpu3=`echo "$target_cpu2" | sed -e 's:\([^0-9]*\).*:\1:' `
#
target_cpu_arch0=`echo "$target_cpu_arch" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
#
changequote([, ])dnl
#
echo /'*' automatically generated by $PACKAGE configure '*'/ &gt;$ac_need_target_h_file
echo /'*' on `date` '*'/ &gt;&gt;$ac_need_target_h_file
dnl
old1=""
old2=""
for i in $target_os0 $target_os1 $target_os2 $target_os3 "_";
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef __"$ac_need_target_h_prefix"_os_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define __"$ac_need_target_h_prefix"_os_"$i '"'"$target_os"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
#
old1=""
old2=""
for i in $target_cpu0 $target_cpu1 $target_cpu2 $target_cpu3 "_"
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef __"$ac_need_target_h_prefix"_cpu_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define __"$ac_need_target_h_prefix"_cpu_"$i '"'"$target_cpu"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
#
old1=""
old2=""
for i in $target_cpu_arch0 "_"
do
  if test "$old1" != "$i"; then
  if test "$old2" != "$i"; then
   echo " " &gt;&gt;$ac_need_target_h_file
   echo "#ifndef __"$ac_need_target_h_prefix"_arch_"$i &gt;&gt;$ac_need_target_h_file
   echo "#define __"$ac_need_target_h_prefix"_arch_"$i '"'"$target_cpu_arch"'"' &gt;&gt;$ac_need_target_h_file
   echo "#endif" &gt;&gt;$ac_need_target_h_file
  fi
  fi
  old2="$old1"
  old1="$i"
done
])

dnl
dnl the instruction set architecture (ISA) has evolved for a small set
dnl of cpu types. So they often have specific names, e.g. sparclite,
dnl yet they share quite a few similarities. This macro will set the
dnl shell-var $target_cpu_arch to the basic type. Note that these
dnl names are often in conflict with their original 32-bit type name
dnl of these processors, just use them for directory-handling or add
dnl a prefix/suffix to distinguish them from $target_cpu
dnl
dnl this macros has been invented since config.guess is sometimes
dnl too specific about the cpu-type. I chose the names along the lines
dnl of linux/arch/ which is modelled after widespread arch-naming, IMHO.
dnl
AC_DEFUN([AC_CANONICAL_SYSTEM_ARCH],
[AC_REQUIRE([AC_CANONICAL_SYSTEM])
target_cpu_arch="unknown"
case $target_cpu in
 i386*|i486*|i586*|i686*|i786*) target_cpu_arch=i386 ;;
 power*)   target_cpu_arch=ppc ;;
 arm*)     target_cpu_arch=arm ;;
 sparc64*) target_cpu_arch=sparc64 ;;
 sparc*)   target_cpu_arch=sparc ;;
 mips64*)  target_cpu_arch=mips64 ;;
 mips*)    target_cpu_arch=mips ;;
 alpa*)    target_cpu_arch=alpha ;;
esac
])