home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 3 / AACD03.BIN / AACD / Programming / sofa / archive / SmallEiffel.lha / SmallEiffel / contrib / edb / sec < prev   
Encoding:
Text File  |  1999-06-05  |  3.1 KB  |  121 lines

  1. #!/usr/local/bin/perl
  2. #
  3. #$gc =   "";      #-- No GC
  4. $gc =   "b";      #-- SmallEiffel builtin gc
  5. #$gc =   "c";     #-- Conservative gc lib
  6.  
  7. $HOME = $ENV{'HOME'};
  8. $ENV{'SmallEiffel'} = "$HOME/SmallEiffel/";
  9. $ENV{'PATH'} = "$HOME/SmallEiffel/bin:/usr/local/bin:/bin:/usr/bin:$HOME/bin";
  10. $e_flags  = "-require_check";
  11. $dbg_flags = "-g";
  12.  
  13. if ($gc eq "b") {
  14.     $ld_flags = "-z";
  15.     $gc_flags = "";
  16.  
  17. } elsif($gc eq "c") {
  18.     $c_flags  = "-I/usr/local/include";
  19.     $ld_flags = "-z /user/local/lib/libgc.a";
  20.     $gc_flags  = " -no_gc";
  21.  
  22. } else {
  23.     $gc_flags  .= " -no_gc";
  24. }
  25.  
  26. mkdir("A",0755); #prepare boost souce dir
  27. mkdir("B",0755); #prepare orginal source dir
  28. mkdir("C",0755); #prepare converted source dir
  29. $debug = 1;
  30. $target = shift(@ARGV);
  31. $root   = shift(@ARGV);
  32. if(!$target) {
  33.     $help++;
  34. } else {
  35.     if(!$root) {
  36.         $root = $target;
  37.     }
  38.     if(@ARGV) {
  39.     $e_flags = "";
  40.     while($fl = shift(@ARGV)) {
  41.         if($fl =~ /^-?hel/) {$help++;}
  42.         elsif($fl =~ /^-?deb/) {$e_flags = "-debug_check";}
  43.         elsif($fl =~ /^-?all/) {$e_flags = "-all_check";}
  44.         elsif($fl =~ /^-?loo/) {$e_flags = "-loop_check";}
  45.         elsif($fl =~ /^-?inv/) {$e_flags = "-invariant_check";}
  46.         elsif($fl =~ /^-?ens/) {$e_flags = "-ensure_check";}
  47.         elsif($fl =~ /^-?req/) {$e_flags = "-require_check";}
  48.         elsif($fl =~ /^-?no/)  {$e_flags = "-no_check";}
  49.         elsif($fl =~ /^-?boo/) {$e_flags = "-boost";}
  50.         elsif($fl =~ /^-?opt/) {$e_flags = "-boost";$dbg_flags = "-g -O";}
  51.         elsif($fl =~ /^-?ver/) {$e_flags .= " -verbose";}
  52.         elsif($fl =~ /^-c/)    {$c = shift(@ARGV); $e_flags .= " -cecil $c.ce"; $extra .= " $c.c";}
  53.         elsif($fl =~ /^[^\/].*.o$/) {$rest .= " ../$fl";}
  54.         else {$rest .= " $fl";}
  55.     }
  56.     }
  57. }
  58. if($help) {
  59.     print "Usage: sec target root [-daliernbO]\n";
  60.     exit;
  61. }
  62. if(-f $target) {
  63.     $target_age = -M $target;
  64. } else {
  65.     $target_age = 10000000;
  66. }
  67.  
  68.  
  69. chomp($cwd = `pwd`);
  70. opendir(DIR,$cwd);
  71. @sources = grep(/.e$/,readdir(DIR));
  72. @new_sources = grep {(-M $_) < $target_age} @sources;
  73. closedir(DIR);
  74.  
  75. if(@new_sources) {
  76.     do_command("compile_to_c $e_flags $gc_flags -o $target $root make");
  77.     opendir(DIR,$cwd);
  78.     @cfiles = grep {(-M $_) < $target_age} grep(/^$root\d*.[ch]$/,readdir(DIR));
  79.     closedir(DIR);
  80.     if(!@cfiles) { exit; }
  81.     if($e_flags ne "-boost") {
  82.         $dir = "C";
  83.     do_command("add-line-directive $gc @cfiles");
  84.     } else {
  85.         $dir = "A";
  86.     do_command("cat /usr/local/include/gc-inc >>$root.h");
  87.     do_command("move-if-changed @cfiles A");
  88.     unlink @cfiles;
  89.     }
  90.     if($extra) {
  91.     do_command("gcc -ansi -c $extra");
  92.     $extra =~ s?(\S+).c?../$1.o?;
  93.     }
  94.     chdir $dir;
  95.     @new_cfiles = grep(/^$root\d+.c$/,@cfiles);
  96.     @new = ();
  97.     foreach $s (@new_cfiles) {
  98.     $o = $s;
  99.     $o =~ s/\.c$/.o/;
  100.     if(!-f $o || (-M $o) > (-M $s)) {
  101.         push(@new,$s);
  102.     }
  103.     }
  104.     $ret = 0;
  105.     if(@new) {
  106.     $ret = do_command("gcc -ansi $dbg_flags $c_flags -c @new");
  107.     }
  108.  
  109.     if(!$ret) {
  110.     @objects = grep{s/(.*)\.c$/$1.o/} @cfiles;
  111.     do_command("gcc -o ../$target $dbg_flags @objects $extra $ld_flags $rest -lm");
  112.     }
  113. }
  114.  
  115. sub do_command {
  116.     my($com) = @_;
  117.     print "$com\n" if $debug;
  118.     $ret = system($com);
  119.     return $ret;
  120. }
  121.