public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Ulrich Mueller" <ulm@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/emacs-tools:eselect-emacs-1.1 commit in: /
Date: Fri, 22 Jun 2012 17:29:22 +0000 (UTC)	[thread overview]
Message-ID: <1181426548.3cb40485bd2f466917d962cec35745ecc71102e8.ulm@gentoo> (raw)

commit:     3cb40485bd2f466917d962cec35745ecc71102e8
Author:     Ulrich Müller <ulm <AT> gentoo <DOT> org>
AuthorDate: Sat Jun  9 22:02:28 2007 +0000
Commit:     Ulrich Mueller <ulm <AT> gentoo <DOT> org>
CommitDate: Sat Jun  9 22:02:28 2007 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/emacs-tools.git;a=commit;h=3cb40485

Add env-emacs.eselect, taken from eselect-1.0.9.

svn path=/emacs-extra/eselect-emacs/; revision=380

---
 env-emacs.eselect |  291 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 291 insertions(+), 0 deletions(-)

diff --git a/env-emacs.eselect b/env-emacs.eselect
new file mode 100644
index 0000000..5b977bf
--- /dev/null
+++ b/env-emacs.eselect
@@ -0,0 +1,291 @@
+# Copyright 1999-2005 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+inherit config multilib
+
+DESCRIPTION="Manage environment variables set in /etc/env.d/"
+MAINTAINER="kugelfang@gentoo.org"
+SVN_DATE='$Date$'
+VERSION=$(svn_date_to_version "${SVN_DATE}" )
+
+# Classes of env-vars
+SPACE_CLASS="CONFIG_PROTECT
+	CONFIG_PROTECT_MASK"
+PATH_CLASS="ADA_INCLUDE_PATH
+	ADA_OBJECT_PATH
+	CLASSPATH
+	INFODIR
+	INFOPATH
+	KDEDIRS
+	LDPATH
+	MANPATH
+	PATH
+	PKG_CONFIG_PATH
+	PRELINK_PATH
+	PRELINK_PATH_MASK
+	PYTHONPATH
+	ROOTPATH"
+
+# Recognized file formats:
+MIME_WHITELIST="text/plain text/x-makefile"
+
+# Configuration files
+ENVPROFILE="${ROOT}/etc/profile.env"
+LDCONFIG="${ROOT}/etc/ld.so.conf"
+PRELINK="${ROOT}/etc/prelink.conf"
+LDMTIMEDB="${ROOT}/var/lib/eselect/env/ld-mtimedb"
+
+# Keep all stored LDPATHS
+ESELECT_LDPATH=( )
+
+# is_envd_file()
+# Return successfuly when file can be sourced.
+is_envfile() {
+	local mime envfile=${1}
+
+	# Make sure it is a file and no backup file
+	[[ -f ${envfile} ]] || return 1
+	[[ -n ${envfile##*~} ]] || return 1
+	[[ ${envfile##*.} != bak ]] || return 1
+
+	mime=$(file -i ${envfile} | cut -d ' ' -f 2 | sed -e 's/;$//')
+	if ! has ${mime} ${MIME_WHITELIST} ; then
+		echo "Skipping non-text file ${envfile}."
+		return 1
+	fi
+
+	return 0
+}
+
+# update_envvar_classes()
+# Update the contents of *_CLASS based on env,d files.
+update_envvar_classes() {
+	local -a envfiles
+	local value
+	envfiles=( ${ROOT}/etc/env.d/* )
+
+	for envfile in ${envfiles[@]} ; do
+		is_envfile ${envfile} || continue
+
+		value=$(load_config ${envfile} COLON_SEPARATED)
+		for x in ${value} ; do
+			has ${x} ${PATH_CLASS} && continue
+			PATH_CLASS="${PATH_CLASS} ${x}"
+		done
+
+		value=$(load_config ${envfile} SPACE_SEPARATED)
+		for x in ${value} ; do
+			has ${x} ${SPACE_CLASS} && continue
+			SPACE_CLASS="${SPACE_CLASS} ${x}"
+		done
+	done
+}
+
+# create_profile_env()
+# Create profile.env file
+create_profile_env() {
+	local -a envfiles
+	local vars store items tmpprofile
+	envfiles=( ${ROOT}/etc/env.d/* )
+	
+	# Blank the file first!
+	tmpprofile="$(mktemp ${ROOT}/tmp/profile.XXXXXX)"
+	[[ $? = 0 ]] || die "Couldn't create temporary file!"
+
+	# Gather ye classes while ye may!
+	update_envvar_classes
+
+	# Parse all files in env.d
+	for envfile in ${envfiles[@]} ; do
+		is_envfile ${envfile} || continue
+
+		# Which vars are to be loaded?
+		# TODO: Change to bash magic?
+		vars=$(sed \
+			-e '/^#/d' -e '/^\s*$/d' -e '/^.*=/s/^\([^=]*\)=.*/\1/' \
+			${envfile})
+		[[ -z ${vars} ]] && continue
+		for var in ${vars} ; do
+			# Colon separated?...
+			if has ${var} ${PATH_CLASS} ; then
+				store=$(load_config ${tmpprofile} ${var})
+				if [[ -z ${store} ]] ; then
+					store=$(load_config ${envfile} ${var})
+				else
+					items="$(load_config ${envfile} ${var})"
+					items=( ${items//:/ } )
+					for item in ${items[@]} ; do
+						has ${item} ${store//:/ } && continue
+						store="${store}:${item}"
+					done
+				fi
+				store_config ${tmpprofile} ${var} "${store#:}"
+				continue
+			fi
+			# Space separated!...
+			if has ${var} ${SPACE_CLASS} ; then
+				store=( $(load_config ${tmpprofile} ${var}) )
+				if [[ -z ${store[@]} ]] ; then
+					store=( $(load_config ${envfile} ${var}) )
+				else
+					items=( $(load_config ${envfile} ${var}) )
+					for item in ${items[@]} ; do
+						has ${item} ${store[@]} && continue
+						store=( ${store[@]} ${item} )
+					done
+				fi
+				store_config ${tmpprofile} ${var} "${store[@]}"
+				continue
+			fi
+			# Ok, just a non-cummultative var.
+			store_config \
+				${tmpprofile} \
+				${var} \
+				"$(load_config ${envfile} ${var})"
+		done
+	
+		has LDPATH ${vars} || continue
+		# Store LDPATH for later processing
+		items=$(load_config ${envfile} LDPATH)
+		items=( ${items//:/ } )
+		for item in ${items[@]} ; do
+			has ${item} ${LDPATH[@]} && continue 
+			ESELECT_LDPATH=( ${ESELECT_LDPATH[@]} ${item} )
+		done
+	done
+
+	# Move new file onto old one
+	ENVPROFILE=$(canonicalise ${ENVPROFILE})
+	chmod a+r ${tmpprofile}
+	mv ${tmpprofile} ${ENVPROFILE} \
+		|| die "Couldn't move ${tmpprofile} to ${ENVPROFILE}!\n
+			Original profile.env remains unchanged."
+}
+
+# create_ld_so_conf()
+# Create ld.so.conf file based upon gathered LDPATHs
+create_ld_so_conf() {
+	[[ -z ${ESELECT_LDPATH[@]} ]] && die -q 'No LDPATHs found in ${ROOT}/etc/env.d/*'
+
+	local str
+	str="# ld.so.conf autogenerated by eselect\n"
+	str="${str}# Make all changes to /etc/env.d files\n"
+	for x in ${ESELECT_LDPATH[@]} ; do
+		str="${str}${x}\n"
+	done
+	echo -e "${str}" > $(canonicalise ${LDCONFIG})
+}
+
+# create_prelink_conf()
+# Create prelink.conf file based upon existing profile.env
+create_prelink_conf() {
+	[[ -z ${ESELECT_LDPATH[@]} ]] && die -q 'No LDPATHs found in ${ROOT}/etc/env.d/*'
+	local str
+	str="# prelink.conf autogenerated by eselect\n"
+	str="${str}# Make all changes to /etc/env.d files\n"
+	# Add default items
+	for x in /bin /sbin /usr/bin /usr/sbin ; do
+		str="${str}-l ${x}\n"	
+	done
+	for x in $(list_libdirs) ; do
+		[[ -e ${ROOT}/${x} ]] && str="${str}-l /${x}\n"
+		[[ -e ${ROOT}/usr/${x} ]] && str="${str}-l /usr/${x}\n"
+	done
+	prelink_mask=$(load_config ${ENVPROFILE} PRELINK_PATH_MASK)
+	prelink_mask=( ${prelink_mask//:/ } )
+	prelink="$(load_config ${ENVPROFILE} PATH)"
+	prelink="${prelink} $(load_config ${ENVPROFILE} PRELINK_PATH)"
+	prelink=( ${prelink//:/ } ${ESELECT_LDPATH[@]} )
+	for x in ${prelink[@]} ; do
+		has ${x} ${prelink_mask} && continue
+		[[ -z ${x##*/} ]] || x="${x}/"
+		str="${str}-h ${x}\n"
+	done
+	for x in ${prelink_mask[@]} ; do
+		str="${str}-b ${x}\n"
+	done
+	echo -e "${str}" > $(canonicalise ${PRELINK})
+}
+
+# need_links()
+# Returns true if any item of ${LDPATH} has been modified.
+need_links() {
+	local ret=1
+	for x in ${ESELECT_LDPATH[@]} ; do
+		y=${x//\//_}
+		y=${y//-/_}
+		y=${y//./_}
+		y=${y//+/_}
+		oldmtime=$(load_config ${LDMTIMEDB} "mtime${y}")
+		newmtime=$(stat -c %Y ${x} 2> /dev/null)
+		if [[ ${oldmtime} != ${newmtime} ]] ; then
+			ret=0
+			store_config ${LDMTIMEDB} "mtime${y}" ${newmtime}
+		fi
+	done
+	return ${ret}
+}
+
+# update_ldcache()
+# Update ld.so.cache using ldconfig
+update_ldcache() {
+	case $(uname -s) in
+	FreeBSD | DragonFly)
+		echo "Regenerating ${ROOT}/var/run/ld-elf.so.hints..."
+		(
+			cd /
+			ldconfig -elf -i -f "${ROOT:-/}var/run/ld-elf.so.hints" \
+				"${ROOT:-/}etc/ld.so.conf"
+		)
+		;;
+	*)
+		echo "Regenerating ${ROOT}/etc/ld.so.cache..."
+		(
+			cd /
+			ldconfig ${1} -r ${ROOT:-/}
+		)
+		;;
+	esac
+}
+
+### update action
+
+describe_update() {
+	echo "Collect environment variables from all scripts in /etc/env.d/"
+}
+
+describe_update_parameters() {
+	echo "<makelinks>"
+}
+
+describe_update_options() {
+	echo "makelinks : Specify \"makelinks\" to force updating of links"
+}
+
+do_update() {
+	if [[ -e ${ROOT}/etc/profile.env ]] ; then
+		[[ -w ${ROOT}/etc/profile.env ]] \
+			|| die -q "You need to be root!"
+	else
+		touch ${ROOT}/etc/profile.env
+	fi
+	
+	# Create configuration files
+	create_profile_env
+	create_ld_so_conf
+	[[ -e ${ROOT}/usr/sbin/prelink ]] && create_prelink_conf
+	makelinks=$( ( need_links || [[ ${1} == makelinks ]] ) && echo "-X" )
+	update_ldcache ${makelinks}
+		
+	# fix up ${ENVPROFILE}
+	cp ${ENVPROFILE} ${ENVPROFILE/.env/.csh}
+	sed -i \
+		-e "s/^\(.*\)=\"\(.*\)\"/export \1='\2'/" \
+		$(canonicalise ${ENVPROFILE})
+	sed -i \
+		-e "s/^\(.*\)=\"\(.*\)\"/setenv \1 '\2'/" \
+		$(canonicalise ${ENVPROFILE/.env/.csh})
+}
+
+# vim: ft=eselect



             reply	other threads:[~2012-06-22 17:31 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-22 17:29 Ulrich Mueller [this message]
  -- strict thread matches above, loose matches on Subject: below --
2012-06-22 17:29 [gentoo-commits] proj/emacs-tools:eselect-emacs-1.1 commit in: / Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller
2012-06-22 17:29 Ulrich Mueller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1181426548.3cb40485bd2f466917d962cec35745ecc71102e8.ulm@gentoo \
    --to=ulm@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox