LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2175|回复: 9

E17自动安装脚本[2006/1/20]

[复制链接]
发表于 2006-1-20 12:51:17 | 显示全部楼层 |阅读模式
E17介绍:
一个快速的窗口管理器, 现在功能正在不断完善中,速度快, 轻量, 使用大量图形效果并且完全可以订制是它的特点
官方网站
www.enlightenment.org
资源站
www.get-e.org
中文翻译:
http://www.get-e.org/E17_User_Guide/Chinese/

旧的脚本在
http://www.linuxsir.cn/bbs/showthread.php?t=229286&page=3

新脚本功能:
(针对上版功能)
自动检查编译环境(autoconf,等有没有安装)
如果编译某个目录失败 ,如因为某个包依赖没有安装时, 会自动提示你
让你把依赖的包安装后敲 回车可以继续重编译这个目录
可以选择是不是从CVS下载源码
保存编译过程到build.log, 保存屏幕输出到screen.log 方便自己查找出错问题
默认自动编译deb包, 并且自动安装deb包
如果你不是使用debian系统, 那可以自动使用make;make install编译安装

另外如果使用xorg的, 如果报 依赖xlibs-dev的话 可以安装libx11-dev, 并且把 那个目录下的/debian/control文件中 xlibs-dev全部修改成libx11-dev
这样就可以编译通过了

这里只安装最基本的E17窗口管理器
如果想安装更多E17包,那可以修改my @e17objs =(内容, 把更多的目录添加到这里面


  1. #!/usr/bin/perl
  2. #
  3. use strict;
  4. use FileHandle;

  5. my  $autobuilddir   = 1;#   if true,then auto build all directory
  6. my  $autobuild            = 1;#   if true,auto build all packages in a directory
  7. my  $autocvs        = 0;#   if true, auto download source code from CVS
  8. my  $usedeb            = 1;#   if true, will create deb and install deb package,else use "make install" to install
  9. my @e17objs =(
  10.     ['e17/libs','../..',
  11.     'eet',
  12.     'evas',
  13.     'ecore',
  14.     'embryo'
  15.     ],
  16.     ['e17/apps','../..',
  17.     'e'
  18.     ],
  19. );

  20. my  $fd_build          = new FileHandle ">build.log";
  21. my  $fd_screen  = new FileHandle ">screen.log";

  22. check_debbuildenv();    # if you don't want to build deb package, comment this line
  23. get_cvs()       if($autocvs);
  24. do_install(@e17objs);

  25. close($fd_build);
  26. close($fd_screen);


  27. sub do_install(){
  28.     my @compileobjs = @_;
  29.     log_screen("\n\nstart build debian packages\n\n");
  30.     my $objs;
  31.     foreach $objs (@compileobjs){
  32.         my        @objarray   = @$objs;
  33.         my        $dir            = shift(@objarray);
  34.         my        $back_dir   = shift(@objarray);
  35.         if( ! -d $dir ){
  36.             log_screen("dir:$dir not exist,will skip compile it\n");
  37.             next;
  38.         }
  39.         next if( (!$autobuilddir)
  40.             && (!choseact("are you want to build dir:$dir\n")) );

  41.         log_screen("start parse:<<<<<        $dir  >>>>>: back:$back_dir\n");
  42.         chdir $dir;
  43.         system('rm -f *.deb *.dsc *.tar.gz *.changes');

  44.         my        $subdir;
  45.         foreach $subdir (@objarray){
  46.             if( !(-d $subdir) ){
  47.                 log_screen("dir:$subdir not exist,skip compile it\n");
  48.                 next;
  49.             }
  50.             chdir($subdir);
  51.             while( parsedir($subdir) ){}
  52.             $fd_build->autoflush(1);
  53.             log_screen("\n");
  54.             chdir("../");
  55.             system('rm -f *.dsc *.tar.gz *.changes');
  56.         }
  57.         chdir $back_dir;
  58.     }
  59. }




  60. sub parsedir()
  61. {
  62.     my $pkg        = $_[0];
  63.     log_screen("\n\nenter directory:".$pkg."\n");
  64.     return 0 if((!$autobuild) && (!choseact("are you want to build:$pkg\n")) );
  65.     my $curpwd        = qx(pwd);
  66.     chomp($curpwd);

  67.     $fd_build->autoflush(0);
  68.     log_screen("\tcur dir is:\n\t$curpwd\n");
  69.     log_screen("\trun:   dpkg-buildpackage -us -uc -rfakeroot 2>&1\n");

  70.     chmod 755,'debian/rules' if(! -x 'debian/rules');
  71.     chmod 755,'autogen.sh' if(! -x 'autogen.sh');
  72.     system("make distclean >/dev/null 2>&1");

  73.     if(!$usedeb){
  74. #if you don't use deb,then you can call these line
  75.             run_cmd('./autogen.sh --prefix=/usr');
  76.             run_cmd('make');
  77.             run_cmd('make uninstall');
  78.             run_cmd('make install');
  79.             return ;
  80.     }

  81.     system('cp debian/changelog.in debian/changelog >/dev/null 2>&1') if(! -f 'debian/changelog');

  82.     open(MAKEFI,"dpkg-buildpackage -us -uc -rfakeroot 2>&1|") || die "exec fail\n";
  83.     log_screen( 'dpkg-buildpackage -us -uc -rfakeroot 2>&1'."\n");

  84.     my @pkgs;
  85.     my $line;
  86.     while($line=<MAKEFI>){
  87.         my $notlog        = 1;
  88.         if($line=~m/\berror\b/i){
  89.             if($line!~m/dpkg-genchanges:\s+error:\s+cannot\s+open\s+\.dsc/){
  90.                 $notlog = 0;
  91.                 log_screen($line);
  92.             }
  93.         }
  94.         log_build( $line) if($notlog);

  95.         if($line=~m/\bUnmet\s+build\s+dependencies\b/i){
  96.             log_screen($line);
  97.             log_screen("are you want to install missing dependence then rebuild this package or skip build this package(default:skip)\n");
  98.             log_screen("press n to skip,else you press 'Y' after finish install missing packages\n");
  99.             return choseact("") ;
  100.         }
  101.         next if($line!~m/dpkg-deb:\s+building\s+package\s+\`([^']+)\'\s+in\s+\`([^']+)\'/);

  102.         log_screen("\tpkg:[$1:\t$2]\n");
  103.         push(@pkgs,$2);
  104.     }
  105.     close(MAKEFI);

  106.     if($#pkgs < 0){
  107.         log_screen("error no package found,build message is write to build.log file\n");
  108.     }
  109.     else{
  110.         my $pkgfile = join(" ",@pkgs);
  111.         log_screen( "\n>>>>>>>>>\n\tdpkg -i $pkgfile\n\n");
  112.         run_cmd("dpkg -i $pkgfile");
  113.     }
  114.     log_screen("\n");
  115.     return 0;
  116. }





  117. #
  118. #   choose user select
  119. #
  120. sub choseact()
  121. {
  122.     log_screen( $_[0]."\nplease input yes or no [Y]\n");
  123.     my $in=<STDIN>;
  124.     if($in=~m/n/i){
  125.         log_screen( "cancel\n");
  126.         return 0;
  127.     }
  128.     log_screen( "\n");
  129.     return 1;
  130. }


  131. #
  132. #        downlaod E17 source code from CVS
  133. #
  134. sub get_cvs()
  135. {
  136.     print   "get CVS source code\n";
  137.     print   "login CVS:,when need you input password,press return directly\n";
  138.     print   'cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment login'."\n";
  139.     system('cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment login');
  140.     print   'chech out E17:'."\n";
  141.     print   'cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co e17'."\n";
  142.     system('cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co e17');
  143.     print   'chech out Misc:'."\n";
  144.     print   'cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co misc'."\n";
  145.     system('cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co misc');
  146. }

  147. #
  148. #   check debian build env
  149. #
  150. sub check_debbuildenv()
  151. {
  152.         my @pkglist = qx(dpkg --get-selections);
  153.         my $lines   = join(':',@pkglist);

  154.         check_pkg($lines,"autoconf",1);
  155.         check_pkg($lines,"automake",1,"(version >=1.7)");
  156.         check_pkg($lines,"libtool",1);
  157.         check_pkg($lines,"pkg-config",1);

  158.         if($usedeb){
  159.                 check_pkg($lines,"fakeroot",1);
  160.                 check_pkg($lines,"dpkg-dev",1);
  161.         }

  162.         check_pkg($lines,"libxcursor-dev",0,"(it may need by ecore,if link ecore fail, please install it)");

  163.         log_screen("if you use xorg,then build script report xlibs-dev not install, you need to modify the {directory}/debian/control file, change xlibs-dev to libx11-dev\n");
  164. }
  165. sub check_pkg()
  166. {
  167.     my  ($pkglists,$pkgname,$exitmode,$version)=@_;
  168.     my  $exit   = 0;
  169.     $exit       = 1 if( $pkglists!~m/\b$pkgname[^:]*\s+install/);
  170.     if( $exit ){
  171.         log_screen("WARNNING: ") if(! $exitmode );
  172.         log_screen("you don't install $pkgname, please use \n\tapt-get install $pkgname\n to install it.$version \n");
  173.         die if( $exitmode );
  174.     }
  175. }



  176. #
  177. #        run a command,and log command output to screen.log
  178. #
  179. sub run_cmd()
  180. {
  181.     my $cmd        = $_[0];
  182.     my $fd;
  183.     open($fd,"$cmd 2>&1 |");
  184.     if( ! $fd ){
  185.         log_screen("exec $cmd fail,check if this command exist\n");
  186.         die;
  187.     }
  188.     my $line;
  189.     while($line=<$fd>){
  190.         log_screen($line);
  191.     }
  192. }

  193. #
  194. #        log screen output
  195. #
  196. sub log_screen()
  197. {
  198.     print        @_;
  199.     print        $fd_screen @_;
  200.     log_build(@_);
  201. }

  202. #
  203. #        log build result to build.log
  204. #
  205. sub log_build()
  206. {
  207.     print        $fd_build @_;
  208. }

复制代码
发表于 2006-1-22 16:05:30 | 显示全部楼层
你的sh检测仅适合deb吧,把检测部分去掉吧。

而且::::
  1. # cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment login
  2. Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/enlightenment
  3. CVS password:
  4. cvs [login aborted]: reading from server: Connection reset by peer
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-23 11:49:44 | 显示全部楼层
my  $usedeb            = 1;#   if true, will create deb and install deb package,else use "make install" to install

把它修改成 0 就可以不检测deb 而使用 autogen.sh make make install安装
回复 支持 反对

使用道具 举报

发表于 2006-1-23 12:38:11 | 显示全部楼层
E17 和 Emacs 的按键冲突的问题有没有优雅的解决方法?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-23 16:12:57 | 显示全部楼层
修改一下 E17的按键绑定吧

其它的没有好办法

因为是E17先拿到按键事件的
回复 支持 反对

使用道具 举报

发表于 2006-9-18 10:58:22 | 显示全部楼层
另外如果使用xorg的, 如果报 依赖xlibs-dev的话 可以安装libx11-dev, 并且把 那个目录下的/debian/control文件中 xlibs-dev全部修改成libx11-dev
这样就可以编译通过了

/debian/control这个文件在哪里呢,我怎么都找不到
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-18 18:56:43 | 显示全部楼层
对应的库的目录下
如 你cvs下载了 e17到当前目录
编译eet时出错

那文件就在
e17/libs/eet/debian目录下
回复 支持 反对

使用道具 举报

发表于 2006-9-18 21:39:15 | 显示全部楼层
问一下无双,是不是先去CVS下载,然后才运行你上面给出到脚本呢,我是直接运行脚本的,没有发现e17这个目录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-19 12:26:19 | 显示全部楼层
是先要到官方cvs下载源码的

然后再运行这个程序

我有个新脚本带自动下载cvs  源码功能的

晚上回去放上来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-20 08:41:08 | 显示全部楼层
// newe17.pl 2006/9/1

使用
perl newe17.pl --cvs 做cvs下载
使用 perl newe17.pl 做自动安装


  1. #!/usr/bin/perl
  2. #
  3. use strict;
  4. use FileHandle;
  5. use Getopt::Long;

  6. my  $versuffix            = "";   #        if you want to special the suffix to all deb package's versions,you can add to here,such as "-0527"

  7. #        cvs server address
  8. my  $cvsserver                = ":pserver:anonymous\@anoncvs.enlightenment.org:/var/cvs/e";

  9. #        if you use make to install,you can set build options
  10. my  $manualinsdir        ="/usr";        #        where install e17 to
  11. my  $manualinscflags        ='CFLAGS="-O3 -mtune=pentium4" '; # compile optimize




  12. my  $usedeb            = 1;    #   if true, will create deb and install deb package,else use "make install" to install
  13. my  $autobuilddir   = 1;    #   if true,then auto build all directory
  14. my  $autobuildsubdir= 1;    #   if true,auto build all packages in a directory
  15. my  $autocvs        = 0;    #   if true, auto download source code from CVS

  16. my  $builde17                = 0;        # if not set, default build all efl program
  17. my  $help                    = 0;
  18. my  $make                    = 0;
  19. my  $confirmdir                = 0;
  20. my  $confirmsubdir        = 0;
  21. my  $buildnext                = 0;
  22. GetOptions(
  23.     'cvs'   =>\$autocvs,
  24.     'e17'   =>\$builde17,
  25.     'help'  =>\$help,
  26.     'make'  =>\$make,
  27.     'deb'   =>\$usedeb,
  28.     'idir'        =>\$confirmdir,
  29.     'isubdir'        =>\$confirmsubdir,
  30.     'buildnext'        =>\$buildnext
  31. );
  32. usage()  if($help);
  33. $usedeb        = 0 if($make);
  34. $autobuilddir        = 0 if($confirmdir);
  35. $autobuildsubdir        = 0 if($confirmsubdir);

  36. my @e17objs =(
  37.     ['e17/libs','../..',
  38.     'eet',
  39.     'evas',
  40.     'ecore',
  41.     'embryo',
  42.     'edje'
  43.     ],
  44.     ['e17/apps','../..',
  45.     'e'
  46.     ],
  47. );
  48. my @eflobjs =(
  49.     ['e17/libs','../..',
  50.     'eet',
  51.     'edb',
  52.     'evas',
  53.     'ecore',
  54.     'embryo',
  55.     'imlib2',
  56.     'edje',
  57.     'epeg',
  58.     'epsilon',
  59.     'esmart',
  60.     'emotion',#        (note that you'll need to have xine-lib installed as emotion uses it)
  61.     'engrave',#        (this is currently needed for e_utils only)
  62.     'ewl'        #        (this is needed for some apps only)
  63.     ],
  64.     ['e17/proto','../..',
  65.     'etk'         #        (this is needed for some apps only)
  66.     ],
  67.     ['e17/apps','../..',
  68.     'e',
  69.     'entice',        #         (image viewer)
  70.     'entrance',#         (login manager)
  71.     #'eclair',        #         (media player)
  72.     'elicit',         #         (color picker/screen magnifier)
  73.     'examine'
  74.     ],
  75.     ['misc','..',
  76.     'engage',        #         (standalone dockbar and E17 module)
  77.     'erss',        #         (RSS feed application that does not work correctly in E17)
  78.     'embrace' #         (mail checker and E17 module)
  79.     ],
  80.     ['misc','..',
  81.     'entropy',#         (file manager)
  82.     'exhibit'        #         (image viwer)
  83.     ],
  84. );

  85. my  $fd_build             = new FileHandle ">build.log";
  86. my  $fd_screen          = new FileHandle ">screen.log";
  87. my  $useobjs                = \@eflobjs;
  88. $useobjs                = \@e17objs if( $builde17 );

  89. print        "\nthe script output will redefine to\n\tbuild.log\n,the screen output will redefine to \n\tscreen.log\nif you want to check fail reason, please open these two files\n";

  90. if($autocvs){
  91.     get_cvs_dirs(@$useobjs);
  92.     die;
  93. }

  94. check_debbuildenv();    # if you don't want to build deb package, comment this line
  95. do_install(@$useobjs);

  96. close($fd_build);
  97. close($fd_screen);



  98. sub usage{
  99. print   "inse17.pl options:\n";
  100. print   "\t--cvs        only do cvs update,then exit\n";
  101. print   "\t--e17        only build E17 windows manager,default will build all EFL program\n";
  102. print   "\t--make        use "$manualinscflags autogen.sh --prefix=$manualinsdir;make;make install" to build and install the E17\n";
  103. print   "\t--deb        build deb pkg then install\n";
  104. print   "\t--idir        when build every big dir,make sure first\n";
  105. print   "\t--isubdir        when build every sub dir,make sure first\n";
  106. print   "\t--buildnext        if you want to skip the first build dir,use this options\n";
  107. print   "\t--help        show help file\n";
  108. print   "default is --deb\nif you want to sepcial build packages,you can edit \@eflobjs array\n";
  109. die;
  110. }

  111. sub do_install(){
  112.     my @compileobjs = @_;
  113.     log_screen("\n\nstart build debian packages\n\n");
  114.     my $objs;
  115.     foreach $objs (@compileobjs){
  116.         my   @objarray   = @$objs;
  117.         my   $dir       = shift(@objarray);
  118.         my   $back_dir   = shift(@objarray);
  119.         if( ! -d $dir ){
  120.             log_screen("dir:$dir not exist,will skip compile it\n");
  121.             next;
  122.         }
  123.         next if( ((!$autobuilddir) || $buildnext )
  124.             && (!choseact("are you want to build dir:$dir\n")) );

  125.         log_screen("start parse:<<<<<   $dir  >>>>>: back:$back_dir\n");
  126.         chdir $dir;
  127.         system('rm -f *.deb *.dsc *.tar.gz *.changes');

  128.         my   $subdir;
  129.         foreach $subdir (@objarray){
  130.             if( !(-d $subdir) ){
  131.                 log_screen("dir:$subdir not exist,skip compile it\n");
  132.                 next;
  133.             }
  134.             chdir($subdir);
  135.             while( parsedir($subdir) ){}
  136.             $fd_build->autoflush(1);
  137.             log_screen("\n");
  138.             chdir("../");
  139.             system('rm -f *.dsc *.tar.gz *.changes');
  140.         }
  141.         chdir $back_dir;
  142.     }
  143. }




  144. sub parsedir()
  145. {
  146.     my $pkg   = $_[0];
  147.     log_screen("\n\nenter directory:".$pkg."\n");
  148.     if( ((!$autobuildsubdir) || $buildnext)
  149.         && (!choseact("are you want to build:$pkg\n")) ){
  150.         return 0;
  151.     }

  152.     $buildnext  = 0;

  153.     my $curpwd   = qx(pwd);
  154.     chomp($curpwd);

  155.     $fd_build->autoflush(0);
  156.     log_screen("\tcur dir is:\n\t$curpwd\n");

  157.     chmod 755,'debian/rules' if(! -x 'debian/rules');
  158.     chmod 755,'autogen.sh' if(! -x 'autogen.sh');

  159.     if(!$usedeb){
  160. #if you don't use deb,then will call these line
  161.         system("make distclean >/dev/null 2>&1");
  162.         run_cmd($manualinscflags.'./autogen.sh --prefix='.$manualinsdir);
  163.         run_cmd('make');
  164.         run_cmd('make uninstall');
  165.         run_cmd('make install');
  166.         return ;
  167.     }


  168.     run_cmd($manualinscflags."./autogen.sh --prefix=/usr",1);

  169.     system("make distclean >/dev/null 2>&1");
  170.     mk_changelog();
  171.     log_screen("\trun:   dpkg-buildpackage -us -uc -rfakeroot 2>&1\n");
  172.     open(MAKEFI,"dpkg-buildpackage -us -uc -rfakeroot 2>&1|") || die "exec fail\n";
  173.     log_screen( 'dpkg-buildpackage -us -uc -rfakeroot 2>&1'."\n");

  174.     my @pkgs;
  175.     my $line;
  176.     while($line=<MAKEFI>){
  177.         my $notlog   = 1;
  178.         if($line=~m/\berror\b/i){
  179.             if($line!~m/dpkg-genchanges:\s+error:\s+cannot\s+open\s+\.dsc/
  180.                 && $line!~m/\(ignored\)/ ){
  181.                 $notlog = 0;
  182.                 log_screen($line);
  183.             }
  184.         }
  185.         log_build( $line) if($notlog);

  186.         if($line=~m/\bUnmet\s+build\s+dependencies\b/i){
  187.             log_screen($line);
  188.             log_screen("are you want to install missing dependence then rebuild this package or skip build this package\n");
  189.             log_screen("if the dependence is refer to a deprecate package,you can edit $curpwd/debian/control file to remove or modify the dependence\n");
  190.             log_screen("press n to skip,else you press 'Y' after finish install missing packages\n");
  191.             return choseact("") ;
  192.         }
  193.         next if($line!~m/dpkg-deb:\s+building\s+package\s+\`([^']+)\'\s+in\s+\`([^']+)\'/);

  194.         log_screen("\tpkg:[$1:\t$2]\n");
  195.         push(@pkgs,$2) if( $2!~m/debug/);
  196.     }
  197.     close(MAKEFI);

  198.     my $pkgfile = join(" ",@pkgs);
  199.     chomp($pkgfile);
  200.     if( $pkgfile ){
  201.         run_cmd("dpkg -i $pkgfile");
  202.     }
  203.     else{
  204.         log_screen("error no package found,build message is write to build.log file\n");
  205.     }

  206.     log_screen("\n");
  207.     return 0;
  208. }





  209. #
  210. #   choose user select
  211. #
  212. sub choseact()
  213. {
  214.     log_screen( $_[0]."\nplease input yes or no [Y]\n");
  215.     my $in=<STDIN>;
  216.     if($in=~m/n/i){
  217.         log_screen( "cancel\n");
  218.         return 0;
  219.     }
  220.     log_screen( "\n");
  221.     return 1;
  222. }


  223. #
  224. #   downlaod E17 source code from CVS
  225. #
  226. sub get_cvs_dirs()
  227. {
  228.     my @dirs = @_;
  229.     log_screen("\n\nstart get CVS sourcecode\n\n");
  230.     log_screen("cvs -d$cvsserver login\n");
  231.     system("cvs -d$cvsserver login");
  232.     log_screen('check out E17:'."\n");
  233.     my $objs;
  234.     foreach $objs (@dirs){
  235.         my   @objarray   = @$objs;
  236.         my   $dir       = shift(@objarray);
  237.         shift(@objarray);

  238.         log_screen("start checkout:<<<<<   $dir  >>>>>\n");

  239.         my   $subdir;
  240.         foreach $subdir (@objarray){
  241.             log_screen("cvs -z3 -d$cvsserver co $dir/$subdir\n");
  242.             system("cvs -z3 -d$cvsserver co $dir/$subdir > /dev/NULL");
  243.         }
  244.     }
  245. }


  246. #
  247. #   check debian build env
  248. #
  249. sub check_debbuildenv()
  250. {
  251.     my @pkglist = qx(dpkg --get-selections);
  252.     my $lines   = join(':',@pkglist);

  253.     check_pkg($lines,"autoconf",1);
  254.     check_pkg($lines,"automake",1,"(version >=1.7)");
  255.     check_pkg($lines,"libtool",1);
  256.     check_pkg($lines,"pkg-config",1);

  257.     if($usedeb){
  258.         check_pkg($lines,"fakeroot",1);
  259.         check_pkg($lines,"dpkg-dev",1);
  260.     }

  261.     check_pkg($lines,"libxcursor-dev",0,"(it may need by ecore,if link ecore fail, please install it)");

  262.     log_screen("if you use xorg and the build script report xlibs-dev not install, you need to modify the {directory}/debian/control file, replace xlibs-dev with xorg-dev\n");
  263. }
  264. sub check_pkg()
  265. {
  266.     my  ($pkglists,$pkgname,$exitmode,$version)=@_;
  267.     my  $exit   = 0;
  268.     $exit       = 1 if( $pkglists!~m/\b$pkgname[^:]*\s+install/);
  269.     if( $exit ){
  270.         log_screen("WARNNING: ") if(! $exitmode );
  271.         log_screen("you don't install $pkgname, please use \n\tapt-get install $pkgname\n to install it.$version \n");
  272.         die if( $exitmode );
  273.     }
  274. }







  275. #
  276. #   run a command,and log command output to screen.log
  277. #
  278. sub run_cmd()
  279. {
  280.     my ($cmd,$hide)   = @_;
  281.     my $fd;
  282.     open($fd,"$cmd 2>&1 |");
  283.     log_screen("\trun:\t$cmd\n");
  284.     if( ! $fd ){
  285.         log_screen("\trun $cmd fail,check build.log to look the fail\n");
  286.         die;
  287.     }
  288.     my $line;
  289.     while($line=<$fd>){
  290.         if($hide){
  291.             log_build($line);
  292.         }
  293.         else{
  294.             log_screen($line);
  295.         }
  296.     }
  297. }




  298. sub mk_changelog()
  299. {
  300.     my        $fcontrl;
  301.     open($fcontrl,"configure");
  302.     if( ! $fcontrl ){
  303.         log_screen("open configure to read version info fails\n");
  304.         return ;
  305.     }

  306.     my        $line;
  307.     my        $ver;
  308.     my        $stat        = 0;
  309.     while($line=<$fcontrl>){
  310.         if($line=~m/^\s*PACKAGE=\s*/){
  311.             $stat   = 1;
  312.             next;
  313.         }

  314.         if($stat == 1 ){
  315.             if( $line=~m/^\s*VERSION\s*=\s*(\w.*)/i){
  316.                 $ver        = $1;
  317.                 chomp($ver);
  318.                 last;
  319.             }
  320.             $stat   = 0;
  321.         }
  322.     }

  323.     close($fcontrl);
  324.     if(!$ver){
  325.         log_screen("get version fail\n");
  326.         return ;
  327.     }
  328.     log_screen("\tversion number is:$ver\n");

  329.     my        $fi;
  330.     my        $fo;
  331.     open($fi,"debian/changelog.in");
  332.     open($fo,">debian/changelog");

  333.     $line   = <$fi>;

  334.     $line   =~s/\@VERSION\@/$ver$versuffix/;
  335.     print   $fo $line;
  336.     while($line=<$fi>){
  337.         print        $fo $line;
  338.     }
  339.     close($fi);
  340.     close($fo);
  341. }






  342. #
  343. #   log screen output
  344. #
  345. sub log_screen()
  346. {
  347.     print   @_;
  348.     print   $fd_screen @_;
  349.     log_build(@_);
  350. }

  351. #
  352. #   log build result to build.log
  353. #
  354. sub log_build()
  355. {
  356.     print   $fd_build @_;
  357. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表