summaryrefslogtreecommitdiff
blob: f311ea128c5f48f20b41faa0bd13c5b85e6218d8 (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
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

#
# Original Author: root
# Purpose: To handle the postgresql selection related tasks.
#

inherit versionator
ECLASS="postgresql"
INHERITED="$INHERITED $ECLASS"

# Usage: postgresql_version_in_range [version[ min_version[ max_version]]]
# Returns $?=0 if in range
postgresql_version_in_range() {
	local v="$1" min="$2" max="$3"
	if [[ ! -z "$min" ]] ; then
		version_compare "$min" "$v"
		[[ "$?" = "3" ]] && return 1
	fi
	if [[ ! -z "$max" ]] ; then
		version_compare "$max" "$v"
		[[ "$?" = "1" ]] && return 2
	fi
	return 0
}

# Usage: postgresql_get_versions_range [ min_version[ max_version]]
postgresql_get_versions_range() {
	local min="$1" max="$2"
	for s in /usr/lib/eselect-postgresql/slots/* ; do
		[[ -d "$s" ]] || continue
		local v="$(basename $s)"
		postgresql_version_in_range "$v" "$min" "$max" || continue
		echo "$v"
	done
}
# Usage: postgresql_get_sorted_versions [ min_version[ max_version]]
postgresql_get_sorted_versions() {
	version_sort $(postgresql_get_versions_range "$1" "$2")
}

# Usage: postgresql_find_version [min_version[ max_version[ strategy]]]
#	min_version - minimum supported version (empty string if any)
#	max_version - maximum supported version (empty string if any)
#	strategy	- best, worst (that is, if eselected version isn't in range)
#				  (best is default)
# Returns selected version string
postgresql_find_version() {
	local min="$1" max="$2" strategy="$3"
	local eselected="$(eselect postgresql show)"
	if [[ "$eselected" != "(none)" ]] ; then
		postgresql_version_in_range "$eselected" "$min" "$max" && { echo "$eselected" ; return 0; }
	fi
	local vers=( $(postgresql_get_sorted_versions "$min" "$max") )
	case "$strategy" in
		worst)
			echo "${vers[0]}"
			;;
		*)
			echo "${vers[${#vers[@]}-1]}"
			;;
	esac
}

# Usage: postgresql_get_bindir_for_slot slot
# Returns path to binaries for exact slot
postgresql_get_bindir_for_slot() {
	(for f in /usr/lib/eselect-postgresql/slots/$1/* ; do source $f ; done ; echo $postgres_bindir)
}

# Usage: postgresql_get_pgconfig_for_slot slot
# Returns path to pg_config for exact slot
postgresql_get_pgconfig_for_slot() {
	echo "$(for f in /usr/lib/eselect-postgresql/slots/$1/* ; do source $f ; done ; echo $postgres_bindir)/pg_config"
}

# Usage: postgresql_get_prefix_for_slot slot
# Returns the install prefix for exact slot
postgresql_get_prefix_for_slot() {
	(for f in /usr/lib/eselect-postgresql/slots/$1/* ; do source $f ; done ; echo $postgres_prefix)
}

# Usage: postgresql_get_service_for_slot slot
# Returns the name of init.d service for exact slot
postgresql_get_service_for_slot() {
	(for f in /usr/lib/eselect-postgresql/slots/$1/* ; do source $f ; done ; echo $postgres_service)
}

# Usage: postgresql_get_datadir_for_slot slot
# Returns the data(share) dir location for exact slot
postgresql_get_datadir_for_slot() {
	(for f in /usr/lib/eselect-postgresql/slots/$1/* ; do source $f ; done ; echo $postgres_datadir)
}

# Usage: postgresql_get_bindir [min_version[ max_version[ strategy]]]
#	See postgresql_find_version
# Returns path to binaries
postgresql_get_bindir() {
	postgresql_get_bindir_for_slot "$(postgresql_find_version "$1" "$2" "$3")"
}

# Usage: postgresql_get_pgconfig [min_version[ max_version[ strategy]]]
#	See postgresql_find_version
# Returns path to pg_config
postgresql_get_pgconfig() {
	echo "$(postgresql_get_bindir)/pg_config"
}