|
|
发表于 2006-3-14 21:06:13
|
显示全部楼层
使用下面的脚本编译过 没问题
不过今天cvs一直登录不上 无法下载最新代码
你可以试试看能不能成功
如果安装成功 然后想安装全部的efl程序的话可以把
do_install(@e17objs);
修改成
do_install(@eflobjs);
- #!/usr/bin/perl
- #
- use strict;
- use FileHandle;
- my $autobuilddir = 1; # if true,then auto build all directory
- my $autobuild = 1; # if true,auto build all packages in a directory
- my $autocvs = 0; # if true, auto download source code from CVS
- my $usedeb = 0; # if true, will create deb and install deb package,else use "make install" to install
- my @e17objs =(
- ['e17/libs','../..',
- 'eet',
- 'evas',
- 'ecore',
- 'embryo'
- ],
- ['e17/apps','../..',
- 'e'
- ],
- );
- my @eflobjs =(
- ['e17/libs','../..',
- 'eet',
- 'edb',
- 'evas',
- 'ecore',
- 'embryo',
- 'imlib2',
- 'edje',
- 'epeg',
- 'epsilon',
- 'esmart',
- 'emotion',# (note that you'll need to have xine-lib installed as emotion uses it)
- 'engrave',# (this is currently needed for e_utils only)
- 'ewl', # (this is needed for some apps only)
- 'etox'
- ],
- ['e17/proto','../..',
- 'etk' # (this is needed for some apps only)
- ],
- ['e17/apps','../..',
- 'e',
- 'entice', # (image viewer)
- 'entrance',# (login manager)
- 'eclair', # (media player)
- 'elicit' # (color picker/screen magnifier)
- ],
- ['misc','..',
- 'engage', # (standalone dockbar and E17 module)
- 'erss', # (RSS feed application that does not work correctly in E17)
- 'embrace' # (mail checker and E17 module)
- ],
- ['misc','..',
- 'entropy',# (file manager)
- 'exhibit' # (image viwer)
- ],
- );
- my $fd_build = new FileHandle ">build.log";
- my $fd_screen = new FileHandle ">screen.log";
- check_debbuildenv(); # if you don't want to build deb package, comment this line
- get_cvs() if($autocvs);
- do_install(@e17objs);
- close($fd_build);
- close($fd_screen);
- sub do_install(){
- my @compileobjs = @_;
- log_screen("\n\nstart build debian packages\n\n");
- my $objs;
- foreach $objs (@compileobjs){
- my @objarray = @$objs;
- my $dir = shift(@objarray);
- my $back_dir = shift(@objarray);
- if( ! -d $dir ){
- log_screen("dir:$dir not exist,will skip compile it\n");
- next;
- }
- next if( (!$autobuilddir)
- && (!choseact("are you want to build dir:$dir\n")) );
- log_screen("start parse:<<<<< $dir >>>>>: back:$back_dir\n");
- chdir $dir;
- system('rm -f *.deb *.dsc *.tar.gz *.changes');
- my $subdir;
- foreach $subdir (@objarray){
- if( !(-d $subdir) ){
- log_screen("dir:$subdir not exist,skip compile it\n");
- next;
- }
- chdir($subdir);
- while( parsedir($subdir) ){}
- $fd_build->autoflush(1);
- log_screen("\n");
- chdir("../");
- system('rm -f *.dsc *.tar.gz *.changes');
- }
- chdir $back_dir;
- }
- }
- sub parsedir()
- {
- my $pkg = $_[0];
- log_screen("\n\nenter directory:".$pkg."\n");
- return 0 if((!$autobuild) && (!choseact("are you want to build:$pkg\n")) );
- my $curpwd = qx(pwd);
- chomp($curpwd);
- $fd_build->autoflush(0);
- log_screen("\tcur dir is:\n\t$curpwd\n");
- log_screen("\trun: dpkg-buildpackage -us -uc -rfakeroot 2>&1\n");
- chmod 755,'debian/rules' if(! -x 'debian/rules');
- chmod 755,'autogen.sh' if(! -x 'autogen.sh');
- system("make distclean >/dev/null 2>&1");
- if(!$usedeb){
- #if you don't use deb,then you can call these line
- run_cmd('./autogen.sh --prefix=/usr');
- run_cmd('make');
- run_cmd('make uninstall');
- run_cmd('make install');
- return ;
- }
- system('cp debian/changelog.in debian/changelog >/dev/null 2>&1') if(! -f 'debian/changelog');
- open(MAKEFI,"dpkg-buildpackage -us -uc -rfakeroot 2>&1|") || die "exec fail\n";
- log_screen( 'dpkg-buildpackage -us -uc -rfakeroot 2>&1'."\n");
- my @pkgs;
- my $line;
- while($line=<MAKEFI>){
- my $notlog = 1;
- if($line=~m/\berror\b/i){
- if($line!~m/dpkg-genchanges:\s+error:\s+cannot\s+open\s+\.dsc/){
- $notlog = 0;
- log_screen($line);
- }
- }
- log_build( $line) if($notlog);
- if($line=~m/\bUnmet\s+build\s+dependencies\b/i){
- log_screen($line);
- log_screen("are you want to install missing dependence then rebuild this package or skip build this package(default:skip)\n");
- log_screen("press n to skip,else you press 'Y' after finish install missing packages\n");
- return choseact("") ;
- }
- next if($line!~m/dpkg-deb:\s+building\s+package\s+\`([^']+)\'\s+in\s+\`([^']+)\'/);
- log_screen("\tpkg:[$1:\t$2]\n");
- push(@pkgs,$2);
- }
- close(MAKEFI);
- if($#pkgs < 0){
- log_screen("error no package found,build message is write to build.log file\n");
- }
- else{
- my $pkgfile = join(" ",@pkgs);
- log_screen( "\n>>>>>>>>>\n\tdpkg -i $pkgfile\n\n");
- run_cmd("dpkg -i $pkgfile");
- }
- log_screen("\n");
- return 0;
- }
- #
- # choose user select
- #
- sub choseact()
- {
- log_screen( $_[0]."\nplease input yes or no [Y]\n");
- my $in=<STDIN>;
- if($in=~m/n/i){
- log_screen( "cancel\n");
- return 0;
- }
- log_screen( "\n");
- return 1;
- }
- #
- # downlaod E17 source code from CVS
- #
- sub get_cvs()
- {
- print "get CVS source code\n";
- print "login CVS:,when need you input password,press return directly\n";
- print 'cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment login'."\n";
- system('cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment login');
- print 'chech out E17:'."\n";
- print 'cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co e17'."\n";
- system('cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co e17');
- print 'chech out Misc:'."\n";
- print 'cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co misc'."\n";
- system('cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/enlightenment co misc');
- }
- #
- # check debian build env
- #
- sub check_debbuildenv()
- {
- my @pkglist = qx(dpkg --get-selections);
- my $lines = join(':',@pkglist);
- check_pkg($lines,"autoconf",1);
- check_pkg($lines,"automake",1,"(version >=1.7)");
- check_pkg($lines,"libtool",1);
- check_pkg($lines,"pkg-config",1);
- if($usedeb){
- check_pkg($lines,"fakeroot",1);
- check_pkg($lines,"dpkg-dev",1);
- }
- check_pkg($lines,"libxcursor-dev",0,"(it may need by ecore,if link ecore fail, please install it)");
- 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");
- }
- sub check_pkg()
- {
- my ($pkglists,$pkgname,$exitmode,$version)=@_;
- my $exit = 0;
- $exit = 1 if( $pkglists!~m/\b$pkgname[^:]*\s+install/);
- if( $exit ){
- log_screen("WARNNING: ") if(! $exitmode );
- log_screen("you don't install $pkgname, please use \n\tapt-get install $pkgname\n to install it.$version \n");
- die if( $exitmode );
- }
- }
- #
- # run a command,and log command output to screen.log
- #
- sub run_cmd()
- {
- my $cmd = $_[0];
- my $fd;
- open($fd,"$cmd 2>&1 |");
- if( ! $fd ){
- log_screen("exec $cmd fail,check if this command exist\n");
- die;
- }
- my $line;
- while($line=<$fd>){
- log_screen($line);
- }
- }
- #
- # log screen output
- #
- sub log_screen()
- {
- print @_;
- print $fd_screen @_;
- log_build(@_);
- }
- #
- # log build result to build.log
- #
- sub log_build()
- {
- print $fd_build @_;
- }
复制代码 |
|