0
|
1 # Copyright 1999-2008 Gentoo Foundation
|
|
2 # Distributed under the terms of the GNU General Public License v2
|
|
3 # $Header: /var/cvsroot/gentoo-x86/dev-db/postgresql/postgresql-8.2.6.ebuild,v 1.1 2008/01/13 01:44:21 mjolnir Exp $
|
|
4
|
|
5 inherit eutils flag-o-matic multilib toolchain-funcs versionator
|
|
6
|
|
7 KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~sparc-fbsd ~x86 ~x86-fbsd"
|
|
8
|
|
9 MY_PV="${PV/_rc/RC}"
|
|
10 DESCRIPTION="Sophisticated and powerful Object-Relational DBMS."
|
|
11 HOMEPAGE="http://www.postgresql.org/"
|
|
12 SRC_URI="mirror://postgresql/source/v${MY_PV}/${PN}-${MY_PV}.tar.bz2"
|
|
13 LICENSE="POSTGRESQL"
|
|
14 SLOT="0"
|
|
15 IUSE="doc kerberos kernel_linux nls pam perl pg-intdatetime python readline selinux ssl tcl test xml zlib"
|
|
16 RESTRICT="nomirror"
|
|
17 S="${WORKDIR}/${PN}-${MY_PV}"
|
|
18
|
|
19 RDEPEND="~dev-db/libpq-${PV}
|
|
20 >=sys-libs/ncurses-5.2
|
|
21 kerberos? ( virtual/krb5 )
|
|
22 pam? ( virtual/pam )
|
|
23 perl? ( >=dev-lang/perl-5.6.1-r2 )
|
|
24 python? ( >=dev-lang/python-2.2 dev-python/egenix-mx-base )
|
|
25 readline? ( >=sys-libs/readline-4.1 )
|
|
26 selinux? ( sec-policy/selinux-postgresql )
|
|
27 ssl? ( >=dev-libs/openssl-0.9.6-r1 )
|
|
28 tcl? ( >=dev-lang/tcl-8 )
|
|
29 xml? ( dev-libs/libxml2 dev-libs/libxslt )
|
|
30 zlib? ( >=sys-libs/zlib-1.1.3 )"
|
|
31 DEPEND="${RDEPEND}
|
|
32 sys-devel/autoconf
|
|
33 >=sys-devel/bison-1.875
|
|
34 nls? ( sys-devel/gettext )
|
|
35 xml? ( dev-util/pkgconfig )"
|
|
36
|
|
37 PG_DIR="/var/lib/postgresql"
|
|
38 [[ -z "${PG_MAX_CONNECTIONS}" ]] && PG_MAX_CONNECTIONS="512"
|
|
39
|
|
40 pkg_setup() {
|
|
41 if [[ -f "${PG_DIR}/data/PG_VERSION" ]] ; then
|
|
42 if [[ $(cat "${PG_DIR}/data/PG_VERSION") != $(get_version_component_range 1-2) ]] ; then
|
|
43 eerror "PostgreSQL ${PV} cannot upgrade your existing databases, you must"
|
|
44 eerror "use pg_dump to export your existing databases to a file, and then"
|
|
45 eerror "pg_restore to import them when you have upgraded completely."
|
|
46 eerror "You must remove your entire database directory to continue."
|
|
47 eerror "(database directory = ${PG_DIR})."
|
|
48 die "Remove your database directory to continue"
|
|
49 fi
|
|
50 fi
|
|
51 enewgroup postgres 70
|
|
52 enewuser postgres 70 /bin/bash /var/lib postgres
|
|
53 }
|
|
54
|
|
55 src_unpack() {
|
|
56 unpack ${A}
|
|
57 cd "${S}"
|
|
58
|
|
59 epatch "${FILESDIR}/${PN}-${PV}-gentoo.patch"
|
|
60 epatch "${FILESDIR}/${PN}-${PV}-sh.patch"
|
|
61
|
|
62 # Prepare package for future tests
|
|
63 if use test ; then
|
|
64 # Fix sandbox violation; note that we're stripping redundant slashes
|
|
65 # from ${S}, because otherwise the test would fail.
|
|
66 sed -e "s|/no/such/location|${S/\/\//\/}/src/test/regress/tmp_check/no/such/location|g" -i src/test/regress/{input,output}/tablespace.source
|
|
67
|
|
68 # We need to run the tests as a non-root user, portage seems the most fitting here,
|
|
69 # so if userpriv is enabled, we use it directly. If userpriv is disabled, we need to
|
|
70 # su - to a valid user, portage again, so we patch the test-scripts to do that.
|
|
71 mkdir -p "${S}/src/test/regress/tmp_check"
|
|
72 chown portage "${S}/src/test/regress/tmp_check"
|
|
73 einfo "Tests will be run as user portage."
|
|
74 if ! hasq userpriv ${FEATURES} ; then
|
|
75 mkdir -p "${S}/src/test/regress/results"
|
|
76 chown portage "${S}/src/test/regress/results"
|
|
77 epatch "${FILESDIR}/${PN}-${PV}-regress_su.patch"
|
|
78 fi
|
|
79 fi
|
|
80 }
|
|
81
|
|
82 src_compile() {
|
|
83 filter-flags -ffast-math -feliminate-dwarf2-dups
|
|
84
|
|
85 econf --prefix=/usr \
|
|
86 --includedir=/usr/include/postgresql/pgsql \
|
|
87 --sysconfdir=/etc/postgresql \
|
|
88 --mandir=/usr/share/man \
|
|
89 --host=${CHOST} \
|
|
90 --with-docdir=/usr/share/doc/${PF} \
|
|
91 --libdir=/usr/$(get_libdir) \
|
|
92 --enable-depend \
|
|
93 $(use_with kerberos krb5) \
|
|
94 $(use_enable nls ) \
|
|
95 $(use_with pam) \
|
|
96 $(use_with perl) \
|
|
97 $(use_enable pg-intdatetime integer-datetimes ) \
|
|
98 $(use_with python) \
|
|
99 $(use_with readline) \
|
|
100 $(use_with ssl openssl) \
|
|
101 $(use_with tcl) \
|
|
102 $(use_with zlib) \
|
|
103 || die "configure failed"
|
|
104
|
|
105 emake -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" || die "main emake failed"
|
|
106
|
|
107 cd "${S}/contrib"
|
|
108 emake -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" || die "contrib emake failed"
|
|
109
|
|
110 if use xml ; then
|
|
111 cd "${S}/contrib/xml2"
|
|
112 emake -j1 LD="$(tc-getLD) $(get_abi_LDFLAGS)" || die "contrib/xml2 emake failed"
|
|
113 fi
|
|
114 }
|
|
115
|
|
116 src_install() {
|
|
117 if use perl ; then
|
|
118 mv -f "${S}/src/pl/plperl/GNUmakefile" "${S}/src/pl/plperl/GNUmakefile_orig"
|
|
119 sed -e "s:\$(DESTDIR)\$(plperl_installdir):\$(plperl_installdir):" \
|
|
120 "${S}/src/pl/plperl/GNUmakefile_orig" > "${S}/src/pl/plperl/GNUmakefile"
|
|
121 fi
|
|
122
|
|
123 cd "${S}"
|
|
124 emake -j1 DESTDIR="${D}" LIBDIR="${D}/usr/$(get_libdir)" install || die "main emake install failed"
|
|
125
|
|
126 cd "${S}/contrib"
|
|
127 emake -j1 DESTDIR="${D}" LIBDIR="${D}/usr/$(get_libdir)" install || die "contrib emake install failed"
|
|
128
|
|
129 if use xml ; then
|
|
130 cd "${S}/contrib/xml2"
|
|
131 emake -j1 DESTDIR="${D}" LIBDIR="${D}/usr/$(get_libdir)" install || die "contrib/xml2 emake install failed"
|
|
132 fi
|
|
133
|
|
134 cd "${S}"
|
|
135 dodoc README HISTORY
|
|
136
|
|
137 cd "${S}/doc"
|
|
138 dodoc FAQ* README.* TODO bug.template
|
|
139
|
|
140 if use doc ; then
|
|
141 cd "${S}/doc"
|
|
142 docinto FAQ_html
|
|
143 dodoc src/FAQ/*
|
|
144 docinto sgml
|
|
145 dodoc src/sgml/*.{sgml,dsl}
|
|
146 docinto sgml/ref
|
|
147 dodoc src/sgml/ref/*.sgml
|
|
148 docinto TODO.detail
|
|
149 dodoc TODO.detail/*
|
|
150 fi
|
|
151
|
|
152 newinitd "${FILESDIR}/postgresql.init-${PV%[._]*}" postgresql || die "Inserting init.d-file failed"
|
|
153 newconfd "${FILESDIR}/postgresql.conf-${PV%[._]*}" postgresql || die "Inserting conf.d-file failed"
|
|
154 }
|
|
155
|
|
156 pkg_postinst() {
|
|
157 elog "Execute the following command to setup the initial database environment:"
|
|
158 elog
|
|
159 elog "emerge --config =${PF}"
|
|
160 elog
|
|
161 elog "The autovacuum function, which was in contrib, has been moved to the main"
|
|
162 elog "PostgreSQL functions starting with 8.1."
|
|
163 elog "You can enable it in ${ROOT}/etc/postgresql/postgresql.conf."
|
|
164 elog
|
|
165 elog "If you need a global psqlrc-file, you can place it in '${ROOT}/etc/postgresql/'."
|
|
166 }
|
|
167
|
|
168 pkg_config() {
|
|
169 einfo "Creating the data directory ..."
|
|
170 mkdir -p "${PG_DIR}/data"
|
|
171 chown -Rf postgres:postgres "${PG_DIR}"
|
|
172 chmod 0700 "${PG_DIR}/data"
|
|
173
|
|
174 einfo "Initializing the database ..."
|
|
175 if [[ -f "${PG_DIR}/data/PG_VERSION" ]] ; then
|
|
176 eerror "PostgreSQL ${PV} cannot upgrade your existing databases."
|
|
177 eerror "You must remove your entire database directory to continue."
|
|
178 eerror "(database directory = ${PG_DIR})."
|
|
179 die "Remove your database directory to continue"
|
|
180 else
|
|
181 if use kernel_linux ; then
|
|
182 local SEM=`sysctl -n kernel.sem | cut -f-3`
|
|
183 local SEMMNI=`sysctl -n kernel.sem | cut -f4`
|
|
184 local SEMMNI_MIN=`expr \( ${PG_MAX_CONNECTIONS} + 15 \) / 16`
|
|
185 local SHMMAX=`sysctl -n kernel.shmmax`
|
|
186 local SHMMAX_MIN=`expr 500000 + 30600 \* ${PG_MAX_CONNECTIONS}`
|
|
187
|
|
188 if [ ${SEMMNI} -lt ${SEMMNI_MIN} ] ; then
|
|
189 eerror "The current value of SEMMNI is too low"
|
|
190 eerror "for PostgreSQL to run ${PG_MAX_CONNECTIONS} connections!"
|
|
191 eerror "Temporary setting this value to ${SEMMNI_MIN} while creating the initial database."
|
|
192 echo ${SEM} ${SEMMNI_MIN} > /proc/sys/kernel/sem
|
|
193 fi
|
|
194
|
|
195 su postgres -c "/usr/bin/initdb --pgdata ${PG_DIR}/data"
|
|
196
|
|
197 if [ ! `sysctl -n kernel.sem | cut -f4` -eq ${SEMMNI} ] ; then
|
|
198 echo ${SEM} ${SEMMNI} > /proc/sys/kernel/sem
|
|
199 ewarn "Restoring the SEMMNI value to the previous value."
|
|
200 ewarn "Please edit the last value of kernel.sem in /etc/sysctl.conf"
|
|
201 ewarn "and set it to at least ${SEMMNI_MIN}:"
|
|
202 ewarn
|
|
203 ewarn " kernel.sem = ${SEM} ${SEMMNI_MIN}"
|
|
204 ewarn
|
|
205 fi
|
|
206
|
|
207 if [ ${SHMMAX} -lt ${SHMMAX_MIN} ] ; then
|
|
208 eerror "The current value of SHMMAX is too low for postgresql to run."
|
|
209 eerror "Please edit /etc/sysctl.conf and set this value to at least ${SHMMAX_MIN}:"
|
|
210 eerror
|
|
211 eerror " kernel.shmmax = ${SHMMAX_MIN}"
|
|
212 eerror
|
|
213 fi
|
|
214 else
|
|
215 su postgres -c "/usr/bin/initdb --pgdata ${PG_DIR}/data"
|
|
216 fi
|
|
217
|
|
218 einfo
|
|
219 einfo "You can use the '${ROOT}/etc/init.d/postgresql' script to run PostgreSQL instead of 'pg_ctl'."
|
|
220 einfo
|
|
221 fi
|
|
222 }
|
|
223
|
|
224 src_test() {
|
|
225 cd "${S}"
|
|
226
|
|
227 einfo ">>> Test phase [check]: ${CATEGORY}/${PF}"
|
|
228 if ! emake -j1 check ; then
|
|
229 hasq test ${FEATURES} && die "Make check failed. See above for details."
|
|
230 hasq test ${FEATURES} || eerror "Make check failed. See above for details."
|
|
231 fi
|
|
232
|
|
233 einfo "Yes, there are other tests which could be run."
|
|
234 einfo "... and no, we don't plan to add/support them."
|
|
235 einfo "For now, the main regressions tests will suffice."
|
|
236 einfo "If you think other tests are necessary, please submit a"
|
|
237 einfo "bug including a patch for this ebuild to enable them."
|
|
238 }
|