LinuxSir.cn,穿越时空的Linuxsir!

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

自动编译安装e17的perl脚本(对于使用deb包的有用)

[复制链接]
发表于 2005-10-26 15:37:20 | 显示全部楼层 |阅读模式
功能:
自动编译e17包 并且打成deb 然后自动安装deb包

选项
my $autobuilddir = 1;#如果是真的,那编译所有的目录,不然会弹出提示问你要不要编译某个目录
my $autobuild = 1; # 如果是真的自动编译这个目录下所有包,如果=0 每次都会问你要不要编译
my $autoinstall= 1; # 所有安装所有编译出来的包

目录文件写在e17install.log
my @libdirlist=(配置需要编译的库文件目录(e17/libs下的子目录)
my @appdirlist=配置需要编译的可执行文件目录(e17/apps下的子目录)
my @miscdirlist=(配置misc目录下需要编译的子目录


方便debian或是其它使用deb的用户安装和管理E17

e17自己的源码中已经有debian目录 并且可以使用dpkg-buildepackage来创建debian包
这个脚本所做的只是把这一切自动化而已
一个命令就可以放在那里让它自己跑

使用方法:
保存成inse17.pl 然后放在

e17 misc同级的目录下
也就是
$ls
inse17.pl
e17/libs/....
e17/apps/e
e17/apps/....
misc/....
然后使用
perl inse17.pl运行

PS:10.20日后的e17的新功能:
增加了efm 另外觉得更稳定了
今天晚上继续更新看看效果

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

  5. my $logfilehandle = new FileHandle ">e17install.log";
  6. my $autobuilddir = 1;#if true,then auto build all directory
  7. my $autobuild = 1; # if true,auto build all packages in a directory
  8. my $autoinstall= 1; # auto install deb packges
  9. #chdir("./e17/libs/");
  10. my @libdirlist=(
  11. 'edb',
  12. 'eet',
  13. 'imlib2',
  14. 'imlib2_loaders',
  15. 'evas',
  16. 'ecore',
  17. 'edje',
  18. 'epeg',
  19. 'epsilon',
  20. 'embryo',
  21. 'esmart',
  22. 'emotion',
  23. 'ewl',
  24. 'engrave');
  25. #'etox',
  26. chdir("../..") if(parsedirs(@libdirlist,"./e17/libs/"));


  27. my @appdirlist=(
  28. 'e',
  29. 'e_utils',
  30. 'entice',
  31. #'entrance',
  32. 'eclair',
  33. 'elicit',
  34. #'erss',
  35. 'examine',
  36. #'iconbar',
  37. #'e_modules'
  38. );
  39. chdir("../..") if(parsedirs(@appdirlist,"./e17/apps/"));

  40. my @miscdirlist=(
  41. 'engage',
  42. #'elapse'
  43. );
  44. chdir("..") if(parsedirs(@miscdirlist,"./misc/"));
  45. close($logfilehandle);







  46. sub parsedirs()
  47. {
  48. my @dirlist=@_;
  49. my $parentdir = pop(@dirlist);
  50. return 0 if(! -d $parentdir);
  51. return 0 if( (!$autobuilddir)
  52. && (!choseact("are you want to build dir:$parentdir\n")) );

  53. chdir($parentdir);
  54. system('rm -f *.deb *.dsc *.tar.gz *.changes');

  55. my $dir;
  56. foreach $dir (@dirlist) {
  57. next if( !(-d $dir) );
  58. chdir($dir);
  59. parsedir($dir);
  60. chdir("../");
  61. system('rm -f *.dsc *.tar.gz *.changes');
  62. }
  63. return 1;
  64. }

  65. sub parsedir()
  66. {
  67. my $pkg = $_[0];
  68. return if((!$autobuild) && (!choseact("are you want to build:$pkg\n")) );
  69. my $curpwd = qx(pwd);
  70. print "\n\n\n\t\tcur dir is:\n\t$curpwd\n";
  71. print $logfilehandle "\n\n\n\t\tcur dir is:\n\t$curpwd\n";
  72. chmod 755,'debian/rules' if(! -x 'debian/rules');
  73. chmod 755,'autogen.sh' if(! -x 'autogen.sh');

  74. #if you don't use deb,then you can call these two line
  75. #system('./autogen.sh --prefix=/usr;make;make uninstall;make install');
  76. #return ;
  77. system("make distclean >/dev/null 2>&1");
  78. system('cp debian/changelog.in debian/changelog >/dev/null 2>&1') if(! -f 'debian/changelog');

  79. open(MAKEFI,"dpkg-buildpackage -us -uc -rfakeroot 2>&1|") || die "exec fail\n";
  80. print $logfilehandle 'dpkg-buildpackage -us -uc -rfakeroot 2>&1'."\n";

  81. my @pkgs;
  82. my @devpkgs;
  83. my @libpkgs;
  84. my $line;
  85. print "\n";
  86. while($line=){
  87. print $logfilehandle $line;
  88. next if($line!~m/dpkg\-deb:\s+building\s+package\s+\`([^']+)\'\s+in\s+\`([^']+)\'/);

  89. print "\tpkg:[$1:\t$2]\n";
  90. my $pkg = $2;
  91. if($pkg=~m/dev/){
  92. push(@devpkgs,$pkg);
  93. }
  94. else{
  95. if($pkg=~m/\blib/){
  96. push(@libpkgs,$pkg);
  97. }
  98. else{
  99. push(@pkgs,$pkg);
  100. }
  101. }
  102. }
  103. close(MAKEFI);

  104. my @returnpkgs;
  105. push(@returnpkgs,@libpkgs,@devpkgs,@pkgs);
  106. if($#returnpkgs < 0){
  107. print "error no package found,build message is:\n";
  108. print $logfilehandle "error no package found,build message is:\n";
  109. print "\n\n";
  110. }
  111. else{
  112. my $pkgfile = join(" ",@returnpkgs);
  113. print "\n\t>>>>>>>>>\tdpkg -i $pkgfile\n\n";
  114. system("dpkg -i $pkgfile");
  115. }
  116. print "\n";
  117. }

  118. sub choseact()
  119. {
  120. print $_[0]."\nplease input yes or no [Y]\n";
  121. my $in=;
  122. if($in=~m/n/i){
  123. print "cancel\n";
  124. return 0;
  125. }
  126. print "\n";
  127. return 1;
  128. }
复制代码
发表于 2005-10-26 22:51:33 | 显示全部楼层
that's very cool!! I will give it a try.
回复 支持 反对

使用道具 举报

发表于 2005-10-26 23:04:25 | 显示全部楼层
再加上自动更新cvs的功能吧,呵呵
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-27 11:35:51 | 显示全部楼层
可以啊 只是自己家里没有上网所以没加上cvs自动更新
回复 支持 反对

使用道具 举报

发表于 2005-10-27 15:58:02 | 显示全部楼层
建议在用上auto-apt,自动解决依赖就更好了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-27 17:55:08 | 显示全部楼层
谢谢 回去看看auto-apt什么用 然后考虑一下

不过这样可能会要求auto-apt包吧

或是使用apt自动把所有依赖的包都列出来 检查哪个没有然后再编译
回复 支持 反对

使用道具 举报

发表于 2005-11-6 04:41:10 | 显示全部楼层
晕倒,今天有空一试,这个脚本跑不了,少贴了几个字符吧?
while($line=){
my $in=;

建议以附件形式发上来
回复 支持 反对

使用道具 举报

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

本版积分规则

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