open_toontown_panda3d/dtool/src/attach/ctattach.drv

150 lines
4.0 KiB
Perl
Executable File

#!/usr/local/bin/perl
# acceptable forms:
# ctattach - give usage message
# ctattach project - attach to the personal flavor of the project
# ctattach project flavor - attach to a specific flavor of the project
# ctattach - - list projects that can be attached to
# ctattach project - - list flavors of a given project
# ctattach - flavor - list projects with a certain flavor
# ctattach -def project flavor - attach to project, setting CTDEFAULT_FLAV
# to flavor for the scope of this attach
sub CTAttachUsage {
print STDERR "Usage: ctattach -def project flavor -or-\n" ;
print STDERR " ctattach project [flavor] -or-\n" ;
print STDERR " ctattach project - -or-\n" ;
print STDERR " ctattach - [flavor]\n" ;
&CTAttachWriteNullScript( $tmpname ) ;
print $tmpname . "\n" ;
exit;
}
$tool = $ENV{"DTOOL"} ;
if ( $tool eq "" ) {
die "\$" . "DTOOL environment must be set to use CTtools\n" ;
}
require "$tool/include/ctattch.pl" ;
$tmpname = "/tmp/script.$$" ;
if ( $#ARGV == -1 ) {
&CTUDebug( "got no arguments\n" ) ;
&CTAttachUsage ;
}
$idx = 0 ;
$proj = "" ;
$flav = "" ;
$noflav = 0 ;
$defflav = "" ;
$spread = 0 ;
$anydef = 0 ;
#
# parse arguemnts
#
if ( $ARGV[$idx] eq "-def" ) {
&CTUDebug( "got '-def' parameter\n" ) ;
if ( $#ARGV < ($idx + 2) ) {
&CTUDebug( "not enough arguments after -def\n" ) ;
&CTAttachUsage ;
}
$defflav = $ARGV[$idx+2] ;
$spread = 1;
&CTUDebug( "spread default flavor is '$defflav'\n" ) ;
$idx++ ;
} else {
if ( $ENV{"CTDEFAULT_FLAV"} ne "" ) {
$defflav = $ENV{"CTDEFAULT_FLAV"} ;
&CTUDebug( "environment default flavor is '$defflav'\n" ) ;
}
}
$proj = $ARGV[$idx] ;
&CTUDebug( "project is '$proj'\n" ) ;
if ( $defflav eq "" ) {
$defflav = "default" ;
&CTUDebug( "no environmental default, using 'default'\n" ) ;
}
if ( $#ARGV > $idx ) {
$flav = $ARGV[$idx+1] ;
&CTUDebug( "provided flavor is '$flav'\n" ) ;
} else {
if ( $proj ne "-" ) {
$flav = $defflav;
&CTUDebug( "using environment default flavor '$flav'\n" ) ;
$noflav = 1 ;
}
}
if (( $noflav == 1 ) || ( $flav eq "default" )) {
$anydef = 1 ;
}
#
# act on the arguments we got
#
require "$tool/include/ctquery.pl" ;
require "$tool/include/ctvspec.pl" ;
if (( $proj eq "-" ) || ( $flav eq "-" )) {
if ( $#ARGV == 0 ) {
# list projects that can be attached to
print STDERR "Projects that can be attached to:\n" ;
$_ = &CTListAllProjects ;
@projlist = split ;
foreach $item ( @projlist ) {
print STDERR " $item\n" ;
}
} elsif ( $proj eq "-" ) {
# list project that have a given flavor
print STDERR "Projects that have a '$flav' flavor:\n" ;
$_ = &CTListAllProjects ;
@projlist = split ;
foreach $item ( @projlist ) {
$tmp = &CTResolveSpec( $item, $flav ) ;
if ( $tmp ne "" ) {
print STDERR " $item\n" ;
}
}
} else {
# list flavors of a given project
print STDERR "Flavors of project '$proj':\n" ;
$_ = &CTListAllFlavors( $proj ) ;
@flavlist = split ;
foreach $item ( @flavlist ) {
print STDERR " $item\n" ;
}
}
&CTAttachWriteNullScript( $tmpname ) ;
print $tmpname . "\n" ;
} else {
# output a real attachment
$curflav = &CTQueryProj( $proj ) ;
if (( $curflav eq "" ) || ( $noflav == 0 )) {
$envsep{"PATH"} = ":" ;
$envsep{"LD_LIBRARY_PATH"} = ":" ;
$envsep{"PFPATH"} = ":" ;
$envsep{"SSPATH"} = ":" ;
$envsep{"STKPATH"} = ":" ;
$envsep{"DC_PATH"} = ":" ;
$spec = &CTAttachCompute( $proj, $flav, $anydef ) ;
if ( $spec eq "" ) {
&CTAttachWriteNullScript( $tmpname ) ;
print $tmpname . "\n" ;
} else {
&CTAttachWriteScript( $tmpname ) ;
print $tmpname . "\n" ;
}
} else {
&CTAttachWriteNullScript( $tmpname ) ;
print $tmpname . "\n" ;
}
}