|
Packit |
857059 |
#!/bin/bash
|
|
Packit |
857059 |
# BEGIN_ICS_COPYRIGHT8 ****************************************
|
|
Packit |
857059 |
#
|
|
Packit |
857059 |
# Copyright (c) 2015, Intel Corporation
|
|
Packit |
857059 |
#
|
|
Packit |
857059 |
# Redistribution and use in source and binary forms, with or without
|
|
Packit |
857059 |
# modification, are permitted provided that the following conditions are met:
|
|
Packit |
857059 |
#
|
|
Packit |
857059 |
# * Redistributions of source code must retain the above copyright notice,
|
|
Packit |
857059 |
# this list of conditions and the following disclaimer.
|
|
Packit |
857059 |
# * Redistributions in binary form must reproduce the above copyright
|
|
Packit |
857059 |
# notice, this list of conditions and the following disclaimer in the
|
|
Packit |
857059 |
# documentation and/or other materials provided with the distribution.
|
|
Packit |
857059 |
# * Neither the name of Intel Corporation nor the names of its contributors
|
|
Packit |
857059 |
# may be used to endorse or promote products derived from this software
|
|
Packit |
857059 |
# without specific prior written permission.
|
|
Packit |
857059 |
#
|
|
Packit |
857059 |
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
Packit |
857059 |
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
Packit |
857059 |
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
Packit |
857059 |
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
|
Packit |
857059 |
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
Packit |
857059 |
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
Packit |
857059 |
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
Packit |
857059 |
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
Packit |
857059 |
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
Packit |
857059 |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
Packit |
857059 |
#
|
|
Packit |
857059 |
# END_ICS_COPYRIGHT8 ****************************************
|
|
Packit |
857059 |
##
|
|
Packit |
857059 |
## build_srpms
|
|
Packit |
857059 |
## -----------
|
|
Packit |
857059 |
## create SRPMS from an expanded source tree
|
|
Packit |
857059 |
## designed to work with trees built by expand_source. Supports OFED source.
|
|
Packit |
857059 |
##
|
|
Packit |
857059 |
## Usage:
|
|
Packit |
857059 |
## build_srpms [-c] [-d SRPMS_dir] [-s source_dir] [-p] [-V kernel_ver] [package...]
|
|
Packit |
857059 |
##
|
|
Packit |
857059 |
## Arguments:
|
|
Packit |
857059 |
## -c - cleanup SOURCES, SPECS and SRPMS in each package when done
|
|
Packit |
857059 |
## -d - SRPMS directory to create, default is ./SRPMS
|
|
Packit |
857059 |
## -s - source for build, default is ., ignored if package(s) specified
|
|
Packit |
857059 |
## -p - unapply patches for ofa_kernel
|
|
Packit |
857059 |
## -V - kernel version to unapply patches for, default is `uname -r`
|
|
Packit |
857059 |
## package - a package source directory
|
|
Packit |
857059 |
## Environment:
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#. $ICSBIN/funcs.sh
|
|
Packit |
857059 |
|
|
Packit |
857059 |
Usage()
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
# include "ERROR" in message so weeklybuild catches it in error log
|
|
Packit |
857059 |
echo "ERROR: build_srpms failed" >&2
|
|
Packit |
857059 |
echo "Usage: build_srpms [-c] [-d SRPMS_dir] [-s source_dir] [-p] [-V kernel_ver] [package...]" >&2
|
|
Packit |
857059 |
echo " -c - cleanup SOURCES, SPECS and SRPMS in each package when done" >&2
|
|
Packit |
857059 |
echo " -d - SRPMS directory to create, default is ./SRPMS" >&2
|
|
Packit |
857059 |
echo " -s - source for build, default is ., ignored if package(s) specified" >&2
|
|
Packit |
857059 |
echo " -p - unapply patches for ofa_kernel" >&2
|
|
Packit |
857059 |
echo " -V - kernel version to unapply patches for, default is `uname -r`" >&2
|
|
Packit |
857059 |
echo " -v - verbose output" >&2
|
|
Packit |
857059 |
echo " package - a package source directory" >&2
|
|
Packit |
857059 |
exit 2
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
# convert $1 to an absolute path
|
|
Packit |
857059 |
fix_dir()
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
if [ x$(echo $1|cut -c1) != x"/" ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo $PWD/$1
|
|
Packit |
857059 |
else
|
|
Packit |
857059 |
echo $1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
build_flags=
|
|
Packit |
857059 |
patch_kernel=n
|
|
Packit |
857059 |
kernel_ver=`uname -r`
|
|
Packit |
857059 |
srpms_dir=$PWD/SRPMS
|
|
Packit |
857059 |
source_dir=$PWD
|
|
Packit |
857059 |
vopt=""
|
|
Packit |
857059 |
packages=
|
|
Packit |
857059 |
clean=n
|
|
Packit |
857059 |
while getopts cs:d:pV:v param
|
|
Packit |
857059 |
do
|
|
Packit |
857059 |
case $param in
|
|
Packit |
857059 |
c) clean=y;;
|
|
Packit |
857059 |
d) srpms_dir="$OPTARG";;
|
|
Packit |
857059 |
s) source_dir="$OPTARG";;
|
|
Packit |
857059 |
p) patch_kernel=y;;
|
|
Packit |
857059 |
V) kernel_ver="$OPTARG";;
|
|
Packit |
857059 |
v) vopt="-v";;
|
|
Packit |
857059 |
*) Usage;;
|
|
Packit |
857059 |
esac
|
|
Packit |
857059 |
done
|
|
Packit |
857059 |
shift $(($OPTIND -1))
|
|
Packit |
857059 |
|
|
Packit |
857059 |
unset IFS # use default so enable word expansion
|
|
Packit |
857059 |
|
|
Packit |
857059 |
source_dir=$(fix_dir $source_dir)
|
|
Packit |
857059 |
srpms_dir=$(fix_dir $srpms_dir)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
echo "Building SRPMS in $srpms_dir from $source_dir..."
|
|
Packit |
857059 |
|
|
Packit |
857059 |
mkdir -p $srpms_dir
|
|
Packit |
857059 |
|
|
Packit |
857059 |
gettaropt()
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
case $1 in
|
|
Packit |
857059 |
*.tgz) taropt=z;;
|
|
Packit |
857059 |
*.tar.gz) taropt=z;;
|
|
Packit |
857059 |
*.tar.bz2) taropt=j;;
|
|
Packit |
857059 |
*) echo "Unknown tarfile format: $tarfile"; exit 1
|
|
Packit |
857059 |
esac
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
checkfiles()
|
|
Packit |
857059 |
{
|
|
Packit |
857059 |
local ret
|
|
Packit |
857059 |
|
|
Packit |
857059 |
ret=0
|
|
Packit |
857059 |
if [ ! -f SPECS/$specfile ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: missing file: SPECS/$specfile"
|
|
Packit |
857059 |
ret=1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
for f in $tarfile $otherfiles
|
|
Packit |
857059 |
do
|
|
Packit |
857059 |
if [ ! -f SOURCES/$f ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: missing file: SOURCES/$f"
|
|
Packit |
857059 |
ret=1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
done
|
|
Packit |
857059 |
return $ret
|
|
Packit |
857059 |
}
|
|
Packit |
857059 |
|
|
Packit |
857059 |
if [ $# -eq 0 ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
#if [ ! -f package_list ]
|
|
Packit |
857059 |
#then
|
|
Packit |
857059 |
# echo "ERROR: build_srpms: package_list not found in $source_dir" >&2
|
|
Packit |
857059 |
# echo "ERROR: build_srpms: source_dir must be created by expand_source" >&2
|
|
Packit |
857059 |
# exit 1
|
|
Packit |
857059 |
#fi
|
|
Packit |
857059 |
|
|
Packit |
857059 |
#set -- $(grep -v '^#' package_list)
|
|
Packit |
857059 |
#set -- $(cat package_list)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
cd $source_dir
|
|
Packit |
857059 |
set -- $(ls */namemap|cut -f1 -d /)
|
|
Packit |
857059 |
|
|
Packit |
857059 |
if [ $# -eq 0 ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "build_srpms: ERROR: No packages found in $source_dir" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
|
|
Packit |
857059 |
for package in "$@"
|
|
Packit |
857059 |
do
|
|
Packit |
857059 |
(
|
|
Packit |
857059 |
if [ ! -f $package/namemap -o ! -f $package/make_symlinks ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "ERROR: build_srpms: namemap not found in $source_dir/$package" >&2
|
|
Packit |
857059 |
echo "ERROR: build_srpms: source_dir must be created by expand_source" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
cd $package
|
|
Packit |
857059 |
bash -x ./make_symlinks
|
|
Packit |
857059 |
|
|
Packit |
857059 |
# tail is just to be paranoid, should only be 1 non-comment line
|
|
Packit |
857059 |
grep -v "^#" namemap|tail -1|while read package srpm specfile srcdir tarfile otherfiles
|
|
Packit |
857059 |
do
|
|
Packit |
857059 |
echo "Generating $srpm from $package..."
|
|
Packit |
857059 |
|
|
Packit |
857059 |
gettaropt $tarfile
|
|
Packit |
857059 |
|
|
Packit |
857059 |
case $srpm in
|
|
Packit |
857059 |
*ofa_kernel*)
|
|
Packit |
857059 |
if [ $patch_kernel = y ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "Un-Patching ofa_kernel for $kernel_ver..."
|
|
Packit |
857059 |
(
|
|
Packit |
857059 |
cd src
|
|
Packit |
857059 |
# TBD - undo ofed_scripts/ofed_patch.sh
|
|
Packit |
857059 |
# need an unapply option or a separate unpatch script
|
|
Packit |
857059 |
echo "build_srpms: ERROR: -p option not implemented" >&2; exit 1
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
;;
|
|
Packit |
857059 |
esac
|
|
Packit |
857059 |
|
|
Packit |
857059 |
rm -rf SOURCES SPECS SRPMS
|
|
Packit |
857059 |
mkdir SOURCES SPECS SRPMS
|
|
Packit |
857059 |
|
|
Packit |
857059 |
# copy all the source files to the proper directory name
|
|
Packit |
857059 |
# omit CVS directories
|
|
Packit |
857059 |
# Note we can't symlink because we need tar below to not follow symlinks
|
|
Packit |
857059 |
(
|
|
Packit |
857059 |
mkdir SOURCES/$srcdir;
|
|
Packit |
857059 |
cd src; find . -name CVS -prune -o -name '*~' -prune -o -print|cpio -pdum ../SOURCES/$srcdir
|
|
Packit |
857059 |
if [ $? != 0 -o ! -e ../SOURCES/$srcdir ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to create: $package/SOURCES/$srcdir" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
[ $? -eq 0 ] || exit 1
|
|
Packit |
857059 |
|
|
Packit |
857059 |
# create the final tarfile which will be included in the srpm
|
|
Packit |
857059 |
(
|
|
Packit |
857059 |
cd SOURCES
|
|
Packit |
857059 |
# set timestamp order for files which are typically pregenerated
|
|
Packit |
857059 |
# this avoids the need to upgrade to autoconf 2.60 on older distros
|
|
Packit |
857059 |
find $srcdir -name 'configure.in'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
find $srcdir -name '*.m4'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
find $srcdir -name 'configure'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
find $srcdir -name 'config.status'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
find $srcdir -name 'Makefile.in'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
find $srcdir -name '*h.in'|xargs -r touch
|
|
Packit |
857059 |
sleep 1
|
|
Packit |
857059 |
|
|
Packit |
857059 |
tar cf$taropt $tarfile $vopt $srcdir
|
|
Packit |
857059 |
if [ $? != 0 -o ! -e $tarfile ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to create: $package/SOURCES/$tarfile" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
rm -rf $srcdir
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
[ $? -eq 0 ] || exit 1
|
|
Packit |
857059 |
|
|
Packit |
857059 |
if [ x"$otherfiles" != x ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
cp $otherfiles SOURCES/
|
|
Packit |
857059 |
if [ $? != 0 ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to copy: $otherfiles to $package/SOURCES" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
|
|
Packit |
857059 |
cp $specfile SPECS/$specfile
|
|
Packit |
857059 |
if [ $? != 0 -o ! -e SPECS/$specfile ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to create: $package/SPECS/$specfile" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
|
|
Packit |
857059 |
checkfiles || exit 1
|
|
Packit |
857059 |
rpmbuild --nodeps -bs --define "_topdir `pwd`" SPECS/$specfile
|
|
Packit |
857059 |
if [ $? != 0 -o ! -e SRPMS/$srpm ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to create: $package/SRPMS/$srpm" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
cp SRPMS/$srpm $srpms_dir
|
|
Packit |
857059 |
echo "Built $package/SRPMS/$srpm"
|
|
Packit |
857059 |
if [ $? != 0 -o ! -e $srpms_dir/$srpm ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "$srpm: ERROR: unable to create: $srpms_dir/$srpm" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
if [ "$clean" = y ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
rm -rf SOURCES SPECS SRPMS
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
echo "Copied $package/SRPMS/$srpm to $srpms_dir/$srpm"
|
|
Packit |
857059 |
done
|
|
Packit |
857059 |
)
|
|
Packit |
857059 |
if [ $? -ne 0 ]
|
|
Packit |
857059 |
then
|
|
Packit |
857059 |
echo "build_srpms: ERROR building $package" >&2
|
|
Packit |
857059 |
exit 1
|
|
Packit |
857059 |
fi
|
|
Packit |
857059 |
done
|