diff options
author | Andres Loeh <kosmikus@gentoo.org> | 2004-11-22 15:24:17 +0000 |
---|---|---|
committer | Andres Loeh <kosmikus@gentoo.org> | 2004-11-22 15:24:17 +0000 |
commit | c348c2cd0ffc88f6f4c41dd77ca7716cefdc15df (patch) | |
tree | 0bb1c5ba366609dd821fda35e6c8cd6c968ae10f /dev-lang/ghc | |
parent | mips KEYWORDS (Manifest recommit) (diff) | |
download | gentoo-2-c348c2cd0ffc88f6f4c41dd77ca7716cefdc15df.tar.gz gentoo-2-c348c2cd0ffc88f6f4c41dd77ca7716cefdc15df.tar.bz2 gentoo-2-c348c2cd0ffc88f6f4c41dd77ca7716cefdc15df.zip |
Modified ebuild to use ghc-package.eclass (bug #69270) and to include ghc-updater script (bug #69142).
Diffstat (limited to 'dev-lang/ghc')
-rw-r--r-- | dev-lang/ghc/ChangeLog | 7 | ||||
-rwxr-xr-x | dev-lang/ghc/files/ghc-updater | 292 | ||||
-rw-r--r-- | dev-lang/ghc/ghc-6.2.2.ebuild | 25 |
3 files changed, 315 insertions, 9 deletions
diff --git a/dev-lang/ghc/ChangeLog b/dev-lang/ghc/ChangeLog index deb5e3ccf678..901402abbe55 100644 --- a/dev-lang/ghc/ChangeLog +++ b/dev-lang/ghc/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog for dev-lang/ghc # Copyright 2002-2004 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.45 2004/10/26 13:50:12 kosmikus Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ChangeLog,v 1.46 2004/11/22 15:24:17 kosmikus Exp $ + + 22 Nov 2004; Andres Loeh <kosmikus@gentoo.org> +files/ghc-updater, + ghc-6.2.2.ebuild: + Modified ebuild to use ghc-package.eclass (bug #69270) and to include + ghc-updater script (bug #69142). 26 Oct 2004; Andres Loeh <kosmikus@gentoo.org> ghc-6.2.2.ebuild: Modified CFLAG testing code, following discussion in bug #59709. diff --git a/dev-lang/ghc/files/ghc-updater b/dev-lang/ghc/files/ghc-updater new file mode 100755 index 000000000000..c2111b476f02 --- /dev/null +++ b/dev-lang/ghc/files/ghc-updater @@ -0,0 +1,292 @@ +#!/bin/sh +# +# This script has been modified by kosmikus and is based on +# python-updater by liquidx. +# +# It tries to update any package that provides a ghc library. +# This script can be run as many times as you like. It will log the +# results in /var/log/ghc-updater.log +# +# OLD_GHC_VER = old ghc version we are upgrading from +# NEW_GHC_VER = new ghc version we are upgrading to +# PKGS_EXCEPTIONS = packages that should NOT be re-emerged for any reason +# PKGS_MANUAL = packages that should be re-emerged even if they don't +# fit the criteria +# +# Runtime Variables: +# +# PKGS_TO_REMERGE = list of packages we deem to need re-emerging +# PKGS_OK = list of packages that should be merged without any problems +# PKGS_MISSING = list of packages that are installed, but cannot be merged +# because they have been pruned from portage +# PKGS_MASKED = list of packages that are installed, but masked. +# + +OLD_GHC_VER=$(ls -d /usr/lib/ghc-* | sed 's:^.*ghc-::' \ + | sort -g | tail -n 2 | head -n 1) +NEW_GHC_VER=$(ghc --version | sed 's:^.*version ::') + +PKGS_EXCEPTIONS="dev-lang/ghc dev-lang/ghc-bin" +PKGS_MANUAL="" +LOGFILE="/var/log/ghc-updater.log" + +# portage variables +PKG_DBDIR=/var/db/pkg + +# moved the portageq checks into a function to make command +# line parsing immediate + +setup_portdir() { + PORTDIR=`portageq portdir` + PORTDIR_OVERLAYS=`portageq portdir_overlay` +} + +PRETEND=0 +PKGS_TO_REMERGE="" +PKGS_COUNT_REMERGE=0 +PORTAGE_PYTHON="/usr/bin/python" + +usage() { + echo "usage: ghc-updater [options]" + echo " -h, -?, --help help" + echo " -p, --pretend pretend (don't do anything)" + echo " -o version set old ghc version to upgrade from [default: ${OLD_GHC_VER}]" + echo " -n version set new ghc version to upgrade to [default: ${NEW_GHC_VER}]" +} + +# +# +# Command Line Parsing +# +# +while [ -n "$1" ]; do + case "$1" in + -h | -\? | --help) + usage + exit 0 + ;; + -p | --pretend) + PRETEND=1 + ;; + -o) + shift + OLD_GHC_VER="$1" + ;; + -n) + shift + NEW_GHC_VER="$1" + ;; + *) + usage + echo "unrecognised option: $1" + ;; + esac + shift +done + +# load the gentoo-style info macros, but hack to get around +# it thinking this is an rc script +EBUILD="1" +source /sbin/functions.sh + +# misc helper functions +eloginfo() { + einfo $* + DATESTRING=`date +"%Y/%m/%d %H:%M:%S"` + (echo "${DATESTRING} - ${*}" >> ${LOGFILE}) 2>/dev/null +} + +elogecho() { + echo -n " " + echo $* + DATESTRING=`date +"%Y/%m/%d %H:%M:%S"` + (echo "${DATESTRING} - ${*}" >> ${LOGFILE}) 2>/dev/null +} + +elogerr() { + eerror $* + DATESTRING=`date +"%Y/%m/%d %H:%M:%S"` + (echo "${DATESTRING} ! ${*}" >> ${LOGFILE}) 2>/dev/null +} + +elog() { + DATESTRING=`date +"%Y/%m/%d %H:%M:%S"` + (echo "${DATESTRING} - ${*}" >> ${LOGFILE}) 2>/dev/null +} + +# +# Sanity check +# + +setup_portdir + +if [ -z "${PORTDIR}" ]; then + eerror "Unable to proceed. Can not find PORTDIR. Make sure the command:" + eerror " " + eerror " portageq portdir" + eerror " " + eerror "returns a value. If it doesn't, make sure you have updated to" + eerror "latest portage version." + eerror " " + eerror "Report bugs to http://bugs.gentoo.org/" + exit 1 +fi + +# +# +# Find all packages that have installed something in +# /usr/lib/ghc-${OLD_GHC_VER} +# /usr/lib/ghc-bin-${OLD_GHC_VER} +# +OLD_PACKAGES_DIR="/usr/lib/ghc-${OLD_GHC_VER} /usr/lib/ghc-bin-${OLD_GHC_VER} \ + /opt/ghc/lib/ghc-${OLD_GHC_VER}" + +eloginfo "Starting GHC Updater from ${OLD_GHC_VER} to ${NEW_GHC_VER} :" +eloginfo "Searching for packages with files in the directories:" +eloginfo "${OLD_PACKAGES_DIR}" + +# iterate thru all the installed package's contents +for content in `find ${PKG_DBDIR} -name CONTENTS`; do + # extract the category, package name and package version + CATPKGVER=$(echo ${content} | sed "s:${PKG_DBDIR}/\(.*\)/CONTENTS:\1:") + + # exclude packages that are an exception, like portage and python itself. + exception=0 + for exp in ${PKGS_EXCEPTIONS}; do + if [ -n "$(echo ${CATPKGVER} | grep ${exp})" ]; then + exception=1 + break; + fi + done + + if [ ${exception} = 1 ]; then + continue; + fi + + for d in ${OLD_PACKAGES_DIR}; do + if fgrep "${d}" ${content} > /dev/null; then + PKGS_TO_REMERGE="${PKGS_TO_REMERGE} ${CATPKGVER}" + elogecho "Adding to list: ${CATPKGVER}" + fi + done +done + +# now we have to do each emerge seperately because if an installed version +# does not have the corresponding ebuild in portage, then it will bail. + +eloginfo "Calculating Upgrade Package List .." + +PKGS_OK="" +PKGS_MASKED="" +PKGS_MISSING="" + +MASKED_STRING="been masked" +MISSING_STRING="there are no masked or unmasked ebuilds to satisfy" + +for pkg in ${PKGS_TO_REMERGE}; do + emerge_output="$(emerge -p \~$pkg 2>&1)" + if $(echo "${emerge_output}" | grep "${MASKED_STRING}" > /dev/null); then + PKGS_MASKED="${PKGS_MASKED} $pkg" + elogecho "$pkg is masked" + elif $(echo "${emerge_output}" | grep "${MISSING_STRING}" > /dev/null); then + PKGS_MISSING="${PKGS_MISSING} $pkg" + elogecho "$pkg is missing from portage" + else + PKGS_OK="${PKGS_OK} $pkg" + PKGS_COUNT_REMERGE=$((PKGS_COUNT_REMERGE + 1)) + fi +done + +# +# Use my super dumb package reordering algorithm that works most of the time +# + +eloginfo "Re-ordering packages to merge .." + +PKGS_OK_SORTED="$(${PORTAGE_PYTHON} ${PORTDIR}/dev-lang/python/files/depreorder.py ${PKGS_OK} | xargs)" + +eloginfo "Preparing to merge these packages in this order:" +for pkg in $PKGS_OK_SORTED; do + elogecho "$pkg" +done + +# we emerge each package seperately to ensure we know exactly which ones might +# cause an error, and then report it at the end + +COUNT=1 +PKGS_FAILED="" +if [ "${PRETEND}" != "1" ]; then + for pkg in ${PKGS_OK_SORTED}; do + eloginfo "Starting to merge ($COUNT/$PKGS_COUNT_REMERGE) $pkg .." + if ! emerge --oneshot --nodeps \~$pkg; then + PKGS_FAILED="${PKGS_FAILED} $pkg" + elogerr "Failed merging $pkg ($COUNT/$PKGS_COUNT_REMERGE)!" + fi + COUNT=$((COUNT+1)) + done +fi + +# final output stuff +OUTPUT_PKGS_MASKED="" +for pkg in ${PKGS_MASKED}; do OUTPUT_PKGS_MASKED="${OUTPUT_PKGS_MASKED} \~$pkg"; done +OUTPUT_PKGS_MISSING="" +for pkg in ${PKGS_MISSING}; do OUTPUT_PKGS_MISSING="${OUTPUT_PKGS_MISSING} $pkg"; done +OUTPUT_PKGS_FAILED="" +for pkg in ${PKGS_FAILED}; do OUTPUT_PKGS_FAILED="${OUTPUT_PKGS_FAILED} \~$pkg"; done + +if [ -n "${PKGS_FAILED}" -o -n "${PKGS_MISSING}" -o -n "${PKGS_MASKED}" ]; then + echo + ewarn "************************************************************" + ewarn "* Packages that still need to be manually emerged : *" + ewarn "************************************************************" + if [ -n "${OUTPUT_PKGS_MASKED}" ]; then + echo + ewarn " Masked Packages:" + ewarn " ----------------" + ewarn " Unmask the following packages (at your own risk) and " + ewarn " emerge them using this command after removing the '-p'" + ewarn " parameter." + echo + ewarn " emerge -p ${OUTPUT_PKGS_MASKED}" + echo + fi + if [ -n "${OUTPUT_PKGS_MISSING}" ]; then + echo + ewarn " Missing Packages:" + ewarn " -----------------" + ewarn " These packages need to be updated because their versions do" + ewarn " not exist in portage anymore." + echo + for x in ${OUTPUT_PKGS_MISSING}; do + echo " ${x}" + done + fi + if [ -n "${OUTPUT_PKGS_FAILED}" ]; then + echo + ewarn " Failed Packages:" + ewarn " ----------------" + ewarn " These packages have failed and need to be re-emerged again." + ewarn " Alternatively, try re-running this script again to see if it" + ewarn " can be fixed." + echo + ewarn " emerge -p ${OUTPUT_PKGS_FAILED}" + echo + fi + + elog "Python update completed with errors." + elog "Masked Packages:" + for x in ${PKGS_MASKED}; do + elog $x + done + elog "Missing Packages:" + for x in ${PKGS_MISSING}; do + elog $x + done + elog "Failed Packages:" + for x in ${PKGS_FAILED}; do + elog $x + done + elog "Update script completed." +else + eloginfo "GHC update completed successfully." +fi diff --git a/dev-lang/ghc/ghc-6.2.2.ebuild b/dev-lang/ghc/ghc-6.2.2.ebuild index 2fd905c1a0d2..acb678e0b03f 100644 --- a/dev-lang/ghc/ghc-6.2.2.ebuild +++ b/dev-lang/ghc/ghc-6.2.2.ebuild @@ -1,6 +1,6 @@ # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-6.2.2.ebuild,v 1.5 2004/11/10 18:32:41 kosmikus Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-lang/ghc/ghc-6.2.2.ebuild,v 1.6 2004/11/22 15:24:17 kosmikus Exp $ # Brief explanation of the bootstrap logic: # @@ -14,7 +14,7 @@ # can be removed once an forall after the first succesful install # of ghc. -inherit base flag-o-matic eutils +inherit base flag-o-matic eutils ghc-package IUSE="doc tetex opengl" @@ -38,6 +38,7 @@ DEPEND="virtual/ghc >=sys-apps/sed-3.02.80 >=sys-devel/flex-2.5.4a >=dev-libs/gmp-4.1 + >=sys-libs/readline-4.2 doc? ( >=app-text/openjade-1.3.1 >=app-text/sgml-common-0.6.3 ~app-text/docbook-sgml-dtd-3.1 @@ -53,11 +54,9 @@ RDEPEND="virtual/libc >=sys-devel/gcc-2.95.3 >=dev-lang/perl-5.6.1 >=dev-libs/gmp-4.1 + >=sys-libs/readline-4.2 opengl? ( virtual/opengl virtual/glu virtual/glut )" -# extend path to /opt/ghc/bin to guarantee that ghc-bin is found -GHCPATH="${PATH}:/opt/ghc/bin" - SUPPORTED_CFLAGS="" # Setup supported CFLAGS. @@ -118,7 +117,7 @@ src_compile() { # unset SGML_CATALOG_FILES because documentation installation # breaks otherwise ... # (--enable-threaded-rts is no longer needed) - PATH="${GHCPATH}" SGML_CATALOG_FILES="" econf \ + SGML_CATALOG_FILES="" econf \ ${myconf} || die "econf failed" # the build does not seem to work all that @@ -155,11 +154,14 @@ src_install () { fi echo SGMLDocWays="${mydoc}" >> mk/build.mk + # the libdir0 setting is needed for amd64, and does not + # harm for other arches emake -j1 ${insttarget} \ prefix="${D}/usr" \ datadir="${D}/usr/share/doc/${PF}" \ infodir="${D}/usr/share/info" \ mandir="${D}/usr/share/man" \ + libdir0="${D}/usr/$(get_libdir)" \ || die "make ${insttarget} failed" #need to remove ${D} from ghcprof script @@ -171,10 +173,17 @@ src_install () { cd ${S}/ghc dodoc README ANNOUNCE LICENSE VERSION -} + dosbin ${FILESDIR}/ghc-updater +} pkg_postinst () { + ghc-reregister einfo "If you have dev-lang/ghc-bin installed, you might" - einfo "want to unmerge it again. It is no longer needed." + einfo "want to unmerge it. It is no longer needed." + einfo " " + ewarn "If you upgrade from another ghc version, please run" + ewarn "/usr/sbin/ghc-updater to re-merge all ghc-based" + ewarn "Haskell libraries." } + |