trick/bin/pm/gte.pm
2016-09-16 09:29:23 -05:00

229 lines
7.7 KiB
Perl
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package gte ;
use File::Basename ;
use Cwd 'abs_path';
use Exporter ();
@ISA = qw(Exporter);
@EXPORT = qw(gte);
use strict ;
sub gte (@) {
my (@args) = @_ ;
my $ret ;
my ( $system_type , $version , $major_ver , $gcc_version , $glibc_version ) ;
my ( $machine_hardware ) ;
my (%gte , %def );
my @externals ;
my $search ;
my $e ;
my $trick_bin = dirname(abs_path($0)) ;
my $trick_home = dirname($trick_bin) ;
$ret = `uname -s -r` ;
chomp($ret);
($system_type , $version) = split / / , $ret ;
if ( $system_type eq "SunOS" ) {
$gte{"TRICK_HOST_CPU"} = $system_type . "_" . $version ;
$gte{"TRICK_HOST_TYPE"} = $system_type . "_5.6_plus" ;
}
elsif ( $system_type eq "IRIX" or $system_type eq "IRIX64" ) {
$gte{"TRICK_HOST_TYPE"} = "IRIX_6.x" ;
$gte{"TRICK_HOST_CPU"} = "IRIX_" . $version ;
}
else { # Linux or Darwin
($major_ver) = $version =~ /(\d+)/ ;
$def{"TRICK_HOST_CPU"} = $system_type . "_" . $major_ver ;
$def{"TRICK_HOST_TYPE"} = $system_type ;
$ret = "" ;
# need to append the gcc version as different gcc's are not compatible
if ( exists $ENV{"TRICK_CC"} ) {
if ( $ENV{"TRICK_CC"} =~ /ccintppc/ ) {
$ret = "0.0" ;
} elsif ( $ENV{"TRICK_CC"} =~ /^\// ) {
my ($temp) = $ENV{"TRICK_CC"} ;
# remove possible ccache from TRICK_CC
$temp =~ s/.*?ccache\s+// ;
if ( -e $temp ) {
$ret = `$temp -dumpversion` ;
}
else {
printf STDERR "Cannot find TRICK_CC = $temp, using /usr/bin/gcc\n" ;
$ret = `/usr/bin/gcc -dumpversion` ;
}
}
else {
$ret = `$ENV{TRICK_CC} -dumpversion` ;
}
}
else {
$ret = `gcc -dumpversion` ;
}
($gcc_version) = $ret =~ /(\d+\.\d+)/ ;
if ( $system_type eq "Linux" ) {
$def{"TRICK_HOST_CPU"} = $system_type . "_" . $gcc_version ;
$machine_hardware = `uname -m` ;
if ( (! exists $ENV{"TRICK_FORCE_32BIT"} or $ENV{"TRICK_FORCE_32BIT"} == 0) and $machine_hardware eq "x86_64\n") {
$def{"TRICK_HOST_CPU"} .= "_x86_64" ;
}
}
}
# defaults common to all architectures
$def{"TRICK_CC"} = "cc" ;
$def{"TRICK_CONVERT_SWIG_FLAGS"} = "" ;
$def{"TRICK_CFLAGS"} = "" ;
$def{"TRICK_CXXFLAGS"} = "" ;
$def{"TRICK_CPPC"} = "c++" ;
$def{"TRICK_DEBUG"} = "0" ;
$def{"TRICK_EDITOR"} = "" ;
$def{"TRICK_EXEC_LINK_LIBS"} = "" ;
$def{"TRICK_FORCE_32BIT"} = "0" ;
$def{"TRICK_GTE_EXT"} = "" ;
$def{"TRICK_HOME"} = "$trick_home" ;
$def{"TRICK_HOST_CPU_USER_SUFFIX"} = "" ;
$def{"TRICK_ICG_NOCOMMENT"} = "" ;
$def{"TRICK_ICG_EXCLUDE"} = "" ;
$def{"TRICK_SWIG_EXCLUDE"} = "" ;
$def{"TRICK_PYTHON_PATH"} = "" ;
$def{"TRICK_LDFLAGS"} = "" ;
$def{"TRICK_MAKE"} = "" ;
$def{"TRICK_PATH"} = "$trick_home/bin" ;
$def{"TRICK_PRINT_CMD"} = "lpr" ;
$def{"TRICK_PRINTER_NAME"} = "" ;
$def{"TRICK_SFLAGS"} = "" ;
$def{"TRICK_USER_HOME"} = "$ENV{HOME}/trick_sims" ;
$def{"TRICK_USER_CSHRC"} = "$ENV{HOME}/.Trick_user_cshrc" ;
$def{"TRICK_USER_LINK_LIBS"} = "" ;
$def{"TRICK_USER_PROFILE"} = "$ENV{HOME}/.Trick_user_profile" ;
$def{"TRICK_VER"} = "trick_dev" ;
$def{"XML_CATALOG_FILES"} = "$trick_home/trick_source/data_products/DPX/XML/catalog.xml" ;
# set gte variables... if variable in environment use it, else use default
foreach ( keys %def ) {
$gte{$_} = ( exists $ENV{$_} ) ? $ENV{$_} : $def{$_} ;
}
$gte{"TRICK_HOST_CPU"} .= $gte{"TRICK_HOST_CPU_USER_SUFFIX"} ;
# Flip -g/-O in TRICK_CFLAGS according to TRICK_DEBUG if we are not asking for whole list
if ( scalar(@args) != 0 ) {
if ( $gte{"TRICK_DEBUG"} eq "1" ) {
$gte{"TRICK_CFLAGS"} =~ s/-[gO]\d?(\s+|$)/-g /g ;
if ($gte{"TRICK_CFLAGS"} !~ /-g/ ) {
$gte{"TRICK_CFLAGS"} =~ s/^\s*/-g / ;
}
$gte{"TRICK_CXXFLAGS"} =~ s/-[gO]\d?(\s+|$)/-g /g ;
if ($gte{"TRICK_CXXFLAGS"} !~ /-g/ ) {
$gte{"TRICK_CXXFLAGS"} =~ s/^\s*/-g / ;
}
}
elsif ( $gte{"TRICK_DEBUG"} eq "2" ) {
$gte{"TRICK_CFLAGS"} =~ s/-g(\s+|$)/-O / ;
if ($gte{"TRICK_CFLAGS"} !~ /-O/ ) {
$gte{"TRICK_CFLAGS"} =~ s/^\s*/-O / ;
}
$gte{"TRICK_CXXFLAGS"} =~ s/-g(\s+|$)/-O / ;
if ($gte{"TRICK_CXXFLAGS"} !~ /-O/ ) {
$gte{"TRICK_CXXFLAGS"} =~ s/^\s*/-O / ;
}
}
elsif ( $gte{"TRICK_DEBUG"} eq "3" ) {
$gte{"TRICK_CFLAGS"} =~ s/-[gO](\s+|$)/-O2 / ;
if ($gte{"TRICK_CFLAGS"} !~ /-O2/ ) {
$gte{"TRICK_CFLAGS"} =~ s/^\s*/-O2 / ;
}
$gte{"TRICK_CXXFLAGS"} =~ s/-[gO](\s+|$)/-O2 / ;
if ($gte{"TRICK_CXXFLAGS"} !~ /-O2/ ) {
$gte{"TRICK_CXXFLAGS"} =~ s/^\s*/-O2 / ;
}
}
elsif ( $gte{"TRICK_DEBUG"} eq "4" ) {
$gte{"TRICK_CFLAGS"} =~ s/-[gO]\d?(\s+|$)/-O3 / ;
if ($gte{"TRICK_CFLAGS"} !~ /-O3/ ) {
$gte{"TRICK_CFLAGS"} =~ s/^\s*/-O3 / ;
}
$gte{"TRICK_CXXFLAGS"} =~ s/-[gO]\d?(\s+|$)/-O3 / ;
if ($gte{"TRICK_CXXFLAGS"} !~ /-O3/ ) {
$gte{"TRICK_CXXFLAGS"} =~ s/^\s*/-O3 / ;
}
}
else {
$gte{"TRICK_CFLAGS"} =~ s/-[gO]\d?(\s+|$)// ;
$gte{"TRICK_CXXFLAGS"} =~ s/-[gO]\d?(\s+|$)// ;
}
}
$gte{"TRICK_CFLAGS"} =~ s/\s+$// ;
$gte{"TRICK_CXXFLAGS"} =~ s/\s+$// ;
# Add any external variables that the user wanted added
@externals = split / / , $gte{"TRICK_GTE_EXT"} ;
foreach (@externals) {
if ( exists $ENV{$_} ) {
$gte{$_} = $ENV{$_}
}
}
$ret = "" ;
# List of variables that we want the local_env value to override the environment
my %vars_override_env = qw( TRICK_CXXFLAGS 1 TRICK_CFLAGS 1) ;
# if arguments given print arguments, else print whole list
if ( $#args >= 0 ) {
if ( $args[0] eq "S_source") {
foreach $e (sort keys %gte) {
$ret .= " local_env[\"" . $e . "\"] = \"" . $gte{$e} . "\";\n";
$ret .= " setenv(\"" . $e . "\", local_env[\"" . $e . "\"].c_str(), ";
if ( exists $vars_override_env{$e} ) {
$ret .= "1";
} else {
$ret .= "0";
}
$ret .= ");\n";
}
$ret =~ s/,\n+$/\n/s ;
}
else {
foreach $e (@args) {
# print variable from gte
if (exists $gte{$e}) {
$ret .= $gte{$e} . "\n" ;
}
elsif (exists $ENV{$e}) {
# print variable from environment if not a trick variable
$ret .= $ENV{$e} . "\n" ;
}
}
}
if ( $args[0] =~ /^-e(.*)/ ) {
$search = $1 ;
if ($search eq "") {
$search = $args[1] ;
}
# print all variables in gte that match
foreach $e (sort keys %gte) {
if ( $e =~ /$search/ ) {
$ret .= $e . "=" . $gte{$e} . "\n" ;
}
}
}
}
else {
# print all variables in gte
foreach $e (sort keys %gte) {
$ret .= $e . "=" . $gte{$e} . "\n" ;
}
}
return $ret ;
}
1;