nixpkgs/pkgs/desktops/kde-4.14/kde-package/kde-manifest.sh
ambrop7@gmail.com 1d8a197cba kde: Some tweaks to kde-manifest.sh
- Allow packages with different versions than $release (kde-workspace)
- Extra checks

This is a copy of 41faadbcce
but for 4.14.
2014-09-24 23:48:38 +02:00

174 lines
4 KiB
Bash
Executable file

#! /bin/sh
# Usage: download kde release to $dir, then run
# $0 $dir
dir="$1"
if [[ -z $(type -p xsltproc) ]]; then
echo "Please provide libxslt" >&2
exit 1
fi
release=$(ls "${dir}"/kdelibs-*.tar.xz | \
sed -e 's/.*kdelibs-//' -e 's/\.tar\.xz//')
# Detect release number & whether it is a stable release
if [[ $? -ne 0 || -z $release ]]; then
echo "'${dir}' is not a directory (or kdelibs...tar.xz doesn't exist)!" >&2
exit 1
fi
if [[ ${release##*.} -gt 50 ]]; then
stable="false"
else
stable="true"
fi
echo "Detected release ${release}" >&2
declare -A hash
declare -A version
declare -A modules
declare -a packages
declare -a top_level
if [[ ! -f ${dir}/kde_projects.xml ]]; then
if ! curl -o "${dir}/kde_projects.xml" -J http://projects.kde.org/kde_projects.xml; then
echo "Could not download http://projects.kde.org/kde_projects.xml to ${dir}/kde_projects.xml" >&2
exit 1
fi
fi
# xsltproc output declares -A module
eval `xsltproc kde-submodules.xslt ${dir}/kde_projects.xml`
module[kde-baseapps]=kde-baseapps
unset module[kactivities]
print_sane() {
echo "Called print_sane $1" >&2
sane="${1//[^a-z0-9_]/_}"
if [[ "$sane" != "$1" ]]; then
echo "Sane version is $sane" >&2
echo -n "sane=\"$sane\";"
fi
}
for i in `cd "${dir}"; ls *.tar.xz`; do
package=${i%.tar.xz}
v=${package##*-}
package=${i%-*}
packages+=( "$package" )
echo -n "${package}.. " >&2
hash[$package]=$(nix-hash --type sha256 --flat --base32 "${dir}/${i}")
echo -n ${hash[$package]} >&2
version[$package]=$v
if [ -n "${module[$package]}" ]; then
m="${module[$package]}"
echo " (${m})" >&2
modules[$m]=1
else
top_level+=( "$package" )
echo " (top-level)" >&2
fi
nix-store --add-fixed sha256 "${dir}/${i}" >&2
done
print_pkg_hash() {
echo " {name=\"${1}\";value=\"${hash[$1]}\";}"
}
print_pkg_version() {
echo " {name=\"${1}\";value=\"${version[$1]}\";}"
}
print_hashes(){
echo "hashes=builtins.listToAttrs["
for p in "${packages[@]}"; do print_pkg_hash "$p"; done
echo "];"
}
print_versions(){
echo "versions=builtins.listToAttrs["
for p in "${packages[@]}"; do print_pkg_version "$p"; done
echo "];"
}
print_split_module(){
echo -n "$1:" >&2
echo -e "{\n module=\"$1\";"
print_sane "$1"
echo " split=true;"
echo " pkgs=["
for p in "${packages[@]}"; do
if [[ "${module[$p]}" == "$1" ]]; then
echo -n " { name=\"$p\"; "
print_sane "$p"
echo " }"
echo -n " $p" >&2
fi
done
echo " ];"
echo "}"
echo >&2
}
print_mono_module(){
echo -en "{ module=\"$1\"; "
print_sane "$1"
echo -n "$1 ... " >&2
pkg=$(cd "$dir"; echo "$1"-*.tar.xz)
pkg="${pkg%.tar.xz}"
echo -n " split=false;"
cml="$pkg/CMakeLists.txt"
tar -xf "${dir}/$pkg.tar.xz" "$cml"
if grep '^[^#]*add_subdirectory' $cml >/dev/null; then
if grep '^[^#]*add_subdirectory' $cml | grep -v macro_optional_add_subdirectory >/dev/null; then
echo " is monolithic (has unconditionally added subdirs)" >&2
else
subdirs=( `grep '^[^#]*add_subdirectory' $cml |
sed -e 's/[^#]*add_subdirectory *( *\(.*\) *)/\1/' |
grep -v '\(doc\|cmake\)'` )
echo " seems splittable, subdirs: ${subdirs[*]}" >&2
echo -e "\n pkgs=["
for s in "${subdirs[@]}"; do
echo -en " {"
echo -n " name=\"${s//\//-}\"; "
print_sane "$s"
if [[ $s != "${s//\//-}" ]]; then
echo -n "subdir=\"$s\"; "
fi
echo "}"
done
echo -e " ];\n"
fi
else
echo " is monolithic (has no subdirs)" >&2
fi
rm $cml
rmdir "$pkg"
echo "}"
}
print_modules(){
echo "modules=["
echo "Printing modules splitted by upstream" >&2
for m in "${!modules[@]}"; do print_split_module "$m"; done
echo >&2
echo "Printing modules not splitted by upstream (${top_level[*]})" >&2
for m in "${top_level[@]}"; do print_mono_module "$m"; done
echo "];"
}
echo "Writing ${release}.nix" >&2
exec > "${release}.nix"
echo "{stable=${stable};"
print_hashes
print_versions
print_modules
echo "}"