package HeaderDoc::AvailHelper;
BEGIN {
foreach (qw(Mac::Files)) {
$MOD_AVAIL{$_} = eval "use $_; 1";
}
}
use HeaderDoc::HeaderElement;
use HeaderDoc::DBLookup;
use HeaderDoc::Utilities qw(findRelativePath safeName getAPINameAndDisc convertCharsForFileMaker printArray printHash resolveLink quote sanitize);
use File::Basename;
use Cwd;
use Carp qw(cluck);
use strict;
use vars qw($VERSION @ISA);
$VERSION = '$Revision: 1.1.2.3 $';
my $isMacOS;
my $pathSeparator;
if ($^O =~ /MacOS/io) {
$pathSeparator = ":";
$isMacOS = 1;
} else {
$pathSeparator = "/";
$isMacOS = 0;
}
my $debugging = 0;
my $theTime = time();
my ($sec, $min, $hour, $dom, $moy, $year, @rest);
($sec, $min, $hour, $dom, $moy, $year, @rest) = localtime($theTime);
$year += 1900;
my $dateStamp = HeaderDoc::HeaderElement::strdate($moy, $dom, $year);
my $depth = 0;
sub new {
my($param) = shift;
my($class) = ref($param) || $param;
my $self = {};
bless($self, $class);
$self->_initialize();
return($self);
}
{
my $_versionHash = _initVersionHash();
my $_versionStringHash = _initVersionStringHash();
sub _initialize
{
my ($self) = shift;
}
sub _initVersionHash()
{
my %hash = ();
my $x = 0;
while ($x <= 9) {
my $string = "MAC_OS_X_VERSION_10_".$x;
my $value = 1000 + (10 * $x);
$hash{$string} = $value;
$x++;
}
return \%hash;
}
sub _initVersionStringHash()
{
my %hash = ();
my $x = 0;
while ($x <= 9) {
my $string = "Mac OS X v10.".$x;
my $value = 1000 + (10 * $x);
$hash{$value} = $string;
$x++;
}
return \%hash;
}
sub versionnum
{
my $self = shift;
my $string = shift;
my %hash = %{$_versionHash};
if (defined($hash{$string})) {
return $hash{$string};
}
return $string;
}
sub versionstring
{
my $self = shift;
my $num = shift;
my %hash = %{$_versionStringHash};
if (defined($hash{$num})) {
return $hash{$num};
}
return "";
}
}
sub parseString
{
my $self = shift;
my $string = shift;
my $filename = shift;
my $line = shift;
my $minver = "";
my $minop = "";
my $minrev = 0;
if ($string =~ /MAC_OS_X_VERSION_MIN_REQUIRED\s*([<>=!]+)\s*(\w+)/) {
$minop = $1;
$minver = $2;
$minrev = 0;
}
if ($string =~ /(\w+)\s*([<>=!]+)\s*MAC_OS_X_VERSION_MIN_REQUIRED/) {
$minop = $2;
$minver = $1;
$minrev = 1;
}
my $maxver = "";
my $maxop = "";
my $maxrev = 0;
if ($string =~ /MAC_OS_X_VERSION_MAX_ALLOWED\s*([<>=!]+)\s*(\w+)/) {
$maxop = $1;
$maxver = $2;
$maxrev = 0;
}
if ($string =~ /(\w+)\s*([<>=!]+)\s*MAC_OS_X_VERSION_MAX_ALLOWED/) {
$maxop = $2;
$maxver = $1;
$maxrev = 1;
}
if ($minrev) {
if ($minop eq "<") { $minop = ">"; }
elsif ($minop eq "<=") { $minop = ">="; }
elsif ($minop eq ">") { $minop = "<"; }
elsif ($minop eq ">=") { $minop = "<="; }
}
if ($maxrev) {
if ($maxop eq "<") { $maxop = ">"; }
elsif ($maxop eq "<=") { $maxop = ">="; }
elsif ($maxop eq ">") { $maxop = "<"; }
elsif ($maxop eq ">=") { $maxop = "<="; }
}
$string = "";
if (length($maxver)) {
if ($maxop eq ">" || $maxop eq ">=") {
my $val = $self->versionnum($maxver); if ($maxop eq ">") {
$val += 10; }
my $name = $self->versionstring($val); if ($name ne "") {
if (length($string)) { $string .= " "; }
$string .= "Introduced in ".$name.";";
} else {
warn "Could not get name for $maxver ($val)!\n";
}
} else {
warn "$filename:$line:Unsupported use of MAC_OS_X_VERSION_MAX_ALLOWED!\n";
}
}
if (length($minver)) {
if ($minop eq "<" || $minop eq "<=") {
my $val = $self->versionnum($minver);
if ($minop eq "<") {
$val -= 10; }
my $name = $self->versionstring($val); if ($name ne "") {
if (length($string)) { $string .= " "; }
$string .= "Removed in ".$name.";";
} else {
warn "Could not get name for $minver ($val)!\n";
}
} else {
warn "$filename:$line:Unsupported use of MAC_OS_X_VERSION_MIN_REQUIRED!\n";
}
}
return $string;
}
1;