|
楼主 |
发表于 2006-4-21 11:35:31
|
显示全部楼层
我的脚本 你试试看
或是直接在 edje目录下直接运行 autogen.sh; make
看出错情况
你的这种错误基本上不会有吧 除非在autogen.sh里面出了什么问题或是make中前面已经出现了什么问题
[code:1]
#!/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',
'edje'
],
['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:[email protected]:/cvsroot/enlightenment login'."\n";
system('cvs -d:pserver:[email protected]:/cvsroot/enlightenment login');
print 'chech out E17:'."\n";
print 'cvs -z3 -d:pserver:[email protected]:/cvsroot/enlightenment co e17'."\n";
system('cvs -z3 -d:pserver:[email protected]:/cvsroot/enlightenment co e17');
print 'chech out Misc:'."\n";
print 'cvs -z3 -d:pserver:[email protected]:/cvsroot/enlightenment co misc'."\n";
system('cvs -z3 -d:pserver:[email protected]:/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 @_;
}
[/code:1] |
|