create-recipe: base on autospectacle.pl to create recipe file
[Yocto 1656] create-recipe is based on original autospectacle.pl from project Meego. Add feature to create a recipe .bb file. It requires a parameter to be told where to download source package, then download and parse. Create recipe file according to parse results. (From OE-Core rev: e1f3a0bcce7b24d6c48e6c92c54bcb03858a5748) Signed-off-by: Kang Kai <kai.kang@windriver.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
a5e76f3a7b
commit
98f21d6e3d
|
@ -1,5 +1,7 @@
|
||||||
#!/usr/bin/perl -w
|
#!/usr/bin/perl -w
|
||||||
|
|
||||||
|
# Copyright (C) 2012 Wind River Systems, Inc.
|
||||||
|
#
|
||||||
# Copyright (C) 2010 Intel Corporation
|
# Copyright (C) 2010 Intel Corporation
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
@ -29,6 +31,7 @@
|
||||||
use File::Temp qw(tempdir);
|
use File::Temp qw(tempdir);
|
||||||
use File::Path qw(mkpath rmtree);
|
use File::Path qw(mkpath rmtree);
|
||||||
use File::Spec ();
|
use File::Spec ();
|
||||||
|
use File::Basename qw(basename dirname);
|
||||||
|
|
||||||
|
|
||||||
my $name = "";
|
my $name = "";
|
||||||
|
@ -42,6 +45,10 @@ my @sources;
|
||||||
my @mainfiles;
|
my @mainfiles;
|
||||||
my @patches;
|
my @patches;
|
||||||
|
|
||||||
|
my $md5sum = "";
|
||||||
|
my $sh256sum = "";
|
||||||
|
my @inherits;
|
||||||
|
|
||||||
my $printed_subpackages = 0;
|
my $printed_subpackages = 0;
|
||||||
my $fulldir = "";
|
my $fulldir = "";
|
||||||
|
|
||||||
|
@ -70,6 +77,7 @@ my %failed_headers;
|
||||||
|
|
||||||
my %licenses;
|
my %licenses;
|
||||||
my @license;
|
my @license;
|
||||||
|
my %lic_files;
|
||||||
|
|
||||||
sub setup_licenses
|
sub setup_licenses
|
||||||
{
|
{
|
||||||
|
@ -115,8 +123,14 @@ sub guess_license_from_file {
|
||||||
if (defined($licenses{$sha1})) {
|
if (defined($licenses{$sha1})) {
|
||||||
my $lic = $licenses{$sha1};
|
my $lic = $licenses{$sha1};
|
||||||
push(@license, $lic);
|
push(@license, $lic);
|
||||||
|
|
||||||
|
my $md5output = `md5sum $copying`;
|
||||||
|
$md5output =~ /^([a-zA-Z0-9]*) /;
|
||||||
|
my $md5 = $1;
|
||||||
|
chomp($md5);
|
||||||
|
$lic_files{$copying} = $md5
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# We also must make sure that the COPYING/etc files
|
# We also must make sure that the COPYING/etc files
|
||||||
# end up in the main package as %doc..
|
# end up in the main package as %doc..
|
||||||
|
@ -124,7 +138,7 @@ sub guess_license_from_file {
|
||||||
$copying =~ s/$fulldir//g;
|
$copying =~ s/$fulldir//g;
|
||||||
$copying =~ s/^\///g;
|
$copying =~ s/^\///g;
|
||||||
$copying = "\"\%doc " . $copying ."\"";
|
$copying = "\"\%doc " . $copying ."\"";
|
||||||
|
|
||||||
push(@mainfiles, $copying);
|
push(@mainfiles, $copying);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1522,7 +1536,7 @@ sub guess_name_from_url {
|
||||||
}
|
}
|
||||||
my $tarfile = $spliturl[0];
|
my $tarfile = $spliturl[0];
|
||||||
|
|
||||||
if ($tarfile =~ /(.*?)\-([0-9\.\-\~]+)\.tar/) {
|
if ($tarfile =~ /(.*?)\-([0-9\.\-\~]+)[-\.].*?\.tar/) {
|
||||||
$name = $1;
|
$name = $1;
|
||||||
$version = $2;
|
$version = $2;
|
||||||
$version =~ s/\-/\_/g;
|
$version =~ s/\-/\_/g;
|
||||||
|
@ -1650,7 +1664,7 @@ sub write_yaml
|
||||||
write_makefile();
|
write_makefile();
|
||||||
write_changelog();
|
write_changelog();
|
||||||
|
|
||||||
system("rm $name.spec");
|
system("rm $name.spec 2>/dev/null");
|
||||||
system("specify &> /dev/null");
|
system("specify &> /dev/null");
|
||||||
if ($oscmode > 0) {
|
if ($oscmode > 0) {
|
||||||
system("osc addremove");
|
system("osc addremove");
|
||||||
|
@ -1659,6 +1673,65 @@ sub write_yaml
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub write_bbfile
|
||||||
|
{
|
||||||
|
open(BBFILE, ">${name}_$version.bb");
|
||||||
|
print BBFILE "SUMMARY = \"$summary\"\n";
|
||||||
|
print BBFILE "DESCRIPTION = \"$description\"\n";
|
||||||
|
|
||||||
|
print BBFILE "LICENSE = \"@license\"\n";
|
||||||
|
print BBFILE "LIC_FILES_CHKSUM = \"";
|
||||||
|
foreach (keys %lic_files) {
|
||||||
|
print BBFILE "file://" . basename($_) . ";md5=$lic_files{$_} \\\n";
|
||||||
|
}
|
||||||
|
print BBFILE "\"\n\n";
|
||||||
|
|
||||||
|
if (@license <= 0) {
|
||||||
|
print "Can NOT get license from package itself.\n";
|
||||||
|
print "Please update the license and license file manually.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@buildreqs > 0) {
|
||||||
|
my %saw;
|
||||||
|
my @out = grep(!$saw{$_}++,@buildreqs);
|
||||||
|
print BBFILE "DEPENDS = \"@out\"\n\n";
|
||||||
|
};
|
||||||
|
|
||||||
|
print BBFILE 'PR = "r0"' . "\n\n";
|
||||||
|
print BBFILE "SRC_URI = \"";
|
||||||
|
foreach (@sources) {
|
||||||
|
print BBFILE "$_ \\\n";
|
||||||
|
}
|
||||||
|
print BBFILE "\"\n\n";
|
||||||
|
print BBFILE "SRC_URI[md5sum] = \"$md5sum\"\n";
|
||||||
|
print BBFILE "SRC_URI[sha256sum] = \"$sha256sum\"\n";
|
||||||
|
|
||||||
|
if (@inherits) {
|
||||||
|
print BBFILE "inherit ";
|
||||||
|
foreach (@inherits) {
|
||||||
|
print BBFILE "$_ ";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
close(BBFILE);
|
||||||
|
|
||||||
|
my $curdir = `pwd`;
|
||||||
|
chomp($curdir);
|
||||||
|
print "Create bb file: $curdir/${name}_$version.bb\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub calculate_sums
|
||||||
|
{
|
||||||
|
@_ = basename $dir;
|
||||||
|
my $md5output = `md5sum @_`;
|
||||||
|
$md5output =~ /^([a-zA-Z0-9]*) /;
|
||||||
|
$md5sum = $1;
|
||||||
|
chomp($md5sum);
|
||||||
|
my $sha256output = `sha256sum @_`;
|
||||||
|
$sha256output =~ /^([a-zA-Z0-9]*) /;
|
||||||
|
$sha256sum = $1;
|
||||||
|
chomp($sha256sum);
|
||||||
|
}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
|
@ -1696,33 +1769,40 @@ $dir = $ARGV[0];
|
||||||
guess_name_from_url($dir);
|
guess_name_from_url($dir);
|
||||||
push(@sources, $dir);
|
push(@sources, $dir);
|
||||||
|
|
||||||
|
|
||||||
#system("cd $tmpdir; curl -s -O $dir");
|
#system("cd $tmpdir; curl -s -O $dir");
|
||||||
$orgdir = `pwd`;
|
$orgdir = `pwd`;
|
||||||
chomp($orgdir);
|
chomp($orgdir);
|
||||||
|
my $outputdir = $name;
|
||||||
|
if (! $name) {
|
||||||
|
$outputdir = basename $dir;
|
||||||
|
}
|
||||||
|
mkpath($outputdir);
|
||||||
|
chdir($outputdir);
|
||||||
print "Downloading package: $dir\n";
|
print "Downloading package: $dir\n";
|
||||||
system("wget --quiet $dir");
|
system("wget --quiet $dir") == 0 or die "Download $dir failed.";
|
||||||
|
|
||||||
|
calculate_sums($outputdir);
|
||||||
|
|
||||||
print "Unpacking to : $tmpdir\n";
|
print "Unpacking to : $tmpdir\n";
|
||||||
|
|
||||||
my @tgzfiles = <$orgdir/*.tgz>;
|
my @tgzfiles = <$orgdir/$outputdir/*.tgz>;
|
||||||
foreach (@tgzfiles) {
|
foreach (@tgzfiles) {
|
||||||
my $tgz = $_;
|
my $tgz = basename $_;
|
||||||
my $tar = $tgz;
|
my $tar = $tgz;
|
||||||
$tar =~ s/tgz/tar\.gz/g;
|
$tar =~ s/tgz/tar\.gz/g;
|
||||||
$dir =~ s/tgz/tar\.gz/g;
|
$dir =~ s/tgz/tar\.gz/g;
|
||||||
system("mv $tgz $tar");
|
system("mv $orgdir/$outputdir/$tgz $orgdir/$outputdir/$tar");
|
||||||
guess_name_from_url($dir);
|
guess_name_from_url($dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# I really really hate the fact that meego deleted the -a option from tar.
|
# I really really hate the fact that meego deleted the -a option from tar.
|
||||||
# this is a step backwards in time that is just silly.
|
# this is a step backwards in time that is just silly.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
system("cd $tmpdir; tar -jxf $orgdir/*\.tar\.bz2");
|
system("cd $tmpdir; tar -jxf $orgdir/$outputdir/*\.tar\.bz2 &>/dev/null");
|
||||||
system("cd $tmpdir; tar -zxf $orgdir/*\.tar\.gz");
|
system("cd $tmpdir; tar -zxf $orgdir/$outputdir/*\.tar\.gz &>/dev/null");
|
||||||
print "Parsing content ....\n";
|
print "Parsing content ....\n";
|
||||||
my @dirs = <$tmpdir/*>;
|
my @dirs = <$tmpdir/*>;
|
||||||
foreach (@dirs) {
|
foreach (@dirs) {
|
||||||
|
@ -1734,11 +1814,13 @@ $fulldir = $dir;
|
||||||
if ( -e "$dir/autogen.sh" ) {
|
if ( -e "$dir/autogen.sh" ) {
|
||||||
$configure = "autogen";
|
$configure = "autogen";
|
||||||
$uses_configure = 1;
|
$uses_configure = 1;
|
||||||
|
push(@inherits, "autotools");
|
||||||
}
|
}
|
||||||
if ( -e "$dir/BUILD-CMAKE" ) {
|
if ( -e "$dir/BUILD-CMAKE" ) {
|
||||||
$configure = "cmake";
|
$configure = "cmake";
|
||||||
push(@buildreqs, "cmake");
|
push(@buildreqs, "cmake");
|
||||||
$uses_configure = 1;
|
$uses_configure = 1;
|
||||||
|
push(@inherits, "cmake");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( -e "$dir/configure" ) {
|
if ( -e "$dir/configure" ) {
|
||||||
|
@ -1747,7 +1829,7 @@ if ( -e "$dir/configure" ) {
|
||||||
|
|
||||||
my @files = <$dir/configure.*>;
|
my @files = <$dir/configure.*>;
|
||||||
|
|
||||||
my $findoutput = `find $dir -name "configure.ac"`;
|
my $findoutput = `find $dir -name "configure.ac" 2>/dev/null`;
|
||||||
my @findlist = split(/\n/, $findoutput);
|
my @findlist = split(/\n/, $findoutput);
|
||||||
foreach (@findlist) {
|
foreach (@findlist) {
|
||||||
push(@files, $_);
|
push(@files, $_);
|
||||||
|
@ -1756,7 +1838,7 @@ foreach (@files) {
|
||||||
process_configure_ac("$_");
|
process_configure_ac("$_");
|
||||||
}
|
}
|
||||||
|
|
||||||
$findoutput = `find $dir -name "*.pro"`;
|
$findoutput = `find $dir -name "*.pro" 2>/dev/null`;
|
||||||
@findlist = split(/\n/, $findoutput);
|
@findlist = split(/\n/, $findoutput);
|
||||||
foreach (@findlist) {
|
foreach (@findlist) {
|
||||||
process_qmake_pro("$_");
|
process_qmake_pro("$_");
|
||||||
|
@ -1765,6 +1847,7 @@ foreach (@findlist) {
|
||||||
if (-e "$dir/$name.pro") {
|
if (-e "$dir/$name.pro") {
|
||||||
$builder = "qmake";
|
$builder = "qmake";
|
||||||
push_pkgconfig_buildreq("Qt");
|
push_pkgconfig_buildreq("Qt");
|
||||||
|
push(@inherits, "qmake2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1804,6 +1887,12 @@ foreach (@files) {
|
||||||
|
|
||||||
guess_description($dir);
|
guess_description($dir);
|
||||||
|
|
||||||
|
#
|
||||||
|
# Output of bbfile file
|
||||||
|
#
|
||||||
|
write_bbfile();
|
||||||
|
chdir($orgdir);
|
||||||
|
exit 0;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Output of the yaml file
|
# Output of the yaml file
|
Loading…
Reference in New Issue