This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Check for the size of characters in bits
authorH.Merijn Brand <merijn@nb09.procura.nl>
Thu, 5 Nov 2009 21:34:45 +0000 (22:34 +0100)
committerH.Merijn Brand <merijn@nb09.procura.nl>
Thu, 5 Nov 2009 21:34:45 +0000 (22:34 +0100)
U/compline/charsize.U

index fa4166b..4f31168 100644 (file)
 ?RCS: Revision 3.0  1993/08/18  12:05:34  ram
 ?RCS: Baseline for dist 3.0 netwide release.
 ?RCS:
-?MAKE:charsize: cat rm_try Myread Compile run i_stdlib
+?MAKE:charsize charbits: cat rm_try Myread Compile run i_stdlib
 ?MAKE: -pick add $@ %<
 ?S:charsize:
 ?S:    This variable contains the value of the CHARSIZE symbol, which
 ?S:    indicates to the C program how many bytes there are in a character.
 ?S:.
+?S:charbits:
+?S:    This variable contains the value of the CHARBITS symbol, which
+?S:    indicates to the C program how many bits there are in a character.
+?S:.
 ?C:CHARSIZE:
 ?C:    This symbol contains the size of a char, so that the C preprocessor
 ?C:    can make decisions based on it.
 ?C:.
+?C:CHARBITS:
+?C:    This symbol contains the size of a char, so that the C preprocessor
+?C:    can make decisions based on it.
+?C:.
 ?H:#define CHARSIZE $charsize          /**/
+?H:#define CHARBITS $charbits          /**/
 ?H:.
 ?F:!try
 : check for length of character
@@ -62,3 +71,49 @@ rp="What is the size of a character (in bytes)?"
 charsize="$ans"
 $rm_try
 
+: Check for the number of bits in a character
+case "$charbits" in
+'')    echo "Checking how long a character is (in bits)..." >&4
+       $cat >try.c <<EOCP
+#include <stdio.h>
+int main ()
+{
+    int n;
+    unsigned char c;
+    for (c = 1, n = 0; c; c <<= 1, n++) ;
+    printf ("%d\n", n);
+    return (0);
+    }
+EOCP
+       set try
+       if eval $compile_ok; then
+               dflt=`$run ./try`
+       else
+               dflt='8'
+               echo "(I can't seem to compile the test program.  Guessing...)"
+       fi
+       ;;
+*)
+       dflt="$charbits"
+       ;;
+esac
+rp="What is the length of a character (in bits)?"
+. ./myread
+charbits="$ans"
+$rm_try
+case "$charbits" in
+8)     ;;
+*)     cat >&4 << EOM
+Your system has an unsigned character size of $charbits bits, which
+is rather unusual (normally it is 8 bits).  Perl likely will not work
+correctly on your system, with subtle bugs in various places.
+EOM
+       rp='Do you really want to continue?'
+       dflt='n'
+       . ./myread
+       case "$ans" in
+               [yY])   echo >&4 "Okay, continuing."    ;;
+               *)      exit 1                          ;;
+       esac
+esac
+