home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / perl560.zip / t / lib / ph.t < prev    next >
Text File  |  1999-07-20  |  3KB  |  97 lines

  1. #!./perl
  2.  
  3. # Check for presence and correctness of .ph files; for now,
  4. # just socket.ph and pals.
  5. #   -- Kurt Starsinic <kstar@isinet.com>
  6.  
  7. BEGIN {
  8.     chdir 't' if -d 't';
  9.     unshift @INC, '../lib';
  10. }
  11.  
  12. # All the constants which Socket.pm tries to make available:
  13. my @possibly_defined = qw(
  14.     INADDR_ANY INADDR_LOOPBACK INADDR_NONE AF_802 AF_APPLETALK AF_CCITT
  15.     AF_CHAOS AF_DATAKIT AF_DECnet AF_DLI AF_ECMA AF_GOSIP AF_HYLINK AF_IMPLINK
  16.     AF_INET AF_LAT AF_MAX AF_NBS AF_NIT AF_NS AF_OSI AF_OSINET AF_PUP
  17.     AF_SNA AF_UNIX AF_UNSPEC AF_X25 MSG_DONTROUTE MSG_MAXIOVLEN MSG_OOB
  18.     MSG_PEEK PF_802 PF_APPLETALK PF_CCITT PF_CHAOS PF_DATAKIT PF_DECnet PF_DLI
  19.     PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_LAT PF_MAX PF_NBS PF_NIT
  20.     PF_NS PF_OSI PF_OSINET PF_PUP PF_SNA PF_UNIX PF_UNSPEC PF_X25 SOCK_DGRAM
  21.     SOCK_RAW SOCK_RDM SOCK_SEQPACKET SOCK_STREAM SOL_SOCKET SOMAXCONN
  22.     SO_ACCEPTCONN SO_BROADCAST SO_DEBUG SO_DONTLINGER SO_DONTROUTE SO_ERROR
  23.     SO_KEEPALIVE SO_LINGER SO_OOBINLINE SO_RCVBUF SO_RCVLOWAT SO_RCVTIMEO
  24.     SO_REUSEADDR SO_SNDBUF SO_SNDLOWAT SO_SNDTIMEO SO_TYPE SO_USELOOPBACK
  25. );
  26.  
  27.  
  28. # The libraries which I'm going to require:
  29. my @libs = qw(Socket "sys/types.ph" "sys/socket.ph" "netinet/in.ph");
  30.  
  31.  
  32. # These are defined by Socket.pm even if the C header files don't define them:
  33. my %ok_to_miss = (
  34.     INADDR_NONE         => 1,
  35.     INADDR_LOOPBACK     => 1,
  36. );
  37.  
  38.  
  39. my $total_tests = scalar @libs + scalar @possibly_defined;
  40. my $i           = 0;
  41.  
  42. print "1..$total_tests\n";
  43.  
  44.  
  45. foreach (@libs) {
  46.     $i++;
  47.  
  48.     if (eval "require $_" ) {
  49.         print "ok $i\n";
  50.     } else {
  51.         print "# Skipping tests; $_ may be missing\n";
  52.         foreach ($i .. $total_tests) { print "ok $_\n" }
  53.         exit;
  54.     }
  55. }
  56.  
  57.  
  58. foreach (@possibly_defined) {
  59.     $i++;
  60.  
  61.     $pm_val = eval "Socket::$_()";
  62.     $ph_val = eval "main::$_()";
  63.  
  64.     if (defined $pm_val and !defined $ph_val) {
  65.         if ($ok_to_miss{$_}) { print "ok $i\n" }
  66.         else                 { print "not ok $i\n" }
  67.         next;
  68.     } elsif (defined $ph_val and !defined $pm_val) {
  69.         print "not ok $i\n";
  70.         next;
  71.     }
  72.  
  73.     # Socket.pm converts these to network byte order, so we convert the
  74.     # socket.ph version to match; note that these cases skip the following
  75.     # `elsif', which is only applied to _numeric_ values, not literal
  76.     # bitmasks.
  77.     if ($_ eq 'INADDR_ANY'
  78.     or  $_ eq 'INADDR_LOOPBACK'
  79.     or  $_ eq 'INADDR_NONE') {
  80.         $ph_val = pack("N*", $ph_val);  # htonl(3) equivalent
  81.     }
  82.  
  83.     # Since Socket.pm and socket.ph wave their hands over macros differently,
  84.     # they could return functionally equivalent bitmaps with different numeric
  85.     # interpretations (due to sign extension).  The only apparent case of this
  86.     # is SO_DONTLINGER (only on Solaris, and deprecated, at that):
  87.     elsif ($pm_val != $ph_val) {
  88.         $pm_val = oct(sprintf "0x%lx", $pm_val);
  89.         $ph_val = oct(sprintf "0x%lx", $ph_val);
  90.     }
  91.  
  92.     if ($pm_val == $ph_val) { print "ok $i\n" }
  93.     else                    { print "not ok $i\n" }
  94. }
  95.  
  96.  
  97.