xref: /freebsd-src/usr.sbin/bsdconfig/share/packages/categories.subr (revision d0b2dbfa0ecf2bbc9709efc5e20baf8e4b44bbbf)
187c16275SDevin Teskeif [ ! "$_PACKAGES_CATEGORIES_SUBR" ]; then _PACKAGES_CATEGORIES_SUBR=1
287c16275SDevin Teske#
387c16275SDevin Teske# Copyright (c) 2013 Devin Teske
4f8ea072aSDevin Teske# All rights reserved.
587c16275SDevin Teske#
687c16275SDevin Teske# Redistribution and use in source and binary forms, with or without
787c16275SDevin Teske# modification, are permitted provided that the following conditions
887c16275SDevin Teske# are met:
987c16275SDevin Teske# 1. Redistributions of source code must retain the above copyright
1087c16275SDevin Teske#    notice, this list of conditions and the following disclaimer.
1187c16275SDevin Teske# 2. Redistributions in binary form must reproduce the above copyright
1287c16275SDevin Teske#    notice, this list of conditions and the following disclaimer in the
1387c16275SDevin Teske#    documentation and/or other materials provided with the distribution.
1487c16275SDevin Teske#
1587c16275SDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
168e37a7c8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1787c16275SDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1887c16275SDevin Teske# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1987c16275SDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
208e37a7c8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2187c16275SDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2287c16275SDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2387c16275SDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2487c16275SDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2587c16275SDevin Teske# SUCH DAMAGE.
2687c16275SDevin Teske#
2787c16275SDevin Teske#
2887c16275SDevin Teske############################################################ INCLUDES
2987c16275SDevin Teske
3087c16275SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig"
3187c16275SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1
3287c16275SDevin Teskef_dprintf "%s: loading includes..." packages/categories.subr
3387c16275SDevin Teskef_include $BSDCFG_SHARE/strings.subr
3487c16275SDevin Teske
3587c16275SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig"
3687c16275SDevin Teskef_include_lang $BSDCFG_LIBE/include/messages.subr
3787c16275SDevin Teske
3887c16275SDevin Teske############################################################ GLOBALS
3987c16275SDevin Teske
4087c16275SDevin TeskeCATEGORIES=
41*d4ae33f0SDevin TeskeNCATEGORIES=0
4287c16275SDevin Teske
4387c16275SDevin Teske############################################################ FUNCTIONS
4487c16275SDevin Teske
4587c16275SDevin Teske# f_category_desc_get $category [$var_to_set]
4687c16275SDevin Teske#
4787c16275SDevin Teske# Fetch the description of a given category. Returns success if a match was
4887c16275SDevin Teske# found, otherwise failure.
4987c16275SDevin Teske#
5087c16275SDevin Teske# If $var_to_set is missing or NULL, the category description is printed to
5187c16275SDevin Teske# standard out for capturing in a sub-shell (which is less-recommended because
5287c16275SDevin Teske# of performance degredation; for example, when called in a loop).
5387c16275SDevin Teske#
5487c16275SDevin Teskef_category_desc_get()
5587c16275SDevin Teske{
5687c16275SDevin Teske	local __category="$1" __var_to_set="$2" __cat __varcat
5787c16275SDevin Teske
5887c16275SDevin Teske	# Return failure if $category
5987c16275SDevin Teske	[ "$__category" ] || return $FAILURE
6087c16275SDevin Teske
6187c16275SDevin Teske	for __cat in $CATEGORIES; do
6287c16275SDevin Teske		[ "$__cat" = "$__category" ] || continue
6387c16275SDevin Teske		f_str2varname $__cat __varcat
6487c16275SDevin Teske		f_getvar _category_$__varcat $__var_to_set
6587c16275SDevin Teske		return $?
6687c16275SDevin Teske	done
6787c16275SDevin Teske	return $FAILURE
6887c16275SDevin Teske}
6987c16275SDevin Teske
7087c16275SDevin Teske# f_category_desc_set $category $desc
7187c16275SDevin Teske#
7287c16275SDevin Teske# Store a description in-association with a category. $category should be
7387c16275SDevin Teske# alphanumeric and can include the underscore [_] but should not contain
7487c16275SDevin Teske# whitespace. Returns success unless $category is NULL or no arguments. Use the
7587c16275SDevin Teske# f_category_desc_get() routine with the same $category to retrieve the stored
7687c16275SDevin Teske# description.
7787c16275SDevin Teske#
7887c16275SDevin Teskef_category_desc_set()
7987c16275SDevin Teske{
8087c16275SDevin Teske	local category="$1" desc="$2"
8187c16275SDevin Teske	local cat varcat found=
8287c16275SDevin Teske	[ "$category" ] || return $FAILURE
8387c16275SDevin Teske	for cat in $CATEGORIES; do
8487c16275SDevin Teske		[ "$cat" = "$category" ] || continue
8587c16275SDevin Teske		f_str2varname $cat varcat
8680433743SDevin Teske		f_isset _category_$varcat || continue
8787c16275SDevin Teske		found=1 && break
8887c16275SDevin Teske	done
8987c16275SDevin Teske	if [ ! "$found" ]; then
9087c16275SDevin Teske		CATEGORIES="$CATEGORIES $category"
9187c16275SDevin Teske	fi
9287c16275SDevin Teske	f_str2varname $category varcat
9387c16275SDevin Teske	setvar "_category_$varcat" "$desc"
9487c16275SDevin Teske	# Export the variable for awk(1) ENVIRON visibility
9587c16275SDevin Teske	export "_category_$varcat"
9687c16275SDevin Teske	return $SUCCESS
9787c16275SDevin Teske}
9887c16275SDevin Teske
9987c16275SDevin Teske############################################################ MAIN
10087c16275SDevin Teske
10187c16275SDevin Teske#
102a104b905SDevin Teske# Load descriptions for package categories. Note that we don't internationalize
10320b371f5SDevin Teske# category names because this would be confusing for people used to browsing
104a104b905SDevin Teske# the FTP mirrors or are otherwise familiar with an interface that does not
105a104b905SDevin Teske# provide internationalized names. The descriptions can be used to provide i18n
106a104b905SDevin Teske# users a description of the non-i18n category name.
10787c16275SDevin Teske#
10887c16275SDevin Teskef_category() { f_category_desc_set "$1" "$2"; }
109cfde4beeSDevin Teskef_category All           "$msg_all_desc"
11087c16275SDevin Teskef_category accessibility "$msg_accessibility_desc"
11187c16275SDevin Teskef_category afterstep     "$msg_afterstep_desc"
11287c16275SDevin Teskef_category arabic        "$msg_arabic_desc"
11387c16275SDevin Teskef_category archivers     "$msg_archivers_desc"
11487c16275SDevin Teskef_category astro         "$msg_astro_desc"
11587c16275SDevin Teskef_category audio         "$msg_audio_desc"
11687c16275SDevin Teskef_category benchmarks    "$msg_benchmarks_desc"
11787c16275SDevin Teskef_category biology       "$msg_biology_desc"
11887c16275SDevin Teskef_category cad           "$msg_cad_desc"
11987c16275SDevin Teskef_category chinese       "$msg_chinese_desc"
12087c16275SDevin Teskef_category comms         "$msg_comms_desc"
12187c16275SDevin Teskef_category converters    "$msg_converters_desc"
12287c16275SDevin Teskef_category databases     "$msg_databases_desc"
12387c16275SDevin Teskef_category deskutils     "$msg_deskutils_desc"
12487c16275SDevin Teskef_category devel         "$msg_devel_desc"
12587c16275SDevin Teskef_category dns           "$msg_dns_desc"
12687c16275SDevin Teskef_category docs          "$msg_docs_desc"
12787c16275SDevin Teskef_category editors       "$msg_editors_desc"
12887c16275SDevin Teskef_category elisp         "$msg_elisp_desc"
12987c16275SDevin Teskef_category emulators     "$msg_emulators_desc"
13087c16275SDevin Teskef_category enlightenment "$msg_enlightenment_desc"
13187c16275SDevin Teskef_category finance       "$msg_finance_desc"
13287c16275SDevin Teskef_category french        "$msg_french_desc"
13387c16275SDevin Teskef_category ftp           "$msg_ftp_desc"
13487c16275SDevin Teskef_category games         "$msg_games_desc"
13587c16275SDevin Teskef_category geography     "$msg_geography_desc"
13687c16275SDevin Teskef_category german        "$msg_german_desc"
13787c16275SDevin Teskef_category gnome         "$msg_gnome_desc"
13887c16275SDevin Teskef_category gnustep       "$msg_gnustep_desc"
13987c16275SDevin Teskef_category graphics      "$msg_graphics_desc"
14087c16275SDevin Teskef_category hamradio      "$msg_hamradio_desc"
14187c16275SDevin Teskef_category haskell       "$msg_haskell_desc"
14287c16275SDevin Teskef_category hebrew        "$msg_hebrew_desc"
14387c16275SDevin Teskef_category hungarian     "$msg_hungarian_desc"
14487c16275SDevin Teskef_category ipv6          "$msg_ipv6_desc"
14587c16275SDevin Teskef_category irc           "$msg_irc_desc"
14687c16275SDevin Teskef_category japanese      "$msg_japanese_desc"
14787c16275SDevin Teskef_category java          "$msg_java_desc"
14887c16275SDevin Teskef_category kde           "$msg_kde_desc"
14987c16275SDevin Teskef_category kld           "$msg_kld_desc"
15087c16275SDevin Teskef_category korean        "$msg_korean_desc"
15187c16275SDevin Teskef_category lang          "$msg_lang_desc"
15287c16275SDevin Teskef_category linux         "$msg_linux_desc"
15387c16275SDevin Teskef_category lisp          "$msg_lisp_desc"
15487c16275SDevin Teskef_category mail          "$msg_mail_desc"
15587c16275SDevin Teskef_category math          "$msg_math_desc"
15687c16275SDevin Teskef_category mbone         "$msg_mbone_desc"
15787c16275SDevin Teskef_category misc          "$msg_misc_desc"
15887c16275SDevin Teskef_category multimedia    "$msg_multimedia_desc"
15987c16275SDevin Teskef_category net           "$msg_net_desc"
16087c16275SDevin Teskef_category net-im        "$msg_net_im_desc"
16187c16275SDevin Teskef_category net-mgmt      "$msg_net_mgmt_desc"
16287c16275SDevin Teskef_category net-p2p       "$msg_net_p2p_desc"
16387c16275SDevin Teskef_category news          "$msg_news_desc"
16487c16275SDevin Teskef_category palm          "$msg_palm_desc"
16587c16275SDevin Teskef_category parallel      "$msg_parallel_desc"
16687c16275SDevin Teskef_category pear          "$msg_pear_desc"
16787c16275SDevin Teskef_category perl5         "$msg_perl5_desc"
16887c16275SDevin Teskef_category plan9         "$msg_plan9_desc"
16987c16275SDevin Teskef_category polish        "$msg_polish_desc"
17087c16275SDevin Teskef_category ports-mgmt    "$msg_ports_mgmt_desc"
17187c16275SDevin Teskef_category portuguese    "$msg_portuguese_desc"
17287c16275SDevin Teskef_category print         "$msg_print_desc"
17387c16275SDevin Teskef_category python        "$msg_python_desc"
17487c16275SDevin Teskef_category ruby          "$msg_ruby_desc"
17587c16275SDevin Teskef_category rubygems      "$msg_rubygems_desc"
17687c16275SDevin Teskef_category russian       "$msg_russian_desc"
17787c16275SDevin Teskef_category scheme        "$msg_scheme_desc"
17887c16275SDevin Teskef_category science       "$msg_science_desc"
17987c16275SDevin Teskef_category security      "$msg_security_desc"
18087c16275SDevin Teskef_category shells        "$msg_shells_desc"
18187c16275SDevin Teskef_category spanish       "$msg_spanish_desc"
18287c16275SDevin Teskef_category sysutils      "$msg_sysutils_desc"
18387c16275SDevin Teskef_category tcl           "$msg_tcl_desc"
18487c16275SDevin Teskef_category textproc      "$msg_textproc_desc"
18587c16275SDevin Teskef_category tk            "$msg_tk_desc"
18687c16275SDevin Teskef_category ukrainian     "$msg_ukrainian_desc"
18787c16275SDevin Teskef_category vietnamese    "$msg_vietnamese_desc"
18887c16275SDevin Teskef_category windowmaker   "$msg_windowmaker_desc"
18987c16275SDevin Teskef_category www           "$msg_www_desc"
19087c16275SDevin Teskef_category x11           "$msg_x11_desc"
19187c16275SDevin Teskef_category x11-clocks    "$msg_x11_clocks_desc"
19287c16275SDevin Teskef_category x11-drivers   "$msg_x11_drivers_desc"
19387c16275SDevin Teskef_category x11-fm        "$msg_x11_fm_desc"
19487c16275SDevin Teskef_category x11-fonts     "$msg_x11_fonts_desc"
19587c16275SDevin Teskef_category x11-servers   "$msg_x11_servers_desc"
19687c16275SDevin Teskef_category x11-themes    "$msg_x11_themes_desc"
19787c16275SDevin Teskef_category x11-toolkits  "$msg_x11_toolkits_desc"
19887c16275SDevin Teskef_category x11-wm        "$msg_x11_wm_desc"
19987c16275SDevin Teskef_category xfce          "$msg_xfce_desc"
20087c16275SDevin Teskef_category zope          "$msg_zope_desc"
20187c16275SDevin Teske
202*d4ae33f0SDevin Teskef_count NCATEGORIES $CATEGORIES
20387c16275SDevin Teskef_dprintf "%s: Initialized %u package category descriptions." \
204*d4ae33f0SDevin Teske          packages/categories.subr $NCATEGORIES
20587c16275SDevin Teske
20687c16275SDevin Teskef_dprintf "%s: Successfully loaded." packages/categories.subr
20787c16275SDevin Teske
20887c16275SDevin Teskefi # ! $_PACKAGES_CATEGORIES_SUBR
209