summaryrefslogtreecommitdiff
blob: efc9b7dbb8b1868b6c054bea045ed224fb354645 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/zproduct.eclass,v 1.24 2006/05/28 13:18:39 radek Exp $
# Author: Jason Shoemaker <kutsuya@gentoo.org>

# This eclass is designed to streamline the construction of
# ebuilds for new zope products

EXPORT_FUNCTIONS src_install pkg_prerm pkg_postinst pkg_config

DESCRIPTION="This is a zope product"
#HOMEPAGE=""
#SRC_URI=""

RDEPEND="net-zope/zope
	app-admin/zprod-manager"

IUSE=""
SLOT="0"
KEYWORDS="x86 ~ppc"
S=${WORKDIR}

ZI_DIR="${ROOT}/var/lib/zope/"
ZP_DIR="${ROOT}/usr/share/zproduct"
DOT_ZFOLDER_FPATH="${ZP_DIR}/${PF}/.zfolder.lst"

zproduct_src_install() {
	## Assume that folders or files that shouldn't be installed
	#  in the zproduct directory have been already been removed.
	## Assume $S set to the parent directory of the zproduct(s).

	debug-print-function ${FUNCNAME} ${*}
	[ -n "${ZPROD_LIST}" ] || die "ZPROD_LIST isn't defined."
	[ -z "${1}" ] && zproduct_src_install all

	# set defaults
	into ${ZP_DIR}
	dodir ${ZP_DIR}/${PF}

	while [ -n "$1" ] ; do
		case ${1} in
			do_zpfolders)
				## Create .zfolders.lst from $ZPROD_LIST.
				debug-print-section do_zpfolders
				for N in ${ZPROD_LIST} ; do
					echo ${N} >> ${D}/${DOT_ZFOLDER_FPATH}
				done
				;;
			do_docs)
				#*Moves txt docs
				debug-print-section do_docs
				docs_move
				for ZPROD in ${ZPROD_LIST} ; do
					docs_move ${ZPROD}/
				done
				;;
			do_install)
				debug-print-section do_install
				# Copy everything that's left to ${D}${ZP_DIR}
				# modified to not copy ownership (QA)
				cp --recursive --no-dereference --preserve=timestamps,mode,links ${S}/* ${D}/${ZP_DIR}/${PF}
				;;
			all)
				debug-print-section all
				zproduct_src_install do_zpfolders do_docs do_install ;;
		esac
		shift
	done
	debug-print "${FUNCNAME}: result is ${RESULT}"
}

docs_move() {
	# if $1 == "/", then this breaks.
	if [ -n "$1" ] ; then
		docinto $1
	else
		docinto /
	fi
	dodoc $1HISTORY.txt $1README{.txt,} $1INSTALL{.txt,} > /dev/null 2>/dev/null
	dodoc $1AUTHORS $1COPYING $1CREDITS.txt $1TODO{.txt,} > /dev/null 2>/dev/null
	dodoc $1LICENSE{.GPL,.txt,} $1CHANGES{.txt,} > /dev/null 2>/dev/null
	dodoc $1DEPENDENCIES.txt $1FAQ.txt $1UPGRADE.txt > /dev/null 2>/dev/null
	for item in ${MYDOC} ; do
		dodoc ${1}${item} > /dev/null 2>/dev/null
	done
}

zproduct_pkg_postinst() {
	#*check for multiple zinstances, if several display install help msg.

	#*Use zprod-update to install this zproduct to the default zinstance.
	debug-print-function ${FUNCNAME} ${*}

	# this is a shared directory, so root should be owner;
	# zprod-manager or whatever is used to copy products into the
	# instances has to take care of setting the right permissions in
	# the target directory

	chown -R root:root ${ZP_DIR}/${PF}
	# make shure there is nothing writable in the new dir, and all is readable
	chmod -R go-w,a+rX ${ZP_DIR}/${PF}
	einfo ">>> Installing ${PF} into the \"$(zope-config --zidef-get)\" zinstance ..."
	${ROOT}/usr/sbin/zprod-manager add ${ZP_DIR}/${PF}
}

# This function is deprecated! Still used, until a new system developed.

zproduct_pkg_prerm() {
	# remove this zproduct from all zinstances.
	# process zinstance.lst and proceed with zprod-update del
	debug-print-function ${FUNCNAME} ${*}
	ZINST_LST=$(ls /var/lib/zope/)
	if [ "${ZINST_LST}" ] ; then
		# first check and warn on any installed products into instances
		ARE_INSTALLED=0
		for N in ${ZINST_LST} ; do
			if [ -s $DOT_ZFOLDER_FPATH ]
			then
				# check only if installed product has non empty folder lists
				#
				# for every fodler inside product ...
				for PFOLD in `cat $DOT_ZFOLDER_FPATH`
				do
					# ... check if its in instance.
					if [ -d "${ZI_DIR}${N}/Products/${PFOLD}" ]
					then
						ARE_INSTALLED=$[ARE_INSTALLED + 1]
					fi
				done
			fi
		done
		# Info and wait ...
		if [ $ARE_INSTALLED -gt 0 ]
		then
			#TODO: should use ebeep and epause, but i got some inheritance errors on eutils
			#so as for now i use local version. in futuure we should inherit ueilts
			ewarn "Detected at least $ARE_INSTALLED copies of product being removed."
			ewarn "Sleeping 10seconds, please use CTRL+C to abort!"
			echo -ne "\a"
			sleep 10
		fi

		ewarn "Uninstalling from all zinstances ..."
		for N in ${ZINST_LST} ; do
			${ROOT}/usr/sbin/zprod-manager del ${ZP_DIR}/${PF} ${ZI_DIR}${N}
		done
	fi
}

# Add this zproduct to the top zinstance.

zproduct_pkg_config() {
	einfo "To add zproducts to other zinstances execute:"
	einfo "\tzprod-manager add"
}