Advertisement
overloop

butcher-debugrelease.pl

Oct 28th, 2015
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.11 KB | None | 0 0
  1. #!/usr/bin/perl
  2. use File::Find;
  3. use File::Basename;
  4. use File::Path qw(make_path remove_tree);
  5. use strict;
  6.  
  7. my ($sourceDir) = @ARGV;
  8.  
  9. my %srcs;
  10. sub findItem {
  11.   my $n = $_;
  12.   my %objSrc = (); # foo -> src/foo.cpp
  13.   my $p = $File::Find::name;
  14.   if ( -f && $p =~ /\.cpp$/ ) {
  15.       my $bn = basename($n,".cpp");
  16.       my $b = $bn;
  17.       my $i = 1;
  18.       while (exists($objSrc{$b})) {
  19.         $b = $bn . $i;
  20.         $i++;
  21.       }
  22.       $srcs{$b} = $p;
  23.   }
  24. }
  25.  
  26. sub dsts {
  27.   my ($dest,%s) = @_;
  28.   my %result = ();
  29.   for my $k (keys %s) {
  30.     $result{$k} = $dest . '/' . $k . ".o";
  31.   }
  32.   return %result;
  33. }
  34.  
  35. find(\&findItem, $sourceDir);
  36. my %debugDsts = dsts('debug',%srcs);
  37. my %releaseDsts = dsts('release',%srcs);
  38.  
  39. my @opts = ('CXX','CXXFLAGS_DEBUG','CXXFLAGS_RELEASE','INCPATH','LINK','LFLAGS_DEBUG','LFLAGS_RELEASE','BINARY_DEBUG','BINARY_RELEASE','LIBS','DEL_FILE');
  40. my %opts_ = ('CXX' => 'g++','LINK' => 'g++','DEL_FILE'=>'del /f ','CXXFLAGS_DEBUG' => '-g');
  41.  
  42. for my $opt (@opts) {
  43.   my $v = '';
  44.   if (exists($opts_{$opt})) {
  45.     $v = $opts_{$opt};
  46.   }
  47.   print $opt . "=" . $v . "\n";
  48. }
  49. print "\n";
  50.  
  51. my $debugObjects = join(" ", values %debugDsts);
  52. my $releaseObjects = join(" ", values %releaseDsts);
  53.  
  54. print 'all: $(BINARY_DEBUG) $(BINARY_RELEASE)' . "\n\n";
  55. print 'debug: $(BINARY_DEBUG)' . "\n\n";
  56. print 'release: $(BINARY_RELEASE)' . "\n\n";
  57.  
  58. print '$(BINARY_DEBUG): ' . $debugObjects . "\n";
  59. print "\t" . '$(LINK) $(LFLAGS_DEBUG) -o $(BINARY) ' . $debugObjects . ' $(LIBS)' . "\n\n";
  60.  
  61. print '$(BINARY_RELEASE): ' . $releaseObjects . "\n";
  62. print "\t" . '$(LINK) $(LFLAGS_RELEASE) -o $(BINARY) ' . $releaseObjects . ' $(LIBS)' . "\n\n";
  63.  
  64. for my $b (keys %srcs) {
  65.   print $debugDsts{$b} . ": " . $srcs{$b} . "\n";
  66.   print "\t" . '$(CXX) -c $(CXXFLAGS_DEBUG) $(INCPATH) -o $@ $<' . "\n\n";
  67. }
  68.  
  69. for my $b (keys %srcs) {
  70.   print $releaseDsts{$b} . ": " . $srcs{$b} . "\n";
  71.   print "\t" . '$(CXX) -c $(CXXFLAGS_RELEASE) $(INCPATH) -o $@ $<' . "\n\n";
  72. }
  73.  
  74. my $objectsWin = $debugObjects . ' ' . $releaseObjects;
  75. $objectsWin =~ s,/,\\,g;
  76.  
  77. print 'clean: ' . "\n\t" . '$(DEL_FILE) ' . $objectsWin;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement