|
|
1.1 ! root 1: dnl $Id: acinclude.m4,v 1.4 2003/05/17 20:33:36 fredette Exp $ ! 2: ! 3: dnl acinclude.m4 - additional tme autoconf macros: ! 4: ! 5: dnl Copyright (c) 2001, 2003 Matt Fredette ! 6: dnl All rights reserved. ! 7: dnl ! 8: dnl Redistribution and use in source and binary forms, with or without ! 9: dnl modification, are permitted provided that the following conditions ! 10: dnl are met: ! 11: dnl 1. Redistributions of source code must retain the above copyright ! 12: dnl notice, this list of conditions and the following disclaimer. ! 13: dnl 2. Redistributions in binary form must reproduce the above copyright ! 14: dnl notice, this list of conditions and the following disclaimer in the ! 15: dnl documentation and/or other materials provided with the distribution. ! 16: dnl 3. All advertising materials mentioning features or use of this software ! 17: dnl must display the following acknowledgement: ! 18: dnl This product includes software developed by Matt Fredette. ! 19: dnl 4. The name of the author may not be used to endorse or promote products ! 20: dnl derived from this software without specific prior written permission. ! 21: dnl ! 22: dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR ! 23: dnl IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ! 24: dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ! 25: dnl DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, ! 26: dnl INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ! 27: dnl (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ! 28: dnl SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! 29: dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ! 30: dnl STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ! 31: dnl ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ! 32: dnl POSSIBILITY OF SUCH DAMAGE. ! 33: ! 34: dnl AC_CHECK_ALIGNOF(BITS) ! 35: AC_DEFUN(AC_CHECK_ALIGNOF, ! 36: [changequote(<<, >>)dnl ! 37: dnl The name to #define. ! 38: define(<<AC_TYPE_NAME>>, translit(alignof_int$1_t, [a-z *], [A-Z_P]))dnl ! 39: dnl The cache variable name. ! 40: define(<<AC_CV_NAME>>, translit(ac_cv_alignof_int$1_t, [ *], [_p]))dnl ! 41: changequote([, ])dnl ! 42: AC_MSG_CHECKING(minimum alignment of int$1_t) ! 43: AC_CACHE_VAL(AC_CV_NAME, ! 44: [AC_TRY_RUN([#include <stdio.h> ! 45: #include <sys/types.h> ! 46: main() ! 47: { ! 48: #if (SIZEOF_SHORT * 8) == $1 ! 49: #define _type short ! 50: #elif (SIZEOF_INT * 8) == $1 ! 51: #define _type int ! 52: #else ! 53: #define _type long ! 54: #endif ! 55: char try_align_buffer[sizeof(_type) * 2]; ! 56: int min_align, try_align, status; ! 57: _type value; ! 58: FILE *f=fopen("conftestval", "w"); ! 59: if (!f) exit(1); ! 60: min_align = sizeof(_type); ! 61: for(try_align = sizeof(_type); try_align-- > 1;) { ! 62: switch(fork()) { ! 63: case -1: exit(1); ! 64: case 0: value = *((_type *) &try_align_buffer[try_align]); ! 65: fprintf(stderr, "%d\n", (int) value); exit(0); ! 66: default: break; ! 67: } ! 68: wait(&status); ! 69: if (!status && try_align < min_align) { ! 70: min_align = try_align; ! 71: } ! 72: } ! 73: fprintf(f, "%d\n", min_align * 8); ! 74: exit(0); ! 75: }], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=$1, AC_CV_NAME=$1)])dnl ! 76: AC_CV_NAME=`expr $AC_CV_NAME / 8` ! 77: AC_MSG_RESULT($AC_CV_NAME) ! 78: AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to the minimum alignment, in bytes, of int$1_t.]) ! 79: undefine([AC_TYPE_NAME])dnl ! 80: undefine([AC_CV_NAME])dnl ! 81: ]) ! 82: ! 83: dnl AC_CHECK_SHIFTMAX(BITS) ! 84: AC_DEFUN(AC_CHECK_SHIFTMAX, ! 85: [changequote(<<, >>)dnl ! 86: dnl The name to #define. ! 87: define(<<AC_TYPE_NAME>>, translit(shiftmax_int$1_t, [a-z *], [A-Z_P]))dnl ! 88: dnl The cache variable name. ! 89: define(<<AC_CV_NAME>>, translit(ac_cv_shiftmax_int$1_t, [ *], [_p]))dnl ! 90: changequote([, ])dnl ! 91: AC_MSG_CHECKING(maximum shift count for int$1_t) ! 92: AC_CACHE_VAL(AC_CV_NAME, ! 93: [AC_TRY_RUN([#include <stdio.h> ! 94: #include <sys/types.h> ! 95: main() ! 96: { ! 97: #if 8 == $1 ! 98: #define _type char ! 99: #elif (SIZEOF_SHORT * 8) == $1 ! 100: #define _type short ! 101: #elif (SIZEOF_INT * 8) == $1 ! 102: #define _type int ! 103: #elif (SIZEOF_LONG * 8) == $1 ! 104: #define _type long ! 105: #endif ! 106: _type center, right, left; ! 107: unsigned int shift, max_shift; ! 108: FILE *f=fopen("conftestval", "w"); ! 109: if (!f) exit(1); ! 110: center = 3 << ((sizeof(center) * 4) - 1); ! 111: max_shift = 2047; ! 112: for (shift = (sizeof(center) * 8); ! 113: shift < 2048; ! 114: shift <<= 1) { ! 115: right = (center >> shift); ! 116: left = (center << shift); ! 117: if (right != 0 ! 118: || left != 0) { ! 119: right = (center >> (shift | 1)); ! 120: left = (center << (shift | 1)); ! 121: max_shift = ((right == (center >> 1) ! 122: && left == (center << 1)) ! 123: ? shift - 1 ! 124: : (sizeof(center) * 8) - 1); ! 125: break; ! 126: } ! 127: } ! 128: fprintf(f, "%d\n", max_shift + 1); ! 129: exit(0); ! 130: }], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=$1, AC_CV_NAME=$1)])dnl ! 131: AC_CV_NAME=`expr $AC_CV_NAME - 1` ! 132: AC_MSG_RESULT($AC_CV_NAME) ! 133: AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [Define to the maximum shift count for a int$1_t.]) ! 134: undefine([AC_TYPE_NAME])dnl ! 135: undefine([AC_CV_NAME])dnl ! 136: ]) ! 137: ! 138: dnl The AC_HEADER_CHECK_PROTOTYPE, AC_HEADER_CHECK_PROTOTYPES, ! 139: dnl and AC_SYS_SOCKADDR_SA_LEN macros bear the following copyright: ! 140: dnl ! 141: dnl Copyright (C) 1997,1998,1999 by the Massachusetts Institute of Technology, ! 142: dnl Cambridge, MA, USA. All Rights Reserved. ! 143: dnl ! 144: dnl This software is being provided to you, the LICENSEE, by the ! 145: dnl Massachusetts Institute of Technology (M.I.T.) under the following ! 146: dnl license. By obtaining, using and/or copying this software, you agree ! 147: dnl that you have read, understood, and will comply with these terms and ! 148: dnl conditions: ! 149: dnl ! 150: dnl WITHIN THOSE CONSTRAINTS, permission to use, copy, modify and distribute ! 151: dnl this software and its documentation for any purpose and without fee or ! 152: dnl royalty is hereby granted, provided that you agree to comply with the ! 153: dnl following copyright notice and statements, including the disclaimer, and ! 154: dnl that the same appear on ALL copies of the software and documentation, ! 155: dnl including modifications that you make for internal use or for ! 156: dnl distribution: ! 157: dnl ! 158: dnl THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO REPRESENTATIONS ! 159: dnl OR WARRANTIES, EXPRESS OR IMPLIED. By way of example, but not ! 160: dnl limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF ! 161: dnl MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF ! 162: dnl THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY ! 163: dnl PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. ! 164: dnl ! 165: dnl The name of the Massachusetts Institute of Technology or M.I.T. may NOT ! 166: dnl be used in advertising or publicity pertaining to distribution of the ! 167: dnl software. Title to copyright in this software and any associated ! 168: dnl documentation shall at all times remain with M.I.T., and USER agrees to ! 169: dnl preserve same. ! 170: ! 171: dnl AC_HEADER_CHECK_PROTOTYPE(FUNCTION, INCLUDES, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) ! 172: AC_DEFUN(AC_HEADER_CHECK_PROTOTYPE, ! 173: [AC_MSG_CHECKING([for a prototype for $1]) ! 174: AC_CACHE_VAL(ac_cv_proto_$1, ! 175: [AC_TRY_COMPILE($2 [ ! 176: struct bonch { int a, b; }; ! 177: struct bonch $1(); ! 178: ], , eval "ac_cv_proto_$1=no", eval "ac_cv_proto_$1=yes")]) ! 179: if eval "test \"`echo '$ac_cv_proto_'$1`\" = yes"; then ! 180: AC_MSG_RESULT(yes) ! 181: ifelse([$3], , :, [$3]) ! 182: else ! 183: AC_MSG_RESULT(no) ! 184: ifelse([$4], , , [$4 ! 185: ])dnl ! 186: fi ! 187: ]) ! 188: ! 189: dnl AC_HEADER_CHECK_PROTOTYPES(INCLUDES, FUNCTION...) ! 190: AC_DEFUN(AC_HEADER_CHECK_PROTOTYPES, ! 191: [for ac_func in $2 ! 192: do ! 193: AC_HEADER_CHECK_PROTOTYPE($ac_func, $1, ! 194: [changequote(, )dnl ! 195: ac_tr_func=PROTO_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` ! 196: changequote([, ])dnl ! 197: AC_DEFINE_UNQUOTED($ac_tr_func)])dnl ! 198: done ! 199: ]) ! 200: ! 201: dnl AC_SYS_SOCKADDR_SA_LEN ! 202: AC_DEFUN(AC_SYS_SOCKADDR_SA_LEN, ! 203: [AC_MSG_CHECKING([for sa_len in struct sockaddr]) ! 204: AC_CACHE_VAL(ac_cv_sys_sockaddr_sa_len, ! 205: [AC_TRY_COMPILE([ ! 206: #include <sys/types.h> ! 207: #include <sys/socket.h> ! 208: ], [ ! 209: int length; ! 210: struct sockaddr sock; ! 211: length = sock.sa_len; ! 212: ], ac_cv_sys_sockaddr_sa_len=yes, ac_cv_sys_sockaddr_sa_len=no)])dnl ! 213: if test $ac_cv_sys_sockaddr_sa_len = yes; then ! 214: AC_MSG_RESULT(yes) ! 215: AC_DEFINE_UNQUOTED(HAVE_SOCKADDR_SA_LEN, [], [Define if your struct sockaddr has sa_len.]) ! 216: else ! 217: AC_MSG_RESULT(no) ! 218: fi ! 219: ])dnl
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.