⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genmake.pl

📁 mpeg4编解码器
💻 PL
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl#********************************************************#* Some code. Copyright (C) 2003 by Pascal Massimino.   *#* All Rights Reserved.      (http://skal.planet-d.net) *#* For Educational/Academic use ONLY. See 'LICENSE.TXT'.*#********************************************************########################################################  Makefile generator (=>./makefile.all)## This is a "script-velu-qui-fait-tout" (tm)## Not really finished (especially .dsp and .so stuff)#######################################################$root_dir = "..";$src_dir = "$root_dir/src";$inc_dir = "$root_dir/include";$config_file = "./PROJECT";$makefile = "./makefile.all";$doctxt = "../doc/files.txt";@Ex_Bin;@Ex_Src;@Ex_Dep;@Ex_Flag;@Ex_Type;@Shared_Bin;@Shared_Bin_So;@Shared_Src;@Shared_Flag;@Shared_Link;%Spc_Flags;@Libs_Flags;@Libs_so_link;%Libs_src_dirs;###########################################         read config file            ###########################################sub parse_example{  my $elm;  push(@Ex_Bin, @_[0]);    foreach $elm (split(' ', @_[1])) { push(@Ex_Src, $elm); }   push( @Ex_Src,";");  foreach $elm (split(' ', @_[2])) { push(@Ex_Dep, $elm); }  push( @Ex_Dep,";");  if (@_[3]) {    foreach $elm (split(' ', @_[3])) { push( @Ex_Flag, "\$(DEF)$elm" ); }    push( @Ex_Flag,";");  }  push(@Ex_Type, @_[4]);}sub parse_shared  # $name, $src, $flag, $deps{  my @a = split(' ', @_[0]);  push(@Shared_Bin, @a[0]);  push(@Shared_Bin_So, "@a[0].so");  my $elm;  foreach $elm (split(' ', @_[1])) { push(@Shared_Src, $elm); }  push( @Shared_Src,";");  foreach $elm (split(' ', @_[2])) { push(@Shared_Flag, "\$(DEF)$elm"); }  push( @Shared_Flag,";");  foreach $elm (split(' ', @_[3])) { push(@Shared_Link, "$elm"); }  push( @Shared_Link,";");}#########################################sub read_config_file {  my $line;  open(FILES,"$config_file") || die( "Can't open $config_file file.\n");  while($line=<FILES>)  {    chomp $line;    my @lines = split( '#', $line);    $line = $lines[0];    if (!$line) { next; }    if (!split(' ', $line)) { next; }    if ($line =~ /^\s*example\s+(\w+)\s*:\s*(\w*)\s*:\s*([\w\s]*)\s*:\s*(\w*)/) {#      print "example = [$1][$2][$3][$4]\n";      parse_example($1, $2, $3, $4, 0);    }    elsif ($line =~ /^\s*util\s+(\w+)\s*:\s*([\w\s]*)\s*:\s*([\w\s]*)\s*:\s*(\w*)/) {#      print "util = [$1][$2][$3][$4]\n";      parse_example($1, $2, $3, $4, 1);    }    elsif ($line =~ /^\s*shared\s+(\w+)\s*:\s*([\w\s\/\.]+)\s*:\s*(\w*)\s*:\s*([\w\s]*)/) {      parse_shared($1, $2, $3, $4);    }    elsif ($line =~ /^\s*exclude\s+([\w\.]+)\s*/) {      @Line = split( ' ', $1);      @Exclude{@Line} = 1;    }    elsif ($line =~ /^\s*conditional\s+(\w+)\s*/) {      @Line = split( ' ', $1);      my $obj = @Line[0];       @Conditional_Flag{$obj} = @Line[1];      @Conditional_Value{$obj} = @Line[2];    }    elsif ($line =~ /^\s*include\s+(\w+)\s*/) {      @Line = split( ' ', $1);      push(@include_dir,"$root_dir/@Line[0]");    }    elsif ($line =~ /^\s*flag\s+([\w\.]+)\s+(\w*)/) {      my $src = $1;#      print "special flag '$2' for source '$src'.\n";      my $elm;      foreach $elm (split( ' ',$2)) { @Spc_Flags{$src} .= "\$(DEF)$elm "; }    }    elsif ($line =~ /^\s*lib\s+(\w+)\s*:\s*(\w+)\s*:\s*([\w\s\/,\(\)\$]+)\s*:\s*(\w*)\s*:\s*([\w\s]*)/) {#      print "lib = [$1][$2][$3][$4][$5]\n";      my @Line;      @Line = split( ' ', $1);      my $lib = $Line[0];      push(@libs, $lib);      @Line = split( ' ', $2);      @libs_label{$lib} = $Line[0];      @Line = split( ', ', $3 );      $line = join( ",", @Line );      my @List = split( ' ', $line );      @Libs_src_dirs{$lib} = $List[0];      while(@Line) {        my @idir = split( ' ', @Line[0]);        $idir[0] = "$src_dir/$idir[0]";        push(@include_dir, $idir[0]);        shift @Line;      }      if ($4) {        @Line = split( ' ', $4);        @Libs_Flags{$lib} = $Line[0];      }      if ($5) {        @Libs_so_link{$lib} = $5;      }    }    else {      die( "unrecognized entry directive '$line'\n" );    }  }  close FILES;}###########################################      generation of makefile         ###########################################sub write_cpp_entry{  my $path = @_[0]; shift @_;  my $src = @_[0]; shift @_;  my $cpp = "$path$src.\$(CPP)";  my $obj = "\$(OBJ_OUTPUT_DIR)$src@_[0].\$(O)"; shift @_;  print OUT "$obj: $cpp\n";  print OUT "\t\$(CC) \$(CC_FLAGS) $cpp \$(OUT) $obj";  while(@_[0]) { print OUT " @_[0]"; shift @_; }  my $name = "$src.cpp";  if (@Spc_Flags{$name}) { print OUT " @Spc_Flags{$name}"; }  print OUT "\n\n";}sub write_asm_entry{  my $path = @_[0]; shift @_;  my $src = @_[0]; shift @_;  my $asm = "$path$src.\$(ASM)";  my $obj = "\$(OBJ_OUTPUT_DIR)$src.\$(O)"; shift @_;  print OUT "$obj: $asm\n";  print OUT "\t\$(NASM) \$(NASM_FLAGS) $asm -o $obj\n";  print OUT "\n\n";}#########################################sub write_cpp_so_entry{  my $src = @_[0]; shift @_;  my @toto = split('/', $src); my $src2 = @toto[$toto-1];  my $cpp = "\$(LIB_SRC_DIR)$src.\$(CPP)";  my $obj = "\$(LIB_SO_OUTPUT_DIR)$src2@_[0].\$(O)"; shift @_;  print OUT "$obj: $cpp\n";  print OUT "\t\$(CC) \$(CC_FLAGS) $cpp \$(OUT) $obj";  while(@_[0]) { print OUT " @_[0]"; shift @_; }  my $name = "$src2.cpp";  if (@Spc_Flags{$name}) { print OUT " @Spc_Flags{$name}"; }  print OUT "\n\n";}sub write_asm_so_entry{  my $src = @_[0]; shift @_;  my @toto = split('/', $src); my $src2 = @toto[$toto-1];  my $asm = "\$(LIB_SRC_DIR)$src.\$(ASM)";  my $obj = "\$(LIB_SO_OUTPUT_DIR)$src2@_[0].\$(O)"; shift @_;  print OUT "$obj: $asm\n";  print OUT "\t\$(NASM) \$(NASM_FLAGS) $asm \$(OUT) $obj\n";#  while(@_) { print OUT " @_[0]"; shift @_; }  print OUT "\n\n";}sub write_so_entry  # $so_name, @Src, ";", @Links{    my $shared = @_[0]; shift @_;  my @a = split( '/', $shared); $shared = @a[$a-1];  my @objs;  my $i = 0;  while(@_) {    if (@_[0] eq ";") { shift @_; last; }    @a = split( '/', @_[0]); my $src = @a[$a-1];    if ($src =~ /(\w+)\.asm$/ ) {      push @objs, " \$(LIB_SO_OUTPUT_DIR)$1\_so.\$(O)";    }    else {      push @objs, " \$(LIB_SO_OUTPUT_DIR)$src\_so.\$(O)";    }    $i++;    if (($i&3)==3) { push @objs, "\\\n  "; }    shift @_;  }  print OUT "$shared.so: @objs\n";  print OUT "\t\$(LDSO) \$(OUT) \$(LIB_SO_OUTPUT_DIR)$shared.\$(SO) \\\n";  print OUT "\t @objs\\\n\t ";  while(@_[0]) {    my $link = @_[0];    print OUT "\$(LIBINC)$link ";    shift @_;  }  print OUT "\\\n\t \$(LDSO_FLAGS)\n";  print OUT "\n\n";}sub is_excluded{  if (@Exclude{@_[0]}==1) { return 1; }  return 0;}sub write_lib_entry   # $dir, $lib, $Nb{  my $dir = @_[0];  my $lib = @_[1];  my $Nb  = @_[2];  if (not -d "$dir") {    die( "Directory $dir does not exist\n" );  }  opendir (DIR, $dir) || die ("Cannot opendir $dir\n");  my @cpp_objs_cond;  my @asm_objs_cond;  while ($file=readdir(DIR)) {    if ($file =~ /(\w+)\.cpp$/) {      if (@Conditional_Flag{"$1.cpp"}) {        push(@cpp_objs_cond, $1);        next;      }      if (@Exclude{"$1.cpp"}==1) {        print "    excluding file '$1.cpp'\n";        next;      }      push(@cpp_objs,$1);    }    elsif ($file =~ /(\w+)\.asm$/) {       if (@Conditional{"$1.asm"}) {         my $flag = @Conditional_Flag{"$1.asm"};        my $val = @Conditional_Value{"$1.asm"};        push(@asm_objs_cond, $1);        next;      }      if (@Exclude{"$1.asm"}==1) {        print "    excluding file '$1.asm'\n";        next;      }      push(@asm_objs,$1);    }    elsif ($file eq ".") { next; }    elsif ($file eq "..") { next; }    elsif ($file =~ /.+.h/) { next; }    else { print "     ignoring file '$file'\n"; }  }  closedir DIR;  my $flag = @Libs_Flags{$lib};  if ($flag) {    if ($flag =~ /!(\w+)/) {      print OUT "ifndef $1\n\n";    }    else {      print OUT "ifdef $flag\n\n";    }  }        ##### regular cpp compilation #####  my $name_OBJ = "$lib\_OBJ$Nb";  print OUT "$name_OBJ = ";  my @objs = @cpp_objs;  while(@objs) {    print OUT "\\\n";    print OUT "  \$(OBJ_OUTPUT_DIR)@objs[0].\$(O)\t\t";    shift @objs;  }  print OUT "\n\n";        ##### conditional cpp compilation #####  while(@cpp_objs_cond) {    my $obj = @cpp_objs_cond[0];    my $f = "$obj.cpp";    push(@cpp_objs, $obj);    print OUT "ifeq (\$(@Conditional_Flag{$f}),@Conditional_Value{$f})\n";    print OUT "$name_OBJ += \$(OBJ_OUTPUT_DIR)$obj.\$(O)\n";    print OUT "endif\n";    shift @cpp_objs_cond;  }  print OUT "\n";        ##### regular asm compilation #####  my $name_ASM = "$lib\_OBJ_ASM$Nb";  print OUT "ifdef USE_ASM\n";  print OUT "$name_ASM = ";  my @objs = @asm_objs;  while(@objs) {    print OUT "\\\n";    print OUT "  \$(OBJ_OUTPUT_DIR)@objs[0].\$(O)\t\t";    shift @objs;  }  print OUT "\n";        ##### conditional asm compilation #####  while(@asm_objs_cond) {    my $obj = @asm_objs_cond[0];    my $f = "$obj.asm";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -