openesb-components/tl/src/cmn/codeline/bldhost.pl

288 lines
8.4 KiB
Perl
Executable File

#
# BEGIN_HEADER - DO NOT EDIT
#
# The contents of this file are subject to the terms
# of the Common Development and Distribution License
# (the "License"). You may not use this file except
# in compliance with the License.
#
# You can obtain a copy of the license at
# https://open-esb.dev.java.net/public/CDDLv1.0.html.
# See the License for the specific language governing
# permissions and limitations under the License.
#
# When distributing Covered Code, include this CDDL
# HEADER in each file and include the License file at
# https://open-esb.dev.java.net/public/CDDLv1.0.html.
# If applicable add the following below this CDDL HEADER,
# with the fields enclosed by brackets "[]" replaced with
# your own identifying information: Portions Copyright
# [year] [name of copyright owner]
#
#
# @(#)bldhost.pl - ver 1.1 - 01/04/2006
#
# Copyright 2004-2006 Sun Microsystems, Inc. All Rights Reserved.
#
# END_HEADER - DO NOT EDIT
#
package bldhost; #info about codeline build machines.
#require "dumpvar.pl";
require "codeline.pl";
$p = $'p; #$main'p is the program name set by the skeleton
sub main
{
local(*ARGV, *ENV) = @_;
local($FS) = " "; #default field separator
#set global flags:
return (1) if (&parse_args(*ARGV, *ENV) != 0);
return (0) if ($HELPFLAG);
#check for queries first...
if ($NQUERIES > 0) {
$port = $PORTS[0];
if ($UNIX_QUERY) { $ans = &cl'is_unix_port($port);
} elsif ($NT_QUERY) {
$ans = &cl'is_nt_port($port);
} elsif ($VMS_QUERY) {
$ans = &cl'is_vms_port($port);
} elsif ($EMAIL_QUERY) {
$ans = &cl'has_email($port);
} elsif ($BASE_PORT_QUERY) {
$ans = &cl'productbaseport();
} elsif ($PORT_OFFSET_QUERY) {
$ans = &cl'userportoffset($USER_NAME);
} elsif ($VERSION_QUERY) {
$ans = &cl'versionproperties($PRODUCT_ARG);
} else {
print STDERR "$p - INTERNAL ERROR - NQUERIES\n";
return 1;
}
#return status 0 if query is true.
if ($ans) {
print "YES\n" if ($VERBOSE);
return 0;
} else {
print "NO\n" if ($VERBOSE);
return 1;
}
}
local ($cnt) = 0;
local(@portlist);
if ($KIT_PORTS_ONLY) {
@portlist = keys(%cl::KIT_PORTS);
} else {
@portlist = @PORTS;
}
for $port (@portlist) {
local($sep) = ($cnt == 0) ? "" : $LIST_DELIMITER;
++$cnt;
if ($PORTS_ONLY) {
print "$sep$port";
next;
}
if ($PATHVARS_OPTION) {
$ans = join($LIST_DELIMITER, &cl'pathvars($port));
} else {
$ans = &cl'which_machine($port);
}
if ($VERBOSE) {
print "$port $ans\n";
} else {
print "$sep$ans";
}
}
print "\n" unless($VERBOSE && !$PORTS_ONLY);
return 0;
}
sub parse_args
#proccess command-line aguments
{
local(*ARGV, *ENV) = @_;
local ($flag, $arg);
$HELPFLAG = 0;
$VERBOSE = 0;
$ALL_PORTS = 0;
$PORTS_ONLY = 0;
$KIT_PORTS_ONLY = 0;
@PORTS = ();
$LIST_DELIMITER = " "; #default list delimiter
$NT_QUERY = 0;
$UNIX_QUERY = 0;
$VMS_QUERY = 0;
$EMAIL_QUERY = 0;
$PATHVARS_OPTION = 0;
$PORT_OFFSET_QUERY = 0;
$BASE_PORT_QUERY = 0;
$PRODUCT_ARG = 'ojc'; #default product name for this config.
$VERSION_QUERY = 0;
#eat up flag args:
while ($#ARGV+1 > 0 && $ARGV[0] =~ /^-/) {
$flag = shift(@ARGV);
if ($flag eq '-a') {
$ALL_PORTS = 1;
@PORTS = (@PORTS, &cl'forte_ports());
} elsif ($flag =~ '^-unix') {
@PORTS = (@PORTS, &cl'unix_ports());
} elsif ($flag =~ '^-other') {
@PORTS = (@PORTS, &cl'other_ports());
} elsif ($flag =~ '^-psuedo') {
@PORTS = (@PORTS, &cl'psuedo_ports());
} elsif ($flag =~ '^-aux') {
@PORTS = (@PORTS, &cl'auxiliary_ports());
} elsif ($flag =~ '^-port') {
$PORTS_ONLY = 1;
} elsif ($flag =~ '^-kitports') {
#limit output to ports we are building kits for:
$KIT_PORTS_ONLY = 1;
} elsif ($flag =~ '^-colon') {
$LIST_DELIMITER = ":";
} elsif ($flag =~ '^-comma') {
$LIST_DELIMITER = ",";
} elsif ($flag =~ '^-is_nt') {
$NT_QUERY = 1;
} elsif ($flag =~ '^-is_vms') {
$VMS_QUERY = 1;
} elsif ($flag =~ '^-is_unix') {
$UNIX_QUERY = 1;
} elsif ($flag =~ '^-has_email') {
$EMAIL_QUERY = 1;
} elsif ($flag =~ /^-vers/) {
$VERSION_QUERY = 1;
} elsif ($flag =~ '^-v') {
$VERBOSE = 1;
} elsif ($flag =~ '^-prod') {
if (!@ARGV) {
printf STDERR "Usage: %s -product ojc\n", $p;
return(1);
}
$PRODUCT_ARG = shift(@ARGV);
if ($PRODUCT_ARG !~ /^(ojc)/) {
printf STDERR "%s: '%s' is not a valid product name\n", $p, $PRODUCT_ARG;
printf STDERR "Usage: %s -product ojc\n", $p;
return(1);
}
} elsif ($flag =~ '^-productbaseport') {
$BASE_PORT_QUERY = 1;
} elsif ($flag =~ '^-userportoffset') {
$PORT_OFFSET_QUERY = 1;
if (!@ARGV) {
printf STDERR "Usage: %s -userportoffset USER_NAME\n", $p;
return(1);
}
$USER_NAME = shift(@ARGV);
if ($USER_NAME =~ '^-') {
printf STDERR "%s: '%s' is not a valid user name\n", $p, $USER_NAME;
return(1);
}
} elsif ($flag =~ '^-pathvar') {
$PATHVARS_OPTION = 1;
} elsif ($flag =~ '^-h') {
$HELPFLAG = 1;
return(&usage(0));
} else {
print STDERR "option $flag not recognized.\n";;
return(&usage(1));
}
}
#add remaining args:
if ($#ARGV >= 0 && $ARGV[0] ne "") {
@PORTS = @ARGV;
}
$NQUERIES = $NT_QUERY + $UNIX_QUERY + $VMS_QUERY + $EMAIL_QUERY + $PORT_OFFSET_QUERY
+ $BASE_PORT_QUERY + $VERSION_QUERY;
if ($NQUERIES > 1) {
print STDERR "too many queries - only one allowed per call.\n";
return &usage(1);
} elsif ($NQUERIES == 1 && $#PORTS > 0) {
print STDERR "can have exactly one port per query\n";
return &usage(1);
}
return(0);
}
sub usage
{
local($status) = @_;
local($CODELINE) = &cl'codeline();
print STDERR <<"!";
Usage: $p [-help] [options...] [forte_port...]
Synopsis:
Returns build machine names for the $CODELINE codeline.
Options:
-help display usage message.
-v include the FORTE_PORT names in display.
-port print the ports only.
-kitports limit output to ports we are building kits for.
-a return the name of all the build machines.
-unix return unix build hosts only.
-other return non-unix port names (win30, mac, etc.)
-psuedo return psuedo port names (cmn, ntcmn, etc.))
-aux return auxiliary unix hosts (linux, sparc, etc.).
-pathvars return the names of BIN_PATH & SHLIB_PATH variable names.
-is_unix return 0 status if port is a unix port; otherwise 1.
-is_nt return 0 status if port is an NT class port; otherwise 1.
-is_vms return 0 status if port is an VMS class port; otherwise 1.
-has_email return 0 status if port is email capable; otherwise 1.
-product ojc
generate information for named. Default is ojc.
-versionproperties
display version properties for -product.
-productbaseport
return the base network port assigned to this codeline.
-userportoffset <user>
return the network port offset assigned to <user>.
-comma separate lists with commas instead of spaces
-colon separate lists with colons instead of spaces
NOTES:
Options are additive - e.g., "-unix -aux" will return
unix and auxiliary ports, "-a -a" will return all ports
twice, etc.
The -port option is useful for setting up parallel arrays
(csh/tcsh) syntax:
set myhosts=`bldhost -unix`
set myports=`bldhost -port -unix`
will set up two array variables with corresponding indexes -
i.e., \$myhosts[1] is the hostname of \$myports[1].
EXAMPLES:
set myportoffset=`bldhost -userportoffset \$LOGNAME`
!
return($status);
}
sub cleanup
{
}
1;