]> git.openfabrics.org - ~vlad/build.git/commitdiff
build.pl: Added support for source RPM per Distro
authorVladimir Sokolovsky <vlad@mellanox.com>
Tue, 19 Sep 2017 21:07:38 +0000 (00:07 +0300)
committerVladimir Sokolovsky <vlad@mellanox.com>
Wed, 20 Sep 2017 17:03:49 +0000 (20:03 +0300)
Starting rdma-core-v15 they provide different RPM spec files for RedHat and SUSE.
build.pl was updated to build two source RPMs of rdma-core one under SRPMS/RH and
the other one under SRPMS/SUSE

Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
build.pl

index 7d594d1ddd1b845596c6c5b34cf9ca3e3036b9a4..060b2f46d110eb30cd00ab03a55d3ffc3fbbd94f 100755 (executable)
--- a/build.pl
+++ b/build.pl
@@ -202,17 +202,17 @@ sub update_build_id
        close (MY_BUILD_ID);
 }
 
-sub get_from_git
+sub git_clone
 {
        my $name = shift @_;
        my $ref;
-       my $targz = 'tar.gz';
        my $cmd = "$GIT clone -s --bare";
        my $remote_commit = `$GIT ls-remote --heads $packages{$name}{'git_url'} $packages{$name}{'git_branch'}`;
        chomp $remote_commit;
        my $remote_commit_id = (split ' ', $remote_commit)[0];
        chomp $remote_commit_id;
 
+
        print "get_from_git: name $name\n" if ($verbose);
        if ($packages{$name}{'git_reference_dir'} and -d $packages{$name}{'git_reference_dir'}) {
                $cmd .= " --reference $packages{$name}{'git_reference_dir'}";
@@ -232,11 +232,27 @@ sub get_from_git
 
        ex "perl -ni -e \"s/(bare = ).*/\${1}false/;print\" .git/config";
 
-       # Set ref
-       # TBD: add support for checkout from tag and from commit
-       $ref = $packages{$name}{'git_branch'};
+       ex "$GIT checkout $packages{$name}{'git_branch'}";
+
+       $packages{$name}{'release'} = '';
+
+       if ($build_release) {
+               my $rel = 0;
+               if ((split '-',$version)[1]) {
+                               $rel = (split '-',$version)[1];
+               }
+               $packages{$name}{'release'} = $rel . '.' if ($rel);
+       }
+
+       $packages{$name}{'release'} .= $build_version;
+       if (not $build_release) {
+               $packages{$name}{'release'} .= '.' . $starttime;
+       }
+       $packages{$name}{'release'} =~ s/-/./g;
+       $packages{$name}{'release'} .= '.g' . substr($remote_commit_id, 0, 7);
+       chomp ($packages{$name}{'release'});
+
        if ($name =~ /compat-rdma/) {
-               ex "$GIT checkout $ref";
                update_build_id($name, "$packages{$name}{'git_url'} $packages{$name}{'git_branch'}\n" . `git log -1 | head -1`);
 
                # Get linux sub-tree
@@ -288,13 +304,6 @@ sub get_from_git
                update_build_id($name, "compat:\n$packages{$name}{'compat_git_url'} $packages{$name}{'compat_git_branch'}\n" . `git log -1 | head -1`);
 
                chdir $tmpdir . '/' . $name;
-               my $ENV = "GIT_TREE=$tmpdir" . '/' . "linux";
-               $ENV .= " GIT_COMPAT_TREE=$tmpdir" . '/' . "compat";
-               ex "$ENV ./scripts/admin_rdma.sh -n -p";
-
-               if (-f "compat/autogen.sh") {
-                       ex "cd compat && ./autogen.sh && cd -";
-               }
 
                my $compat_remote_commit = `$GIT ls-remote --heads $packages{$name}{'compat_git_url'} $packages{$name}{'compat_git_branch'}`;
                chomp $compat_remote_commit;
@@ -330,20 +339,7 @@ sub get_from_git
                $packages{$name}{'release'} =~ s/-/./g;
                $packages{$name}{'release'} .= '.g' . substr($remote_commit_id, 0, 7);
                chomp ($packages{$name}{'release'});
-
-               open (IN, "+< compat-rdma.spec");
-               my @file = <IN>;
-               seek IN,0,0;
-               foreach my $line (@file) {
-                       $line =~ s/\@VERSION@/$packages{$name}{'version'}/g;
-                       $line =~ s/\@RELEASE@/$packages{$name}{'release'}/g;
-                       print IN $line;
-               }
-               close IN;
-               ex "/bin/rm -f ofed_scripts/ofa_kernel.spec";
-               $targz = 'tgz';
        } else {
-               ex "$GIT checkout $ref";
                update_build_id($name, "$packages{$name}{'git_url'} $packages{$name}{'git_branch'}\n" . `git log -1 | head -1`);
 
                $packages{$name}{'release'} = '';
@@ -363,6 +359,104 @@ sub get_from_git
                $packages{$name}{'release'} =~ s/-/./g;
                $packages{$name}{'release'} .= '.g' . substr($remote_commit_id, 0, 7);
                chomp ($packages{$name}{'release'});
+       }
+}
+
+sub get_srpm_rh_suse
+{
+       my $name = shift @_;
+       my $ref;
+       my $targz = 'tgz';
+
+       git_clone($name);
+
+       chdir $tmpdir;
+
+       if (not $packages{$name}{'version'}) {
+               $packages{$name}{'version'} = `find $name -name $name.spec | head -1 | xargs grep "^Version:" | awk '{print \$NF}'`;
+               chomp $packages{$name}{'version'};
+       }
+
+       if (not $packages{$name}{'version'}) {
+               warn("Failed to get version for $name\n");
+               exit 1;
+       }
+
+       # RHEL
+       rmtree $name-$packages{$name}{'version'};
+       ex "cp -a $name $name-$packages{$name}{'version'}";
+
+       if (not -e  "$name-$packages{$name}{'version'}/$name.spec") {
+               if (-e "$name-$packages{$name}{'version'}/redhat/$name.spec") {
+                       system("/bin/mv $name-$packages{$name}{'version'}/redhat/$name.spec $name-$packages{$name}{'version'}/$name.spec");
+               }
+               if (-d "$name-$packages{$name}{'version'}/suse") {
+                       rmtree "$name-$packages{$name}{'version'}/suse";
+               }
+       }
+
+       ex "tar czvf $name-$packages{$name}{'version'}.$targz --exclude=.git $name-$packages{$name}{'version'}";
+       sleep 1;
+       $packages{$name}{'local_tarball'} = $tmpdir . '/' . "$name-$packages{$name}{'version'}.$targz";
+       get_srpm($name);
+       mkpath "$destdir/SRPMS/RH";
+       move "$packages{$name}{'local_srpm'}", "$destdir/SRPMS/RH";
+       rmtree (["$name-$packages{$name}{'version'}", $tmpdir . '/' . "$name-$packages{$name}{'version'}.$targz"]);
+
+       # SUSE
+       chdir $tmpdir;
+       ex "cp -a $name $name-$packages{$name}{'version'}";
+
+       if (not -e  "$name-$packages{$name}{'version'}/$name.spec") {
+               if (-e "$name-$packages{$name}{'version'}/suse/$name.spec") {
+                       # W/A for the bug in the spec file
+                       system("grep -v baselibs.conf $name-$packages{$name}{'version'}/suse/$name.spec > $name-$packages{$name}{'version'}/$name.spec");
+                       system("/bin/rm -f $name-$packages{$name}{'version'}/suse/$name.spec");
+                       system("/bin/rm -f $name-$packages{$name}{'version'}/redhat/$name.spec");
+               }
+       }
+
+       if ($name =~ /rdma-core/) {
+               $targz = 'tar.gz';
+       }
+
+       ex "tar czvf $name-$packages{$name}{'version'}.$targz --exclude=.git $name-$packages{$name}{'version'}";
+       sleep 1;
+       $packages{$name}{'local_tarball'} = $tmpdir . '/' . "$name-$packages{$name}{'version'}.$targz";
+       get_srpm($name);
+       rmtree (["$name", "$name-$packages{$name}{'version'}", $tmpdir . '/' . "$name-$packages{$name}{'version'}.$targz"]);
+       mkpath "$destdir/SRPMS/SUSE";
+       move "$packages{$name}{'local_srpm'}", "$destdir/SRPMS/SUSE";
+}
+
+sub get_from_git
+{
+       my $name = shift @_;
+       my $ref;
+       my $targz = 'tar.gz';
+
+       git_clone($name);
+
+       if ($name =~ /compat-rdma/) {
+               my $ENV = "GIT_TREE=$tmpdir" . '/' . "linux";
+               $ENV .= " GIT_COMPAT_TREE=$tmpdir" . '/' . "compat";
+               ex "$ENV ./scripts/admin_rdma.sh -n -p";
+
+               if (-f "compat/autogen.sh") {
+                       ex "cd compat && ./autogen.sh && cd -";
+               }
+               open (IN, "+< compat-rdma.spec");
+               my @file = <IN>;
+               seek IN,0,0;
+               foreach my $line (@file) {
+                       $line =~ s/\@VERSION@/$packages{$name}{'version'}/g;
+                       $line =~ s/\@RELEASE@/$packages{$name}{'release'}/g;
+                       print IN $line;
+               }
+               close IN;
+               ex "/bin/rm -f ofed_scripts/ofa_kernel.spec";
+               $targz = 'tgz';
+       } else {
 
                # ofed-scripts and ofed-docs
                if ($name =~ /ofed/) {
@@ -396,7 +490,7 @@ sub get_from_git
                                open (IN, "$destdir/BUILD_ID") or die "Can't open $destdir/BUILD_ID file: $!\n";
                                seek IN,0,0;
                                my @file = <IN>;
-                               my $list_of_packages = 'compat-rdma';
+                               my $list_of_packages = 'compat-rdma|libibverbs|rdma|libmlx|srp_daemon|libibcm|libibumad|ibacm|rsocket|iwpmd';
                                open (OUT, "> ofed_info") or die "Can't open ofed_info file: $!\n";
                                print OUT "#!/bin/bash\n";
                                my $firstline = <@file>;
@@ -458,14 +552,6 @@ sub get_from_git
        rmtree $name-$packages{$name}{'version'};
        move "$name", "$name-$packages{$name}{'version'}";
 
-       if ($name =~ /rdma-core/) {
-               $targz = 'tgz';
-       }
-
-       if (-e "$name-$packages{$package}{'version'}/redhat/rdma-core.spec") {
-               system("/bin/rm -f $name-$packages{$package}{'version'}/redhat/rdma-core.spec");
-       }
-
        ex "tar  czvf $name-$packages{$name}{'version'}.$targz --exclude=.git $name-$packages{$name}{'version'}";
        sleep 1;
        rmtree (["$name", "$name-$packages{$name}{'version'}"]);
@@ -535,7 +621,7 @@ sub get_srpm
                if ($packages{$name}{'use_latest'}) {
                        $packages{$name}{'local_tarball'} .= '/' . `grep -w ^$name-[0-9] "$packages{$name}{'local_tarball'}/latest.txt"`;
                        chomp $packages{$name}{'local_tarball'};
-                       update_build_id($package, "$packages{$package}{'local_tarball'}\n");
+                       update_build_id($name, "$packages{$name}{'local_tarball'}\n");
                }
        }
        if (not -f $packages{$name}{'local_tarball'}) {
@@ -710,12 +796,15 @@ for my $conf (<$CWD/$packages_dir/*.conf>) {
                        update_build_id($package, "$packages{$package}{'local_srpm'}\n");
                } else {
                        if ($packages{$package}{'getMethod'} =~ /git/) {
+                               if ($package =~ /rdma-core/) {
+                                       get_srpm_rh_suse($package)
+                               } else {
+                                       if (not $packages{$package}{'local_tarball'}) {
+                                               get_from_git($package);
+                                       }
 
-                               if (not $packages{$package}{'local_tarball'}) {
-                                       get_from_git($package);
+                                       get_srpm($package);
                                }
-
-                               get_srpm($package);
                        } elsif ($packages{$package}{'getMethod'} =~ /tarball/) {
                                if (not $packages{$package}{'local_tarball'}) {
                                        get_package($package);
@@ -731,11 +820,10 @@ for my $conf (<$CWD/$packages_dir/*.conf>) {
                                print_red "Unsupported getMethod: $packages{$package}{'getMethod'}";
                                exit 1;
                        }
-                       move "$packages{$package}{'local_srpm'}", "$destdir/SRPMS";
-                       # ex "rpm -ihv $force_debian --define \"_topdir $destdir\" $packages{$package}{'local_srpm'}";
-                       # if ($package eq "compat-dapl") {
-                       #       ex "mv $destdir/SPECS/dapl.spec $destdir/SPECS/compat-dapl.spec";
-                       # }
+
+                       if ($package !~ /rdma-core/) {
+                               move "$packages{$package}{'local_srpm'}", "$destdir/SRPMS";
+                       }
                }
 
                # Cleanup
@@ -785,7 +873,6 @@ if ($build_scripts) {
        print BUILD_ID "$packages{$package}{'git_url'} $packages{$package}{'git_branch'}\n";
        get_from_git($package);
        get_srpm($package);
-       push (@plist, $package);
        move "$packages{$package}{'local_srpm'}", "$destdir/SRPMS";
        close BUILD_ID;
 }