forked from gentoo/gentoo
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial commit postgres{,-multi}.eclass
postgres.eclass provides convenience functions that are commonly performed in most packages that require PostgreSQL. postgres-multi.eclass enables packages to build against all selected PostgreSQL slots. Added POSTGRES_TARGETS as a new USE_EXPAND variable to select which slots are depended upon and built against.
- Loading branch information
1 parent
59a1d9f
commit 9d03d59
Showing
5 changed files
with
355 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,178 @@ | ||
# Copyright 1999-2016 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
# $Id$ | ||
|
||
inherit multibuild postgres | ||
EXPORT_FUNCTIONS pkg_setup src_prepare src_compile src_install src_test | ||
|
||
|
||
# @ECLASS: postgres-multi | ||
# @MAINTAINER: | ||
# PostgreSQL <[email protected]> | ||
# @AUTHOR: Aaron W. Swenson <[email protected]> | ||
# @BLURB: An eclass to build PostgreSQL-related packages against multiple slots | ||
# @DESCRIPTION: | ||
# postgres-multi enables ebuilds, particularly PostgreSQL extensions, to | ||
# build and install for one or more PostgreSQL slots as specified by | ||
# POSTGRES_TARGETS use flags. | ||
|
||
|
||
case ${EAPI:-0} in | ||
5|6) ;; | ||
*) die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" ;; | ||
esac | ||
|
||
|
||
# @ECLASS-VARIABLE: POSTGRES_COMPAT | ||
# @REQUIRED | ||
# @DESCRIPTION: | ||
# A Bash array containing a list of compatible PostgreSQL slots as | ||
# defined by the developer. Must be declared before inheriting this | ||
# eclass. Example: POSTGRES_COMPAT=( 9.4 9.{5,6} ) | ||
if ! declare -p POSTGRES_COMPAT &>/dev/null; then | ||
die 'Required variable POSTGRES_COMPAT not declared.' | ||
fi | ||
|
||
# @ECLASS-VARIABLE: _POSTGRES_INTERSECT_SLOTS | ||
# @INTERNAL | ||
# @DESCRIPTION: | ||
# A Bash array containing the intersect of POSTGRES_TARGETS and | ||
# POSTGRES_COMPAT. | ||
export _POSTGRES_INTERSECT_SLOTS=( ) | ||
|
||
# @FUNCTION _postgres-multi_multibuild_wrapper | ||
# @INTERNAL | ||
# @USAGE: _postgres-multi_multibuild_wrapper <command> [<arg> ...] | ||
# @DESCRIPTION: | ||
# For the given variant, set the values of the PG_SLOT, PG_CONFIG, and | ||
# PKG_CONFIG_PATH environment variables accordingly and replace any | ||
# appearance of @PG_SLOT@ in the command and arguments with value of | ||
# ${PG_SLOT}. | ||
_postgres-multi_multibuild_wrapper() { | ||
debug-print-function ${FUNCNAME} "${@}" | ||
export PG_SLOT=${MULTIBUILD_VARIANT} | ||
export PG_CONFIG=$(which pg_config${MULTIBUILD_VARIANT//./}) | ||
if [[ -n ${PKG_CONFIG_PATH} ]] ; then | ||
PKG_CONFIG_PATH="$(${PG_CONFIG} --libdir)/pkgconfig:${PKG_CONFIG_PATH}" | ||
else | ||
PKG_CONFIG_PATH="$(${PG_CONFIG} --libdir)/pkgconfig" | ||
fi | ||
export PKG_CONFIG_PATH | ||
|
||
$(echo "${@}" | sed "s/@PG_SLOT@/${PG_SLOT}/g") | ||
} | ||
|
||
# @FUNCTION: postgres-multi_foreach | ||
# @USAGE: postgres-multi_foreach <command> <arg> [<arg> ...] | ||
# @DESCRIPTION: | ||
# Run the given command in the package's build directory for each | ||
# PostgreSQL slot in the intersect of POSTGRES_TARGETS and | ||
# POSTGRES_COMPAT and user-enabled slots. The PG_CONFIG and | ||
# PKG_CONFIG_PATH environment variables are updated on each iteration to | ||
# point to the matching pg_config command and pkg-config metadata files, | ||
# respectively, for the current slot. Any appearance of @PG_SLOT@ in the | ||
# command or arguments will be substituted with the slot (e.g., 9.5) of | ||
# the current iteration. | ||
postgres-multi_foreach() { | ||
local MULTIBUILD_VARIANTS=("${_POSTGRES_INTERSECT_SLOTS[@]}") | ||
|
||
multibuild_foreach_variant \ | ||
_postgres-multi_multibuild_wrapper run_in_build_dir ${@} | ||
} | ||
|
||
# @FUNCTION: postgres-multi_forbest | ||
# @USAGE: postgres-multi_forbest <command> <arg> [<arg> ...] | ||
# @DESCRIPTION: | ||
# Run the given command in the package's build directory for the highest | ||
# slot in the intersect of POSTGRES_COMPAT and POSTGRES_TARGETS. The | ||
# PG_CONFIG and PKG_CONFIG_PATH environment variables are set to the | ||
# matching pg_config command and pkg-config metadata files, | ||
# respectively. Any appearance of @PG_SLOT@ in the command or arguments | ||
# will be substituted with the matching slot (e.g., 9.5). | ||
postgres-multi_forbest() { | ||
# POSTGRES_COMPAT is reverse sorted once in postgres.eclass so | ||
# element 0 has the highest slot version. | ||
local MULTIBUILD_VARIANTS=("${_POSTGRES_INTERSECT_SLOTS[0]}") | ||
|
||
multibuild_foreach_variant \ | ||
_postgres-multi_multibuild_wrapper run_in_build_dir ${@} | ||
} | ||
|
||
# @FUNCTION: postgres-multi_pkg_setup | ||
# @REQUIRED | ||
# @USAGE: postgres-multi_pkg_setup | ||
# @DESCRIPTION: | ||
# Initialize internal environment variable(s). This is required if | ||
# pkg_setup() is declared in the ebuild. | ||
postgres-multi_pkg_setup() { | ||
local user_slot | ||
|
||
for user_slot in "${POSTGRES_COMPAT[@]}"; do | ||
use "postgres_targets_postgres${user_slot/\./_}" && \ | ||
_POSTGRES_INTERSECT_SLOTS+=( "${user_slot}" ) | ||
done | ||
|
||
if [[ "${#_POSTGRES_INTERSECT_SLOTS[@]}" -eq "0" ]]; then | ||
die "One of the postgres_targets_postgresSL_OT use flags must be enabled" | ||
fi | ||
|
||
einfo "Multibuild variants: ${_POSTGRES_INTERSECT_SLOTS[@]}" | ||
} | ||
|
||
# @FUNCTION: postgres-multi_src_prepare | ||
# @REQUIRED | ||
# @USAGE: postgres-multi_src_prepare | ||
# @DESCRIPTION: | ||
# Calls eapply_user then copies ${S} into a build directory for each | ||
# intersect of POSTGRES_TARGETS and POSTGRES_COMPAT. | ||
postgres-multi_src_prepare() { | ||
if [[ "${#_POSTGRES_INTERSECT_SLOTS[@]}" -eq "0" ]]; then | ||
eerror "Internal array _POSTGRES_INTERSECT_SLOTS is empty." | ||
die "Did you forget to call postgres-multi_pkg_setup?" | ||
fi | ||
|
||
# Check that the slot has been emerged (Should be prevented by | ||
# Portage, but won't be caught by /usr/bin/ebuild) | ||
local slot | ||
for slot in ${_POSTGRES_INTERSECT_SLOTS[@]} ; do | ||
if [[ -z $(which pg_config${slot/.} 2> /dev/null) ]] ; then | ||
eerror | ||
eerror "postgres_targets_postgres${slot/.} use flag is enabled, but hasn't been emerged." | ||
eerror | ||
die "a postgres_targets use flag is enabled, but not emerged" | ||
fi | ||
done | ||
|
||
case ${EAPI:-0} in | ||
0|1|2|3|4|5) epatch_user ;; | ||
6) eapply_user ;; | ||
esac | ||
|
||
local MULTIBUILD_VARIANT | ||
local MULTIBUILD_VARIANTS=("${_POSTGRES_INTERSECT_SLOTS[@]}") | ||
multibuild_copy_sources | ||
} | ||
|
||
# @FUNCTION: postgres-multi_src_compile | ||
# @USAGE: postgres-multi_src_compile | ||
# @DESCRIPTION: | ||
# Runs `emake' in each build directory | ||
postgres-multi_src_compile() { | ||
postgres-multi_foreach emake | ||
} | ||
|
||
# @FUNCTION: postgres-multi_src_install | ||
# @USAGE: postgres-multi_src_install | ||
# @DESCRIPTION: | ||
# Runs `emake install DESTDIR="${D}"' in each build directory. | ||
postgres-multi_src_install() { | ||
postgres-multi_foreach emake install DESTDIR="${D}" | ||
} | ||
|
||
# @FUNCTION: postgres-multi_src_test | ||
# @USAGE: postgres-multi_src_test | ||
# @DESCRIPTION: | ||
# Runs `emake installcheck' in each build directory. | ||
postgres-multi_src_test() { | ||
postgres-multi_foreach emake installcheck | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,159 @@ | ||
# Copyright 1999-2016 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
# $Id$ | ||
|
||
inherit user | ||
EXPORT_FUNCTIONS pkg_setup | ||
|
||
# @ECLASS: postgres | ||
# @MAINTAINER: | ||
# PostgreSQL <[email protected]> | ||
# @AUTHOR: Aaron W. Swenson <[email protected]> | ||
# @BLURB: An eclass for PostgreSQL-related packages | ||
# @DESCRIPTION: | ||
# This eclass provides common utility functions that many | ||
# PostgreSQL-related packages perform, such as checking that the | ||
# currently selected PostgreSQL slot is within a range, adding a system | ||
# user to the postgres system group, and generating dependencies. | ||
|
||
|
||
case ${EAPI:-0} in | ||
5|6) ;; | ||
*) die "Unsupported EAPI=${EAPI} (unknown) for ${ECLASS}" ;; | ||
esac | ||
|
||
|
||
# @ECLASS-VARIABLE: POSTGRES_COMPAT | ||
# @DESCRIPTION: | ||
# A Bash array containing a list of compatible PostgreSQL slots as | ||
# defined by the developer. If declared, must be declared before | ||
# inheriting this eclass. Example: POSTGRES_COMPAT=( 9.4 9.{5,6} ) | ||
|
||
# @ECLASS-VARIABLE: POSTGRES_USEDEP | ||
# @DESCRIPTION: | ||
# Add the 2-Style and/or 4-Style use dependencies without brackets to be used | ||
# for POSTGRES_DEP. If declared, must be done before inheriting this eclass. | ||
|
||
# @ECLASS-VARIABLE: POSTGRES_DEP | ||
# @DESCRIPTION: | ||
# An automatically generated dependency string suitable for use in | ||
# DEPEND and RDEPEND declarations. | ||
|
||
# @ECLASS-VARIABLE: POSTGRES_REQ_USE | ||
# @DESCRIPTION: | ||
# An automatically generated REQUIRED_USE-compatible string built upon | ||
# POSTGRES_COMPAT. REQUIRED_USE="... ${POSTGRES_REQ_USE}" is only | ||
# required if the package must build against one of the PostgreSQL slots | ||
# declared in POSTGRES_COMPAT. | ||
|
||
if declare -p POSTGRES_COMPAT &> /dev/null ; then | ||
# Reverse sort the given POSTGRES_COMPAT so that the most recent | ||
# slot is preferred over an older slot. | ||
# -- do we care if dependencies are deterministic by USE flags? | ||
readarray -t POSTGRES_COMPAT < <(printf '%s\n' "${POSTGRES_COMPAT[@]}" | sort -nr) | ||
|
||
POSTGRES_DEP="" | ||
POSTGRES_REQ_USE=" || (" | ||
for slot in "${POSTGRES_COMPAT[@]}" ; do | ||
POSTGRES_DEP+=" postgres_targets_postgres${slot/\./_}? ( dev-db/postgresql:${slot}=" | ||
declare -p POSTGRES_USEDEP &>/dev/null && \ | ||
POSTGRES_DEP+="[${POSTGRES_USEDEP}]" | ||
POSTGRES_DEP+=" )" | ||
|
||
IUSE+=" postgres_targets_postgres${slot/\./_}" | ||
POSTGRES_REQ_USE+=" postgres_targets_postgres${slot/\./_}" | ||
done | ||
POSTGRES_REQ_USE+=" )" | ||
else | ||
POSTGRES_DEP="dev-db/postgresql:=" | ||
declare -p POSTGRES_USEDEP &>/dev/null && \ | ||
POSTGRES_DEP+="[${POSTGRES_USEDEP}]" | ||
fi | ||
|
||
|
||
# @FUNCTION: postgres_check_slot | ||
# @DESCRIPTION: | ||
# Verify that the currently selected PostgreSQL slot is set to one of | ||
# the slots defined in POSTGRES_COMPAT. Automatically dies unless a | ||
# POSTGRES_COMPAT slot is selected. Should be called in pkg_pretend(). | ||
postgres_check_slot() { | ||
if ! declare -p POSTGRES_COMPAT &>/dev/null; then | ||
die 'POSTGRES_COMPAT not declared.' | ||
fi | ||
|
||
# Don't die because we can't run postgresql-config during pretend. | ||
[[ "$EBUILD_PHASE" = "pretend" && -z "$(which postgresql-config 2> /dev/null)" ]] \ | ||
&& return 0 | ||
|
||
if has $(postgresql-config show 2> /dev/null) "${POSTGRES_COMPAT[@]}"; then | ||
return 0 | ||
else | ||
eerror "PostgreSQL slot must be set to one of: " | ||
eerror " ${POSTGRES_COMPAT[@]}" | ||
die "Incompatible PostgreSQL slot eselected" | ||
fi | ||
} | ||
|
||
# @FUNCTION: postgres_new_user | ||
# @DESCRIPTION: | ||
# Creates the "postgres" system group and user -- which is separate from | ||
# the database user -- in addition to the developer defined user. Takes | ||
# the same arguments as "enewuser". | ||
postgres_new_user() { | ||
enewgroup postgres 70 | ||
enewuser postgres 70 /bin/bash /var/lib/postgresql postgres | ||
|
||
if [[ $# -gt 0 ]] ; then | ||
if [[ "$1" = "postgres" ]] ; then | ||
ewarn "Username 'postgres' implied, skipping" | ||
else | ||
local groups=$5 | ||
[[ -n "${groups}" ]] && groups+=",postgres" || groups="postgres" | ||
enewuser "$1" "${2:--1}" "${3:--1}" "${4:--1}" "${groups}" | ||
fi | ||
fi | ||
} | ||
|
||
# @FUNCTION: postgres_pkg_setup | ||
# @REQUIRED | ||
# @USAGE: postgres_pkg_setup | ||
# @DESCRIPTION: | ||
# Initialize environment variable(s) according to the best | ||
# installed version of PostgreSQL that is also in POSTGRES_COMPAT. This | ||
# is required if pkg_setup() is declared in the ebuild. | ||
# Exports PG_SLOT, PG_CONFIG, and PKG_CONFIG_PATH. | ||
postgres_pkg_setup() { | ||
debug-print-function ${FUNCNAME} "${@}" | ||
|
||
local compat_slot | ||
local best_slot | ||
for compat_slot in "${POSTGRES_COMPAT[@]}"; do | ||
if use "postgres_targets_postgres${compat_slot/\./_}"; then | ||
best_slot="${compat_slot}" | ||
break | ||
fi | ||
done | ||
|
||
if [[ -z "${best_slot}" ]]; then | ||
local flags f | ||
for f in "${POSTGRES_COMPAT[@]}"; do | ||
flags+=" postgres${f/./_}" | ||
done | ||
|
||
eerror "POSTGRES_TARGETS must contain at least one of:" | ||
eerror " ${flags}" | ||
die "No suitable POSTGRES_TARGETS enabled." | ||
fi | ||
|
||
export PG_SLOT=${best_slot} | ||
export PG_CONFIG=$(which pg_config${best_slot//./}) | ||
|
||
local pg_pkg_config_path="$(${PG_CONFIG} --libdir)/pkgconfig" | ||
if [[ -n "${PKG_CONFIG_PATH}" ]]; then | ||
export PKG_CONFIG_PATH="${pg_pkg_config_path}:${PKG_CONFIG_PATH}" | ||
else | ||
export PKG_CONFIG_PATH="${pg_pkg_config_path}" | ||
fi | ||
|
||
elog "PostgreSQL Target: ${best_slot}" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -13,7 +13,7 @@ USE_EXPAND_VALUES_USERLAND="BSD GNU" | |
|
||
# Env vars to expand into USE vars. Modifying this requires prior | ||
# discussion on [email protected]. | ||
USE_EXPAND="ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CALLIGRA_EXPERIMENTAL_FEATURES CAMERAS COLLECTD_PLUGINS CPU_FLAGS_ARM CPU_FLAGS_X86 CROSSCOMPILE_OPTS CURL_SSL ELIBC ENLIGHTENMENT_MODULES FFTOOLS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES LLVM_TARGETS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL NGINX_MODULES_STREAM OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS ROS_MESSAGES RUBY_TARGETS SANE_BACKENDS USERLAND UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS" | ||
USE_EXPAND="ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CALLIGRA_EXPERIMENTAL_FEATURES CAMERAS COLLECTD_PLUGINS CPU_FLAGS_ARM CPU_FLAGS_X86 CROSSCOMPILE_OPTS CURL_SSL ELIBC ENLIGHTENMENT_MODULES FFTOOLS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES LLVM_TARGETS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL NGINX_MODULES_STREAM OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS POSTGRES_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS ROS_MESSAGES RUBY_TARGETS SANE_BACKENDS USERLAND UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS" | ||
|
||
# USE_EXPAND variables whose contents are not shown in package manager | ||
# output. Changes need discussion on gentoo-dev. | ||
|
@@ -141,3 +141,7 @@ LC_MESSAGES="C" | |
# disable twisted's plugin cache update to prevent access violations | ||
# call /usr/bin/twisted-regen-cache in pkg_postinst() | ||
TWISTED_DISABLE_WRITING_OF_PLUGIN_CACHE="1" | ||
|
||
# Aaron W. Swenson <[email protected]> (9 Jul 2017) | ||
# Default target(s) for postgres{,-multi}.eclass | ||
POSTGRES_TARGETS="postgres9_5" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# Copyright 1999-2017 Gentoo Foundation | ||
# Distributed under the terms of the GNU General Public License v2 | ||
|
||
# This file contains descriptions of POSTGRES_TARGETS USE_EXPAND flags. | ||
|
||
postgres9_2 - Build against PostgreSQL 9.2 | ||
postgres9_3 - Build against PostgreSQL 9.3 | ||
postgres9_4 - Build against PostgreSQL 9.4 | ||
postgres9_5 - Build against PostgreSQL 9.5 | ||
postgres9_6 - Build against PostgreSQL 9.6 | ||
postgres10 - Build against PostgreSQL 10 | ||
postgres11 - Build against PostgreSQL 11 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -27,7 +27,7 @@ USE_EXPAND_VALUES_USERLAND="BSD GNU" | |
|
||
# Env vars to expand into USE vars. Modifying this requires prior | ||
# discussion on [email protected]. | ||
USE_EXPAND="ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS CPU_FLAGS_ARM CPU_FLAGS_X86 CROSSCOMPILE_OPTS CURL_SSL ELIBC ENLIGHTENMENT_MODULES FFTOOLS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES LLVM_TARGETS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL NGINX_MODULES_STREAM OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS ROS_MESSAGES RUBY_TARGETS SANE_BACKENDS USERLAND UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS" | ||
USE_EXPAND="ABI_MIPS ABI_PPC ABI_S390 ABI_X86 ALSA_CARDS APACHE2_MODULES APACHE2_MPMS CALLIGRA_FEATURES CAMERAS COLLECTD_PLUGINS CPU_FLAGS_ARM CPU_FLAGS_X86 CROSSCOMPILE_OPTS CURL_SSL ELIBC ENLIGHTENMENT_MODULES FFTOOLS GPSD_PROTOCOLS GRUB_PLATFORMS INPUT_DEVICES KERNEL L10N LCD_DEVICES LIBREOFFICE_EXTENSIONS LINGUAS LIRC_DEVICES LLVM_TARGETS MONKEYD_PLUGINS NETBEANS_MODULES NGINX_MODULES_HTTP NGINX_MODULES_MAIL NGINX_MODULES_STREAM OFED_DRIVERS OFFICE_IMPLEMENTATION OPENMPI_FABRICS OPENMPI_OFED_FEATURES OPENMPI_RM PHP_TARGETS POSTGRES_TARGETS PYTHON_SINGLE_TARGET PYTHON_TARGETS QEMU_SOFTMMU_TARGETS QEMU_USER_TARGETS ROS_MESSAGES RUBY_TARGETS SANE_BACKENDS USERLAND UWSGI_PLUGINS VIDEO_CARDS VOICEMAIL_STORAGE XFCE_PLUGINS XTABLES_ADDONS" | ||
|
||
# USE_EXPAND variables whose contents are not shown in package manager | ||
# output. Changes need discussion on gentoo-dev. | ||
|