#!/usr/bin/perl -w
#$Id: ident_flags,v 1.6 2005/06/29 01:02:46 jwhui Exp $
#@author Cory Sharp <cssharp@eecs.berkeley.edu>

use strict;

my $MaxNameLength = 16;

if( @ARGV == 0 ) {
  print "usage: ident_flags [program_name] (cache_file)\n";
  exit 0;
}

my $name = $ARGV[0];
my $time = sprintf( "0x%08x", `date +%s` );

(my $whoami = `whoami`) =~ s/\s//g;
(my $hostname = `hostname`) =~ s/\s//g;
my $uidhash = `echo "$name$time$whoami$hostname" | sha1sum`;
my $idhash = `echo "$whoami$hostname" | sha1sum`;
my $uid = ($uidhash =~/^(.{8})/) ? "0x$1" : 0;
my $id = ($idhash =~/^(.{8})/) ? "0x$1" : 0;

my @defs = ();
my $qname = "";
if( defined $name && $name !~ /^\s*$/ ) {
  ($qname = $name) =~ s/['"]//g;
  substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength;
  my @bytes = unpack( "C*", $qname );
  push( @defs, "-DIDENT_PROGRAM_NAME=\\\"$qname\\\"" );
}
if( defined $whoami && $whoami !~ /^\s*$/ ) {
  ($qname = $whoami) =~ s/['"]//g;
  substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength;
  my @bytes = unpack( "C*", $qname );
  push( @defs, "-DIDENT_USER_ID=\\\"$qname\\\"" );
}
if( defined $hostname && $hostname !~ /^\s*$/ ) {
  ($qname = $hostname) =~ s/['"]//g;
  substr( $qname, $MaxNameLength-1 ) = "" if length $qname >= $MaxNameLength;
  my @bytes = unpack( "C*", $qname );
  push( @defs, "-DIDENT_HOSTNAME=\\\"$qname\\\"" );
}
push( @defs, "-DIDENT_USER_HASH=${id}L" );
push( @defs, "-DIDENT_UNIX_TIME=${time}L" );
push( @defs, "-DIDENT_UID_HASH=${uid}L" );

print join(" ",@defs) . "\n";
