#!/bin/sh echo echo "OCaml and thus also MetaOCaml are not binary compatible from version to version." echo "You (may) need to rebuild all installed packages with dependencies on dev-lang/ocaml." echo if [[ $1 == "-h" ]] || [[ $1 == "-help" ]] || [[ $1 == "--help" ]] then echo echo "Usage: ocaml-rebuild.sh [OPTIONS] [emerge_options]" echo echo "-h, --help Display this help and exit." echo echo "-f, --force Actually uninstall and reinstall all dependant packages." echo " If not given, just show the list." echo echo " --byname Run emerge based on package names, not exact versions." echo " This might upgrade (or downgrade) packages." echo " This won't fail, if the installed version's ebuild vanished from the tree." echo exit fi echo "Please wait..." echo if [ -x /usr/bin/equery ] then deps=$( (equery depends dev-lang/ocaml ; equery depends dev-ml/findlib) ) else echo "ATTENTION: You don't have gentoolkit installed on your system." echo "If you want me to build a propper list of all packages to be re-emerged," echo "please emerge gentoolkit and re-run this script." echo for dep in `find /var/db/pkg -name DEPEND -exec grep -l 'dev-lang/ocaml\\|dev-ml/findlib' {} \;` do dir=`dirname $dep` pkg=`basename $dir` category=`cat $dir/CATEGORY` deps=$( echo -e "$deps\n$category/$pkg" ) done fi if [[ $1 == "-byname" ]] || [[ $1 == "--byname" ]] then deps=$( echo "$deps" | sed 's/-[1234567890][^\/]\+$//g' ) else echo "If emerge complains about some package being 'not a valid package atom'" echo "please consider using --byname as an option to this script (see --help)." echo fi if [[ $1 == "-f" ]] || [[ $1 == "-force" ]] || [[ $1 == "--force" ]] then echo "Please find the list of removed packages at /tmp/ocaml-rebuild.txt for later reference." echo "${deps}" > /tmp/ocaml-rebuild.txt echo echo "Removing packages..." echo emerge -C ${deps} echo echo "Rebuilding packages..." echo emerge ${deps} echo echo "done." else echo "Here is a list of all packages to be rebuilt:" echo echo "${deps}" | while read next ; do echo " $next" ; done echo echo "If you agree, just run the following command or use this script with '-f' option." echo echo " $ emerge -C "${deps} echo echo " $ emerge "${deps} echo fi