From 8c4d205af7c23644acb2b69cf3e70e7ad992dcb9 Mon Sep 17 00:00:00 2001 From: Vladimir Sokolovsky Date: Wed, 20 Sep 2017 00:07:38 +0300 Subject: [PATCH] build.pl: Added support for source RPM per Distro 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 --- build.pl | 179 +++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 133 insertions(+), 46 deletions(-) diff --git a/build.pl b/build.pl index 7d594d1..060b2f4 100755 --- 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 = ; - 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 = ; + 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 = ; - 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; } -- 2.46.0