diff options
author | Aaron W. Swenson <titanofold@gentoo.org> | 2024-05-17 10:44:01 -0400 |
---|---|---|
committer | Aaron W. Swenson <titanofold@gentoo.org> | 2024-05-17 11:06:09 -0400 |
commit | 2a088fa873289bc6dc753117e93e50b6c9368ea3 (patch) | |
tree | 05217c14a5019966bbf0df2cc75c32b6cc247b8c /dev-db/postgresql | |
parent | dev-libs/tree-sitter-bash: Stabilize 0.21.0-r1 hppa, #930024 (diff) | |
download | gentoo-2a088fa873289bc6dc753117e93e50b6c9368ea3.tar.gz gentoo-2a088fa873289bc6dc753117e93e50b6c9368ea3.tar.bz2 gentoo-2a088fa873289bc6dc753117e93e50b6c9368ea3.zip |
dev-db/postgresql: Refresh live ebuild
Live ebuild brought current with production ebuilds.
Can now be used as the template for the next production slot.
Improved Meson targets, and fixed building manpages and
documentation. More tests now run under Meson with new dependencies.
Improved messaging with consideration that the server use flag will be
dropped eventually.
Documentation building is now optional, but the same resources are
needed to build manpages, so no change in deps for this. Further,
upstream plans to drop prebuilt man/doc from the tarballs starting with
17, so this is more permanent at this time.
No longer updates links managed by eselect when the ebuild's slot
doesn't match and, ergo, would not have impacted those links.
No longer installs README, HISTORY, or TODO since they contained nothing
of substance.
Function and variable order cleaned up (apparently src_test shouldn't be
the last function), and quite a bit more minor tweaks following
recommendations from Shellcheck.
Signed-off-by: Aaron W. Swenson <titanofold@gentoo.org>
Diffstat (limited to 'dev-db/postgresql')
-rw-r--r-- | dev-db/postgresql/postgresql-9999.ebuild | 307 |
1 files changed, 173 insertions, 134 deletions
diff --git a/dev-db/postgresql/postgresql-9999.ebuild b/dev-db/postgresql/postgresql-9999.ebuild index 7933efb78c75..e5eaa285027b 100644 --- a/dev-db/postgresql/postgresql-9999.ebuild +++ b/dev-db/postgresql/postgresql-9999.ebuild @@ -3,25 +3,38 @@ EAPI=8 -PYTHON_COMPAT=( python3_{10,11,12} ) +PYTHON_COMPAT=( python3_{10,11,12,13} ) +LLVM_COMPAT=( {15..18} ) +LLVM_OPTIONAL=1 -inherit flag-o-matic git-r3 linux-info meson pam python-single-r1 \ +inherit flag-o-matic linux-info llvm-r1 meson pam python-single-r1 \ systemd tmpfiles -KEYWORDS="" +DESCRIPTION="PostgreSQL RDBMS" +HOMEPAGE="https://www.postgresql.org/" +LICENSE="POSTGRESQL GPL-2" -SLOT="9999" +SLOT=$(ver_cut 1) -EGIT_REPO_URI="https://git.postgresql.org/git/postgresql.git" +if [[ $PV = *9999* ]] ; then + inherit git-r3 + EGIT_REPO_URI="https://git.postgresql.org/git/postgresql.git" +else + KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x64-solaris" -LICENSE="POSTGRESQL GPL-2" -DESCRIPTION="PostgreSQL RDBMS" -HOMEPAGE="https://www.postgresql.org/" + MY_PV=${PV/_/} + SRC_URI="https://ftp.postgresql.org/pub/source/v${MY_PV}/postgresql-${MY_PV}.tar.bz2" + S="${WORKDIR}/${PN}-${MY_PV}" +fi -IUSE="debug +icu kerberos ldap llvm +lz4 nls pam perl python +readline - selinux server systemd ssl static-libs tcl uuid xml zlib zstd" +IUSE="debug doc +icu kerberos ldap llvm +lz4 nls pam perl python +readline + selinux systemd ssl static-libs tcl test uuid xml zlib zstd" -REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )" +REQUIRED_USE=" +llvm? ( ${LLVM_REQUIRED_USE} ) +python? ( ${PYTHON_REQUIRED_USE} ) +" +RESTRICT="!test? ( test )" CDEPEND=" >=app-eselect/eselect-postgresql-2.0 @@ -32,20 +45,22 @@ virtual/libintl icu? ( dev-libs/icu:= ) kerberos? ( app-crypt/mit-krb5 ) ldap? ( net-nds/openldap:= ) -llvm? ( - sys-devel/llvm:= - sys-devel/clang:= -) +llvm? ( $(llvm_gen_dep ' + sys-devel/clang:${LLVM_SLOT} + sys-devel/llvm:${LLVM_SLOT} + ') ) lz4? ( app-arch/lz4 ) pam? ( sys-libs/pam ) -perl? ( >=dev-lang/perl-5.8:= ) +perl? ( >=dev-lang/perl-5.14:= ) python? ( ${PYTHON_DEPS} ) readline? ( sys-libs/readline:0= ) ssl? ( >=dev-libs/openssl-0.9.6-r1:0= ) systemd? ( sys-apps/systemd ) tcl? ( >=dev-lang/tcl-8:0= ) -uuid? ( dev-libs/ossp-uuid ) -xml? ( dev-libs/libxml2 dev-libs/libxslt ) +xml? ( + dev-libs/libxml2 + dev-libs/libxslt +) zlib? ( sys-libs/zlib ) zstd? ( app-arch/zstd ) " @@ -73,37 +88,38 @@ uuid? ( DEPEND="${CDEPEND} >=dev-lang/perl-5.8 -app-text/docbook-dsssl-stylesheets -app-text/docbook-sgml-dtd:4.5 -app-text/docbook-xml-dtd:4.5 -app-text/docbook-xsl-stylesheets -app-text/openjade -dev-libs/libxml2 -dev-libs/libxslt -sys-devel/bison app-alternatives/lex +sys-devel/bison nls? ( sys-devel/gettext ) xml? ( virtual/pkgconfig ) " + RDEPEND="${CDEPEND} selinux? ( sec-policy/selinux-postgresql ) " -pkg_pretend() { - if ! use server; then - elog "You are using a live ebuild that uses the current source code as it is" - elog "available from PostgreSQL's Git repository at emerge time. Given such," - elog "the Meson build files may be altered by upstream without notice and the" - elog "documentation for this live version is not readily available" - elog "online. Ergo, the ebuild maintainers will not support building a" - elog "client-only and/or document-free version." - ewarn "Building server anyway." - fi -} +# Openjade, docbook, XML, and XSLT are needed to generate manpages and +# any documentation that may be elected. +BDEPEND=" +app-text/openjade +app-text/docbook-dsssl-stylesheets +app-text/docbook-sgml-dtd:4.5 +app-text/docbook-xml-dtd:4.5 +app-text/docbook-xsl-stylesheets +dev-libs/libxml2 +dev-libs/libxslt +test? ( + >=dev-lang/perl-5.14:= + dev-perl/IPC-Run + virtual/perl-Test-Simple + virtual/perl-ExtUtils-MakeMaker +) +" pkg_setup() { CONFIG_CHECK="~SYSVIPC" linux-info_pkg_setup + use llvm && llvm-r1_pkg_setup use python && python-single-r1_pkg_setup } @@ -118,42 +134,30 @@ src_prepare() { sed 's/@install_bin@/install -c/' -i src/Makefile.global.in || die if use pam ; then - sed -e "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \ + sed "s/\(#define PGSQL_PAM_SERVICE \"postgresql\)/\1-${SLOT}/" \ -i src/backend/libpq/auth.c || \ die 'PGSQL_PAM_SERVICE rename failed.' fi - eapply_user + default } src_configure() { - local emesonargs=() - case ${CHOST} in *-darwin*|*-solaris*) use nls && append-libs intl ;; esac + export LDFLAGS_SL="${LDFLAGS}" + export LDFLAGS_EX="${LDFLAGS}" - local i uuid_config="" - if use uuid; then - for i in ${UTIL_LINUX_LIBC[@]}; do - use ${i} && uuid_config="-Duuid=e2fs" - done - - emesonargs+=( ${uuid_config:-"-Duuid=ossp"} ) - fi - - use debug && emesonargs+=( "--debug" ) - - local PO="${EPREFIX}" - emesonargs+=( - --prefix="${PO}/usr/$(get_libdir)/postgresql-${SLOT}" - --datadir="${PO}/usr/share/postgresql-${SLOT}" - --includedir="${PO}/usr/include/postgresql-${SLOT}" - --mandir="${PO}/usr/share/postgresql-${SLOT}/man" - --sysconfdir="${PO}/etc/postgresql-${SLOT}" - -Dsystem_tzdata="${PO}/usr/share/zoneinfo" + local emesonargs=( + --prefix="${EPREFIX}/usr/$(get_libdir)/postgresql-${SLOT}" + --datadir="${EPREFIX}/usr/share/postgresql-${SLOT}" + --includedir="${EPREFIX}/usr/include/postgresql-${SLOT}" + --mandir="${EPREFIX}/usr/share/postgresql-${SLOT}/man" + --sysconfdir="${EPREFIX}/etc/postgresql-${SLOT}" + -Dsystem_tzdata="${EPREFIX}/usr/share/zoneinfo" $(meson_feature icu) $(meson_feature kerberos gssapi) $(meson_feature ldap) @@ -170,60 +174,64 @@ src_configure() { $(meson_feature xml libxslt) $(meson_feature zlib) $(meson_feature zstd) + $(meson_use !alpha spinlocks) ) + use debug && emesonargs+=( "--debug" ) use ssl && emesonargs+=( "-Dssl=openssl" ) - use alpha && emesonargs+=( "-Dspinlocks=false" ) - export LDFLAGS_SL="${LDFLAGS}" - export LDFLAGS_EX="${LDFLAGS}" + local i uuid_config="" + if use uuid; then + for i in ${UTIL_LINUX_LIBC[@]}; do + use ${i} && uuid_config="-Duuid=e2fs" + done + + emesonargs+=( ${uuid_config:-"-Duuid=ossp"} ) + fi meson_src_configure } src_compile() { meson_src_compile - meson_src_compile {docs,man} + + if use doc ; then + # Generates both manpages and HTML documentation. + meson_src_compile docs + else + meson_src_compile man:alias + fi +} + +src_test() { + if [[ ${UID} -ne 0 ]] ; then + # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the same. We set + # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by Portage. + local old_ctype=${LC_CTYPE} + export LC_CTYPE=${LC_COLLATE} + meson_src_test + export LC_CTYPE=${old_ctype} + else + ewarn 'Tests cannot be run as root. Enable "userpriv" in FEATURES.' + ewarn 'Skipping.' + fi } src_install() { meson_src_install - dodoc README HISTORY doc/TODO - dodoc -r "${BUILD_DIR}"/doc/src/sgml/html - - # postgresql.eselect places the man files of the selected slot, which may - # not be this ${SLOT}, hence doins instead of doman - insinto /usr/share/postgresql-${SLOT}/man/ - doins -r "${BUILD_DIR}"/doc/src/sgml/man{1,3,7} - docompress /usr/share/postgresql-${SLOT}/man/man{1,3,7} - - insinto /etc/postgresql-${SLOT} - newins src/bin/psql/psqlrc.sample psqlrc - - # Don't delete libpg{port,common}.a (Bug #571046). They're always - # needed by extensions utilizing PGXS. - use static-libs || \ - find "${ED}" -name '*.a' ! -name libpgport.a ! -name libpgcommon.a \ - -delete - sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ - "${FILESDIR}/${PN}.confd-9.3" | newconfd - ${PN}-${SLOT} + "${FILESDIR}/${PN}.confd-9.3" | newconfd - "${PN}-${SLOT}" sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ - "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - ${PN}-${SLOT} + "${FILESDIR}/${PN}.init-9.3-r1" | newinitd - "${PN}-${SLOT}" - if use systemd; then - sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ - "${FILESDIR}/${PN}.service-9.6-r1" | \ - systemd_newunit - ${PN}-${SLOT}.service - newtmpfiles "${FILESDIR}"/${PN}.tmpfiles ${PN}-${SLOT}.conf - fi - - newbin "${FILESDIR}"/${PN}-check-db-dir ${PN}-${SLOT}-check-db-dir - - use pam && pamd_mimic system-auth ${PN}-${SLOT} auth account session + insinto "/etc/postgresql-${SLOT}" + newins src/bin/psql/psqlrc.sample psqlrc + # Create slot specific links to their related executables, so that they're + # always available. For example, pg_config9999 is always available whereas + # the pg_config is controlled by postgresql.eselect. local f bn for f in $(find "${ED}/usr/$(get_libdir)/postgresql-${SLOT}/bin" \ -mindepth 1 -maxdepth 1) @@ -233,7 +241,15 @@ src_install() { "/usr/bin/${bn}${SLOT/.}" done - # Create slot specific man pages + # Create slot specific man pages so that they're always available. As above + # for the executables, make `man pg_config9999` always refer to the same + # manpage, whereas postgresql.eselect controls which manpage `man pg_config` + # refers. And, since postgresql.eselect controls the manpages, doman would + # actually do the wrong thing for us, hence insinto and doins. + insinto "/usr/share/postgresql-${SLOT}/man/" + doins -r "${BUILD_DIR}"/doc/src/sgml/man{1,3,7} + docompress /usr/share/postgresql-"${SLOT}"/man/man{1,3,7} + local bn f mansec slotted_name for mansec in 1 3 7 ; do local rel_manpath="../../postgresql-${SLOT}/man/man${mansec}" @@ -243,54 +259,90 @@ src_install() { for f in "${ED}/usr/share/postgresql-${SLOT}/man/man${mansec}"/* ; do bn=$(basename "${f}") - slotted_name=${bn%.${mansec}}${SLOT}.${mansec} + slotted_name=${bn%."${mansec}"}${SLOT}.${mansec} case ${bn} in TABLE.7|WITH.7) - echo ".so ${rel_manpath}/SELECT.7" > ${slotted_name} + echo ".so ${rel_manpath}/SELECT.7" > "${slotted_name}" ;; *) - echo ".so ${rel_manpath}/${bn}" > ${slotted_name} + echo ".so ${rel_manpath}/${bn}" > "${slotted_name}" ;; esac done - popd > /dev/null + popd > /dev/null || die "popd failed" done + # All of the use flag influenced installs/removals begin here. + use doc && dodoc -r "${BUILD_DIR}"/doc/src/sgml/html + + use pam && pamd_mimic system-auth "${PN}-${SLOT}" auth account session + if use prefix ; then keepdir /run/postgresql fperms 1775 /run/postgresql fi + + # Don't delete libpg{port,common}.a (Bug #571046). They're always + # needed by extensions utilizing PGXS. + use static-libs || \ + find "${ED}" -name '*.a' ! -name libpgport.a ! -name libpgcommon.a \ + -delete + + if use systemd; then + newbin "${FILESDIR}/${PN}-check-db-dir" "${PN}-${SLOT}-check-db-dir" + + sed -e "s|@SLOT@|${SLOT}|g" -e "s|@LIBDIR@|$(get_libdir)|g" \ + "${FILESDIR}/${PN}.service-9.6-r1" | \ + systemd_newunit - "${PN}-${SLOT}.service" + newtmpfiles "${FILESDIR}/${PN}.tmpfiles" "${PN}-${SLOT}.conf" + fi } pkg_postinst() { - use systemd && tmpfiles_process ${PN}-${SLOT}.conf - postgresql-config update + use systemd && tmpfiles_process "${PN}-${SLOT}.conf" - elog "If you need a global psqlrc-file, you can place it in:" - elog " ${EROOT}/etc/postgresql-${SLOT}/" + # See comment in pkg_postrm(). + [[ ${SLOT} = $(postgresql-config show) ]] && postgresql-config update - elog elog "Gentoo specific documentation:" elog "https://wiki.gentoo.org/wiki/PostgreSQL" elog elog "Official documentation:" - elog "${EROOT}/usr/share/doc/${PF}/html" + if use doc ; then + elog "${EROOT}/usr/share/doc/${PF}/html" + else + elog "https://www.postgresql.org/docs/${SLOT/9999*/devel}/index.html" + fi elog - elog "The default location of the Unix-domain socket is:" - elog " ${EROOT}/run/postgresql/" + + elog "You can find release notes at:" + if use doc ; then + elog "${EROOT}/usr/share/doc/${PF}/html/release.html" + else + elog "https://www.postgresql.org/docs/${SLOT/9999*/devel}/release.html" + fi elog - elog "Before initializing the database, you may want to edit PG_INITDB_OPTS" - elog "so that it contains your preferred locale, and other options, in:" + + elog "If you need a global psqlrc-file, you can place it in:" + elog " ${EROOT}/etc/postgresql-${SLOT}/" + elog + elog "The next two items only apply when running a server on this machine." + elog "------------------------------------------------------------------------" + elog "1. You may want to edit PG_INITDB_OPTS in the following file so that it" + elog " contains your preferred locale, and other options, before" + elog " initializing the cluster:" elog " ${EROOT}/etc/conf.d/postgresql-${SLOT}" elog - elog "Then, execute the following command to setup the initial database" - elog "environment:" - elog " emerge --config =${CATEGORY}/${PF}" + elog "2. Then, run the following command to initialize database cluster:" + elog " emerge --config =${CATEGORY}/${PN}:${SLOT}" } pkg_prerm() { if [[ -z ${REPLACED_BY_VERSION} ]] ; then + ewarn "Were you running PostgreSQL ${SLOT} as a server? If no, ignore the rest" + ewarn "of this warning." + ewarn ewarn "Have you dumped and/or migrated the ${SLOT} database cluster?" ewarn "\thttps://wiki.gentoo.org/wiki/PostgreSQL/QuickStart#Migrating_PostgreSQL" @@ -301,7 +353,11 @@ pkg_prerm() { } pkg_postrm() { - postgresql-config update + # The links managed by eselect are unversioned only, and would only be + # impacted if the selected slot and ebuild slot are the same. For example, + # if the selected slot is SLOT+1, then nothing that happened with this + # ebuild will impact the unversioned links. + [[ ${SLOT} = $(postgresql-config show) ]] && postgresql-config update } pkg_config() { @@ -358,7 +414,7 @@ pkg_config() { sleep 5 eend 0 - if [ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ] ; then + if [[ -n "$(ls -A ${DATA_DIR} 2> /dev/null)" ]] ; then eerror "The given directory, '${DATA_DIR}', is not empty." eerror "Modify DATA_DIR to point to an empty directory." die "${DATA_DIR} is not empty." @@ -366,9 +422,9 @@ pkg_config() { einfo "Creating the data directory ..." if [[ ${EUID} == 0 ]] ; then - mkdir -p "${DATA_DIR}" - chown -Rf postgres:postgres "${DATA_DIR}" - chmod 0700 "${DATA_DIR}" + mkdir -p "$(dirname ${DATA_DIR%/})" || die "Couldn't parent dirs" + mkdir -m 0700 "${DATA_DIR%/}" || die "Couldn't make DATA_DIR" + chown -h postgres:postgres "${DATA_DIR%/}" || die "Couldn't chown" fi einfo "Initializing the database ..." @@ -416,20 +472,3 @@ pkg_config() { einfo "instead of 'pg_ctl'." fi } - -src_test() { - if [[ ${UID} -ne 0 ]] ; then - # Some ICU tests fail if LC_CTYPE and LC_COLLATE aren't the same. We set - # LC_CTYPE to be equal to LC_COLLATE since LC_COLLATE is set by Portage. - local old_ctype=${LC_CTYPE} - export LC_CTYPE=${LC_COLLATE} - meson_src_test - export LC_CTYPE=${old_ctype} - - einfo "If you think other tests besides the regression tests are necessary, please" - einfo "submit a bug including a patch for this ebuild to enable them." - else - ewarn 'Tests cannot be run as root. Enable "userpriv" in FEATURES.' - ewarn 'Skipping.' - fi -} |