|
you can:
1. use this script to download E17 cvs source code(use --cvs option)
2. build E17 to deb packages(default)
3. use "autogen.sh --prefix=/usr;make;make install" to build e17(add --make option)
[code:1]
#!/usr/bin/perl
#
use strict;
use FileHandle;
use Getopt::Long;
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 = 1; # if true, will create deb and install deb package,else use "make install" to install
my $versuffix = ""; # if you want to special the suffix to all deb package's versions,you can add to here,such as "-0527"
my $help = 0;
my $make = 0;
GetOptions(
'cvs' =>\$autocvs,
'help' =>\$help,
'deb' =>\$usedeb,
'make' =>\$make,
);
usage() if($help);
$usedeb = 0 if($make);
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
if($autocvs){
get_cvs() ;
die;
}
do_install(@eflobjs);
close($fd_build);
close($fd_screen);
sub usage{
print "inse17.pl options:\n";
print "\t--cvs only do cvs update,then exit\n";
print "\t--make use \"autogen.sh;make;make install\" to build and install the E17\n";
print "\t--deb build deb pkg then install\n";
print "\t--help show help file\n";
print "default is --deb\nif you want to sepcial build packages,you can edit \@eflobjs array\n";
die;
}
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");
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('CFLAGS="-O3 -mtune=pentium4" ./autogen.sh --prefix=/usr');
run_cmd('make');
run_cmd('make uninstall');
run_cmd('make install');
return ;
}
mk_changelog();
log_screen("\trun: dpkg-buildpackage -us -uc -rfakeroot 2>&1\n");
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]:/var/cvs/e login'."\n";
system('cvs -d:pserver:[email protected]:/var/cvs/e login');
print 'chech out E17:'."\n";
print 'cvs -z3 -d:pserver:[email protected]:/var/cvs/e co e17'."\n";
system('cvs -z3 -d:pserver:[email protected]:/var/cvs/e co e17');
print 'chech out Misc:'."\n";
print 'cvs -z3 -d:pserver:[email protected]:/var/cvs/e co misc'."\n";
system('cvs -z3 -d:pserver:[email protected]:/var/cvs/e 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 and the 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);
}
}
sub mk_changelog()
{
my $fcontrl;
open($fcontrl,"debian/control");
if( ! $fcontrl ){
log_screen("open control file fails\n");
return ;
}
my $line;
my $ver;
while($line=<$fcontrl>){
chomp($line);
if( $line=~m/Standards-Version:\s*(\w.*)/i){
$ver = $1;
chomp($ver);
last;
}
}
close($fcontrl);
if(!$ver){
log_screen("get version fal\n");
return ;
}
log_screen("version number is:$ver\n");
my $fi;
my $fo;
open($fi,"debian/changelog.in");
open($fo,">debian/changelog");
$line = <$fi>;
$line =~s/\@VERSION\@/$ver$versuffix/;
print $fo $line;
while($line=<$fi>){
print $fo $line;
}
close($fi);
close($fo);
}
#
# 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] |
|