2016-07-22 19:22:52 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
set -f
|
|
|
|
|
|
|
|
function packages_files {
|
|
|
|
local spec_file=$1
|
|
|
|
local exclude_pkg=$2
|
|
|
|
local in_files=false
|
|
|
|
local result=""
|
|
|
|
|
|
|
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
|
|
|
|
|
|
|
case $line in
|
|
|
|
"%files "*)
|
|
|
|
pkg=`echo "$line" | sed 's/%files.* \(\w\+\)/\1/g'`
|
|
|
|
if [[ $pkg == $exclude_pkg ]]; then
|
|
|
|
in_files=false
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
in_files=true
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
"%post"* | "%pre"* | "%preun"* | "%postun"*)
|
|
|
|
in_files=false
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
result=""
|
|
|
|
changed=true
|
|
|
|
while [[ $in_files == true ]] && [[ $changed == true ]]; do
|
|
|
|
changed=false
|
|
|
|
case $line in
|
|
|
|
"%if"* | "" | "%defattr"* | "%endif"* | "%else"* | "#"* | "%docdir"*)
|
|
|
|
break
|
|
|
|
;;
|
|
|
|
"%dir"*)
|
|
|
|
break # for now we'll ignore %dir entries
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
result=`echo "$line" | sed -e 's/%config \(.*\)/\1/g' \
|
|
|
|
-e 's/%config(.*) \(.*\)/\1/g' \
|
|
|
|
-e 's/%attr(.*) \(.*\)/\1/g' \
|
|
|
|
-e 's/%exclude \(.*\)/\1/g'`
|
|
|
|
if [[ ! $line == $result ]]; then
|
|
|
|
changed=true
|
|
|
|
line=$result
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# process path variables
|
|
|
|
result=`echo "$result" | sed -e 's!%{_bindir}!/usr/bin!g' \
|
|
|
|
-e 's!%{_docdir}!/usr/share/doc/packages!g' \
|
|
|
|
-e 's!%{_sbindir}!/usr/sbin!g' \
|
|
|
|
-e 's!%{_libdir}!/usr/lib64!g' \
|
|
|
|
-e 's!%{_mandir}!/usr/share/man!g' \
|
|
|
|
-e 's!%{_sysconfdir}!/etc!g' \
|
|
|
|
-e 's!%{_includedir}!/usr/include!g' \
|
|
|
|
-e 's!%{_unitdir}!/usr/lib/systemd/system!g' \
|
|
|
|
-e 's!%{python_sitelib}!/usr/lib/python2.7/site-packages!g' \
|
|
|
|
-e 's!%{_datadir}!/usr/share!g' \
|
|
|
|
-e 's!%{python_sitearch}!/usr/lib64/python2.7/site-packages!g' \
|
|
|
|
-e 's!%{_javadir}!/usr/share/java!g' \
|
|
|
|
-e 's!%{_libexecdir}!/usr/lib!g' \
|
|
|
|
-e 's!%{_prefix}!/usr!g' \
|
|
|
|
-e 's!%{_localstatedir}!/var!g' \
|
|
|
|
-e 's!%{_tmpfilesdir}!/usr/lib/tmpfiles.d!g' \
|
|
|
|
-e 's!%{_udevrulesdir}!/usr/lib/udev/rules.d!g'`
|
|
|
|
|
|
|
|
# sanity check
|
|
|
|
if [[ "$result" == "%"* ]]; then
|
|
|
|
echo "ERROR: unparsable file entry: $result"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo "$result"
|
|
|
|
done
|
|
|
|
done < $spec_file
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_package_summary {
|
|
|
|
local spec_file=$1
|
|
|
|
local pkg_name=$2
|
|
|
|
local in_package=false
|
|
|
|
|
|
|
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
|
|
|
|
|
|
|
case $line in
|
|
|
|
"%package "*)
|
|
|
|
pkg=`echo "$line" | sed 's/%package.* \(\w\+\)/\1/g'`
|
|
|
|
if [[ ! $pkg == $pkg_name ]]; then
|
|
|
|
in_package=false
|
|
|
|
else
|
|
|
|
in_package=true
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"%prep"* | "%build"* | "%install"*)
|
|
|
|
in_package=false
|
|
|
|
;;
|
|
|
|
"Summary:"*)
|
|
|
|
if [[ $in_package == true ]]; then
|
|
|
|
echo $line
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done < $spec_file
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_package_requires {
|
|
|
|
local spec_file=$1
|
|
|
|
local pkg_name=$2
|
|
|
|
local in_package=false
|
|
|
|
|
|
|
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
|
|
|
|
|
|
|
case $line in
|
|
|
|
"%package "*)
|
|
|
|
pkg=`echo "$line" | sed 's/%package.* \(\w\+\)/\1/g'`
|
|
|
|
if [[ ! $pkg == $pkg_name ]]; then
|
|
|
|
in_package=false
|
|
|
|
else
|
|
|
|
in_package=true
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"%prep"* | "%build"* | "%install"*)
|
|
|
|
in_package=false
|
|
|
|
;;
|
|
|
|
"Requires:"*)
|
|
|
|
if [[ $in_package == true ]]; then
|
|
|
|
echo $line
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
done < $spec_file
|
|
|
|
}
|
|
|
|
|
|
|
|
function get_package_description {
|
|
|
|
local spec_file=$1
|
|
|
|
local pkg_name=$2
|
|
|
|
local in_desc=false
|
|
|
|
|
|
|
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
|
|
|
|
|
|
|
case $line in
|
|
|
|
"%description "*)
|
|
|
|
pkg=`echo "$line" | sed 's/%description.* \(\w\+\)/\1/g'`
|
|
|
|
if [[ ! $pkg == $pkg_name ]]; then
|
|
|
|
in_desc=false
|
|
|
|
else
|
|
|
|
in_desc=true
|
|
|
|
fi
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
"%prep"* | "%build"* | "%install"* | "%package"* | "%if"* | "%endif"*)
|
|
|
|
in_desc=false
|
|
|
|
continue
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if [[ $in_desc == true ]]; then
|
|
|
|
echo "$line"
|
|
|
|
fi
|
|
|
|
done < $spec_file
|
|
|
|
}
|
|
|
|
|
|
|
|
function transform_spec_file {
|
|
|
|
local spec_file=$1
|
|
|
|
local include_pkg=$2
|
|
|
|
local rm_files=$3
|
|
|
|
local summary=$4
|
|
|
|
local description=$5
|
|
|
|
local requires=$6
|
|
|
|
local in_package=false
|
|
|
|
local in_files=false
|
|
|
|
local in_desc=false
|
|
|
|
|
|
|
|
while IFS='' read -r line || [[ -n "$line" ]]; do
|
|
|
|
|
|
|
|
case $line in
|
|
|
|
"%bcond_with ceph_test_package"*)
|
|
|
|
line="%bcond_without ceph_test_package"
|
|
|
|
;;
|
|
|
|
"Name:"*)
|
|
|
|
line="Name: $include_pkg"
|
|
|
|
;;
|
|
|
|
"Summary:"*)
|
|
|
|
if [[ $in_package == false ]]; then
|
|
|
|
line="$summary"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"Source0:"*)
|
|
|
|
line=`echo $line | sed 's/%{name}/ceph/g'`
|
|
|
|
;;
|
|
|
|
"%setup -q")
|
|
|
|
line="$line -n ceph-%version"
|
|
|
|
;;
|
|
|
|
"Requires:"*)
|
|
|
|
if [[ $in_package == false ]]; then
|
|
|
|
line=""
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"Requires(post):"*)
|
|
|
|
if [[ $in_package == false ]]; then
|
|
|
|
IFS=''
|
|
|
|
for r in "$requires"; do
|
|
|
|
echo "$r"
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"%description"*)
|
|
|
|
if [[ $in_package == false ]]; then
|
|
|
|
in_desc=true
|
|
|
|
echo "$line"
|
|
|
|
echo "$description"
|
|
|
|
echo ""
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"%package "*)
|
|
|
|
#pkg=`echo "$line" | sed 's/%package.* \(\w\+\)/\1/g'`
|
|
|
|
#if [[ $pkg == $include_pkg ]]; then
|
|
|
|
# in_package=false
|
|
|
|
#else
|
|
|
|
in_package=true
|
|
|
|
continue
|
|
|
|
#fi
|
|
|
|
in_desc=false
|
|
|
|
;;
|
|
|
|
"%prep"* | "%build"* | "%install"*)
|
|
|
|
in_package=false
|
|
|
|
in_desc=false
|
|
|
|
;;
|
|
|
|
"%files "*)
|
|
|
|
pkg=`echo "$line" | sed 's/%files.* \(\w\+\)/\1/g'`
|
|
|
|
if [[ $pkg == $include_pkg ]]; then
|
|
|
|
in_files=false
|
|
|
|
else
|
|
|
|
in_files=true
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
"%changelog"*)
|
|
|
|
in_files=false
|
|
|
|
;;
|
|
|
|
"%clean"*)
|
|
|
|
in_package=false
|
|
|
|
IFS=''
|
|
|
|
for rf in "$rm_files"; do
|
|
|
|
echo "$rf"
|
|
|
|
done
|
|
|
|
echo ""
|
|
|
|
echo "dirs=\`find %{buildroot} -type d -empty\`"
|
|
|
|
echo "while [[ -n \$dirs ]]; do"
|
|
|
|
echo " for d in \$dirs; do"
|
|
|
|
echo " rm -rf \$d"
|
|
|
|
echo " done"
|
|
|
|
echo "dirs=\`find %{buildroot} -type d -empty\`"
|
|
|
|
echo "done"
|
|
|
|
echo ""
|
|
|
|
;;
|
|
|
|
"#"* | "%"*)
|
|
|
|
in_desc=false
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
if [[ $in_package == false ]] && [[ $in_files == false ]] && [[ $in_desc == false ]]; then
|
|
|
|
echo $line
|
|
|
|
else
|
|
|
|
if [[ $line == "%if"* ]] || [[ $line == "%endif"* ]]; then
|
|
|
|
echo $line
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
done < $spec_file
|
|
|
|
}
|
|
|
|
|
|
|
|
function generate_rm_exclude_files {
|
|
|
|
local exclude_list=$1
|
|
|
|
local buildroot=$2
|
|
|
|
|
|
|
|
for f in $exclude_list; do
|
|
|
|
echo "rm -rf $buildroot$f"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2016-07-22 19:42:36 +02:00
|
|
|
function copy_changes_file {
|
|
|
|
local dest_pkg=$1
|
|
|
|
|
|
|
|
cp ceph.changes ${dest_pkg}.changes
|
|
|
|
}
|
|
|
|
|
2016-07-22 19:22:52 +02:00
|
|
|
PACKAGE="ceph-test"
|
|
|
|
SPEC_FILE="ceph.spec"
|
|
|
|
|
|
|
|
files=`packages_files $SPEC_FILE $PACKAGE`
|
|
|
|
if [[ "$?" == "1" ]]; then
|
|
|
|
echo "ERROR: "
|
|
|
|
echo $files
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
rm_files=`generate_rm_exclude_files "$files" "%{buildroot}"`
|
|
|
|
summ=`get_package_summary $SPEC_FILE $PACKAGE`
|
|
|
|
desc=`get_package_description $SPEC_FILE $PACKAGE`
|
|
|
|
reqs=`get_package_requires $SPEC_FILE $PACKAGE`
|
2016-07-22 19:42:36 +02:00
|
|
|
transform_spec_file $SPEC_FILE $PACKAGE "$rm_files" "$summ" "$desc" "$reqs" > $PACKAGE.spec
|
|
|
|
copy_changes_file $PACKAGE
|