/[gentoo-x86]/eclass/savedconfig.eclass
Gentoo

Contents of /eclass/savedconfig.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.16 - (show annotations) (download)
Tue Dec 27 17:55:12 2011 UTC (2 years, 11 months ago) by fauli
Branch: MAIN
Changes since 1.15: +3 -3 lines
Update copyright years in headers

1 # Copyright 1999-2011 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/savedconfig.eclass,v 1.15 2011/07/26 17:35:12 zmedico Exp $
4
5 # @ECLASS: savedconfig.eclass
6 # @MAINTAINER:
7 # base-system@gentoo.org
8 # @BLURB: common API for saving/restoring complex configuration files
9 # @DESCRIPTION:
10 # It is not uncommon to come across a package which has a very fine
11 # grained level of configuration options that go way beyond what
12 # USE flags can properly describe. For this purpose, a common API
13 # of saving and restoring the configuration files was developed
14 # so users can modify these config files and the ebuild will take it
15 # into account as needed.
16
17 inherit portability
18
19 IUSE="savedconfig"
20
21 # @FUNCTION: save_config
22 # @USAGE: <config files to save>
23 # @DESCRIPTION:
24 # Use this function to save the package's configuration file into the
25 # right location. You may specify any number of configuration files,
26 # but just make sure you call save_config with all of them at the same
27 # time in order for things to work properly.
28 save_config() {
29 if [[ ${EBUILD_PHASE} != "install" ]]; then
30 die "Bad package! save_config only for use in src_install functions!"
31 fi
32 [[ -z "${ED}" ]] && ED=${D}
33 case $# in
34 0) die "Tell me what to save"
35 ;;
36 1) if [[ -f "$1" ]]; then
37 dodir /etc/portage/savedconfig/${CATEGORY}
38 cp "$1" "${ED}"/etc/portage/savedconfig/${CATEGORY}/${PF} \
39 || die "Failed to save $1"
40 else
41 dodir /etc/portage/savedconfig/${CATEGORY}/${PF}
42 treecopy "$1" "${ED}"/etc/portage/savedconfig/${CATEGORY}/${PF} \
43 || die "Failed to save $1"
44 fi
45 ;;
46 *)
47 dodir "${PORTAGE_CONFIGROOT}"/etc/portage/savedconfig/${CATEGORY}/${PF}
48 treecopy $* "${D}/${PORTAGE_CONFIGROOT}"/etc/portage/savedconfig/${CATEGORY}/${PF} \
49 || die "Failed to save $1"
50 esac
51 elog "Your configuration for ${CATEGORY}/${PF} has been saved in "
52 elog "/etc/portage/savedconfig/${CATEGORY}/${PF} for your editing pleasure."
53 elog "You can edit these files by hand and remerge this package with"
54 elog "USE=savedconfig to customise the configuration."
55 elog "You can rename this file/directory to one of the following for"
56 elog "its configuration to apply to multiple versions:"
57 elog '${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/'
58 elog '[${CTARGET}|${CHOST}|""]/${CATEGORY}/[${PF}|${P}|${PN}]'
59 }
60
61 # @FUNCTION: restore_config
62 # @USAGE: <config files to restore>
63 # @DESCRIPTION:
64 # Restores the configuation saved ebuild previously potentially with user edits.
65 # You can restore a single file or a whole bunch, just make sure you call
66 # restore_config with all of the files to restore at the same time.
67 #
68 # Config files can be laid out as:
69 # @CODE
70 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CTARGET}/${CATEGORY}/${PF}
71 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CHOST}/${CATEGORY}/${PF}
72 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CATEGORY}/${PF}
73 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CTARGET}/${CATEGORY}/${P}
74 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CHOST}/${CATEGORY}/${P}
75 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CATEGORY}/${P}
76 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CTARGET}/${CATEGORY}/${PN}
77 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CHOST}/${CATEGORY}/${PN}
78 # ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CATEGORY}/${PN}
79 # @CODE
80 restore_config() {
81 use savedconfig || return
82
83 case ${EBUILD_PHASE} in
84 unpack|compile|configure|prepare) ;;
85 *) die "Bad package! restore_config only for use in src_{unpack,compile,configure,prepare} functions!" ;;
86 esac
87 local found check configfile
88 local base=${PORTAGE_CONFIGROOT}/etc/portage/savedconfig
89 for check in {${CATEGORY}/${PF},${CATEGORY}/${P},${CATEGORY}/${PN}}; do
90 configfile=${base}/${CTARGET}/${check}
91 [[ -r ${configfile} ]] || configfile=${base}/${CHOST}/${check}
92 [[ -r ${configfile} ]] || configfile=${base}/${check}
93 einfo "Checking existence of ${configfile} ..."
94 if [[ -r "${configfile}" ]]; then
95 einfo "found ${configfile}"
96 found=${configfile};
97 break;
98 fi
99 done
100 if [[ -f ${found} ]]; then
101 elog "Building using saved configfile ${found}"
102 if [ $# -gt 0 ]; then
103 cp -pPR "${found}" "$1" || die "Failed to restore ${found} to $1"
104 else
105 die "need to know the restoration filename"
106 fi
107 elif [[ -d ${found} ]]; then
108 elog "Building using saved config directory ${found}"
109 local dest=${PWD}
110 pushd "${found}" > /dev/null
111 treecopy . "${dest}" || die "Failed to restore ${found} to $1"
112 popd > /dev/null
113 else
114 # maybe the user is screwing around with perms they shouldnt #289168
115 if [[ ! -r ${base} ]] ; then
116 eerror "Unable to read ${base} -- please check its permissions."
117 die "Reading config files failed"
118 fi
119 ewarn "No saved config to restore - please remove USE=savedconfig or"
120 ewarn "provide a configuration file in ${PORTAGE_CONFIGROOT}/etc/portage/savedconfig/${CATEGORY}/${PN}"
121 ewarn "Your config file(s) will not be used this time"
122 fi
123 }

  ViewVC Help
Powered by ViewVC 1.1.20