diff --git a/helpers/DATA/tasksel/Makefile b/helpers/DATA/tasksel/Makefile index 33b1f58..1b04dc5 100644 --- a/helpers/DATA/tasksel/Makefile +++ b/helpers/DATA/tasksel/Makefile @@ -10,9 +10,22 @@ UDESCDIR=trisquel-tasks DESCPO=$(DESCDIR)/po VERSION=$(shell expr "`dpkg-parsechangelog 2>/dev/null |grep Version:`" : '.*Version: \(.*\)' | cut -d - -f 1) LANGS=ar bg bn bs ca cs cy da de dz el eo es et eu fa fi fr gl gu he hi hr hu hy id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv ta te th tl tr uk vi wo zh_CN zh_TW -LANGS_DESC=ar bg bn bs ca cs cy da de dz el eo es et et eu fi fr gl gu he hi hr hu id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv te th tl tr uk vi wo zh_CN zh_TW +LANGS_DESC=ar bg bn bs ca cs cy da de dz el eo es et eu fi fr gl gu he hi hr hu id it ja km ko lt lv mg mk nb ne nl nn pa pl pt_BR pt ro ru sk sl sq sv te th tl tr uk vi wo zh_CN zh_TW LOCALEDIR=$(DESTDIR)/usr/share/locale +# ---- L10N generation ---- +# l10n base +L10N_PKGS = language-pack hunspell hyphen mythes +# Desktops l10n +L10N_PKGS += language-pack-gnome language-pack-kde +# Apps l10n (condition in runtime) +L10N_PKGS += abrowser-locale icedove-locale libreoffice-l10n +GEN_LANG_STAMP = $(UDESCDIR)/.lang_generated + +$(GEN_LANG_STAMP): lang-gen.sh + ./lang-gen.sh "$(LANGS_DESC)" "$(L10N_PKGS)" $(UDESCDIR) + touch $@ + all: $(UTASKDESC) po/build_stamp $(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??* @@ -22,8 +35,10 @@ $(TASKDESC): makedesc.pl $(DESCDIR)/[a-z]??* $(UDESCDIR): trisquel-seeds.pl USUITE=$CODENAME -$(UTASKDESC): makedesc.pl $(UDESCDIR)/[a-z]??* +$(UTASKDESC): $(GEN_LANG_STAMP) makedesc.pl $(UDESCDIR)/* ./makedesc.pl $(UDESCDIR) $(UTASKDESC) + # drop a blank first line if present to avoid parser warnings + sed -i '1{/^$$/d}' $(UTASKDESC) %.o: %.c $(COMPILE) $< @@ -56,10 +71,12 @@ install: pod2man --section=8 --center "Debian specific manpage" --release $(VERSION) tasksel.pod | gzip -9c > $(DESTDIR)/usr/share/man/man8/tasksel.8.gz for lang in $(LANGS); do \ [ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ - install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \ + if [ -f po/$$lang.mo ]; then \ + install -m 644 po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/tasksel.mo; \ + fi; \ done -install-data: +install-data: $(UTASKDESC) install -d $(DESTDIR)$(TASKDIR)/descs \ $(DESTDIR)/usr/lib/tasksel/info \ $(DESTDIR)/usr/lib/tasksel/tests @@ -77,15 +94,9 @@ install-data: [ "$$package" = "packages/list" ] && continue; \ install -m 755 $$package $(DESTDIR)/usr/lib/tasksel/packages/; \ done -#Dropped -# for lang in $(LANGS_DESC); do \ -# [ ! -d $(LOCALEDIR)/$$lang/LC_MESSAGES/ ] && mkdir -p $(LOCALEDIR)/$$lang/LC_MESSAGES/; \ -# install -m 644 $(DESCDIR)/po/$$lang.mo $(LOCALEDIR)/$$lang/LC_MESSAGES/$(DOMAIN).mo; \ -# done clean: rm -f $(TASKDESC) $(UTASKDESC) *~ rm -rf debian/external-overrides $(MAKE) -C po clean $(MAKE) -C $(DESCPO) clean - diff --git a/helpers/DATA/tasksel/lang-gen.sh b/helpers/DATA/tasksel/lang-gen.sh new file mode 100755 index 0000000..9fe89da --- /dev/null +++ b/helpers/DATA/tasksel/lang-gen.sh @@ -0,0 +1,50 @@ +#!/bin/sh +set -e + +# Args: +# $1 = LANGS_DESC (lista de códigos crudos) +# $2 = L10N_PKGS (familias base: language-pack, -gnome, hunspell, hyphen, mythes) +# $3 = destino (directorio trisquel-tasks) + +raw_langs="$1" +families="$2" +dest="$3" + +canon() { + case "$1" in + pt_BR) echo pt ;; + zh_CN) echo zh-hans ;; + zh_TW) echo zh-hant ;; + *) echo "${1%%_*}" ;; + esac +} + +have_pkg() { apt-cache show "$1" >/dev/null 2>&1; } + +mkdir -p "$dest" + +# de-dup +uniq_langs=$(for l in $raw_langs; do canon "$l"; done | tr ' ' '\n' | sort -u) + +for lang in $uniq_langs; do + base="language-pack-$lang" + if ! have_pkg "$base"; then + echo "skip: $lang (no $base)" >&2 + continue + fi + f="$dest/l10n-$lang" + { + echo "Task: $lang" + echo "Description: $lang environment" + echo " This task localises the desktop in $lang." + echo "Key:" + echo " $base" + echo "Packages: list" + for fam in $families; do + echo " ${fam}-${lang}" + done + echo "Section: l10n" + echo "Test-lang: $lang" + echo + } > "$f" +done diff --git a/helpers/DATA/tasksel/list b/helpers/DATA/tasksel/list new file mode 100644 index 0000000..664cb5f --- /dev/null +++ b/helpers/DATA/tasksel/list @@ -0,0 +1,57 @@ +#!/bin/sh +# $1 = task name, $2..$N = packages (from "Packages: list") +# Runtime policy: +# - language-pack-gnome-* > MATE/GNOME/LXDE +# - language-pack-kde-* > KDE (Triskel) +# - abrowser-/firefox-locale-* > all desktops (MATE/GNOME/LXDE/KDE), not console +# - libreoffice-l10n-*, icedove-locale-* > MATE/GNOME/KDE; not LXDE/console +# - skip non-existent candidates (avoid APT 100) + +shift 1 + +debconf_get() { + [ -x /usr/bin/debconf-communicate ] || return + printf 'GET %s\n' "$1" | /usr/bin/debconf-communicate 2>/dev/null \ + | awk 'NR==1 && $1==0 { $1=""; sub(/^ /,""); print }' +} + +has_pkg() { /usr/bin/dpkg-query -W -f='${Status}\n' "$1" 2>/dev/null | grep -q 'ok installed'; } +exists() { LC_ALL=C /usr/bin/apt-cache policy "$1" 2>/dev/null | awk '/Candidate:/ {print $2}' | grep -qxv '(none)'; } + +sel="$(debconf_get pkgsel/desktop) $(debconf_get tasksel/first)" +case "$sel" in + *triskel*) FLAVOR=kde ;; + *trisquel-mini*) FLAVOR=lxde ;; + *trisquel-gnome*) FLAVOR=gnome ;; + *trisquel-desktop*) FLAVOR=mate ;; + *) FLAVOR=unknown ;; +esac + +if [ "$FLAVOR" = unknown ]; then + if has_pkg triskel || has_pkg plasma-desktop; then FLAVOR=kde + elif has_pkg trisquel-mini || has_pkg lxde-core; then FLAVOR=lxde + elif has_pkg trisquel-gnome || has_pkg gnome-shell; then FLAVOR=gnome + elif has_pkg trisquel-desktop || has_pkg mate-desktop-environment; then FLAVOR=mate + else FLAVOR=console + fi +fi + +is_kde=false; [ "$FLAVOR" = kde ] && is_kde=true +is_gtk=false; echo "$FLAVOR" | grep -Eq '^(mate|gnome|lxde)$' && is_gtk=true +is_console=false; [ "$FLAVOR" = console ] && is_console=true +is_desktop=true; $is_console && is_desktop=false + +emit() { + p="$1"; [ -n "$p" ] || return + case "$p" in + language-pack-gnome-*) $is_gtk || return ;; + language-pack-kde-*) $is_kde || return ;; + abrowser-l10n-*|abrowser-locale-*|firefox-locale-*) + $is_desktop || return ;; + libreoffice-l10n-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;; + icedove-locale-*) echo "$FLAVOR" | grep -Eq '^(lxde|console)$' && return ;; + esac + exists "$p" && printf '%s\n' "$p" +} + +for p in "$@"; do emit "$p"; done diff --git a/helpers/DATA/tasksel/trisquel-tasks/dns-server b/helpers/DATA/tasksel/trisquel-tasks/dns-server index 61e4c25..d6ea37f 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/dns-server +++ b/helpers/DATA/tasksel/trisquel-tasks/dns-server @@ -2,6 +2,5 @@ Task: dns-server Section: server Description: Bind9 DNS server Selects the BIND DNS server and its documentation. -Packages: list Key: bind9 diff --git a/helpers/DATA/tasksel/trisquel-tasks/ltsp-server b/helpers/DATA/tasksel/trisquel-tasks/ltsp-server index c409aa2..d1c78e0 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/ltsp-server +++ b/helpers/DATA/tasksel/trisquel-tasks/ltsp-server @@ -2,7 +2,6 @@ Task: ltsp-server Section: user Description: LTSP server This task provides a LTSP server on a Trisquel console environment with a server optimized kernel. -Packages: list Key: trisquel-base trisquel-base-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/mail-server b/helpers/DATA/tasksel/trisquel-tasks/mail-server index ec68eb7..ff9c0e3 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/mail-server +++ b/helpers/DATA/tasksel/trisquel-tasks/mail-server @@ -3,6 +3,5 @@ Section: server Description: Postfix mail server This task selects a variety of package useful for a general purpose mail server system. -Packages: list Key: postfix diff --git a/helpers/DATA/tasksel/trisquel-tasks/openssh-server b/helpers/DATA/tasksel/trisquel-tasks/openssh-server index e495f0d..6760c48 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/openssh-server +++ b/helpers/DATA/tasksel/trisquel-tasks/openssh-server @@ -2,6 +2,5 @@ Task: openssh-server Section: server Description: OpenSSH secure shell server Selects packages needed for an OpenSSH server. -Packages: list Key: openssh-server diff --git a/helpers/DATA/tasksel/trisquel-tasks/print-server b/helpers/DATA/tasksel/trisquel-tasks/print-server index 26642cc..eda12e5 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/print-server +++ b/helpers/DATA/tasksel/trisquel-tasks/print-server @@ -2,7 +2,6 @@ Task: print-server Section: server Description: Cups print server This task sets up your system to be a print server. -Packages: list Key: cups cups-bsd diff --git a/helpers/DATA/tasksel/trisquel-tasks/samba-server b/helpers/DATA/tasksel/trisquel-tasks/samba-server index e1dfc41..50f7d6b 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/samba-server +++ b/helpers/DATA/tasksel/trisquel-tasks/samba-server @@ -3,6 +3,5 @@ Section: server Description: Samba SMB file server This task sets up your system to be a Samba file server, which is especially suitable in networks with both Windows and GNU/Linux systems. -Packages: list Key: samba diff --git a/helpers/DATA/tasksel/trisquel-tasks/triskel b/helpers/DATA/tasksel/trisquel-tasks/triskel index 61df555..3bcd9ec 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/triskel +++ b/helpers/DATA/tasksel/trisquel-tasks/triskel @@ -2,7 +2,6 @@ Task: triskel Section: user Description: Triskel desktop environment This task provides a KDE based Trisquel desktop environment and applications. -Packages: list Key: triskel triskel-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-console b/helpers/DATA/tasksel/trisquel-tasks/trisquel-console index b0ed169..7f37a0a 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-console +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-console @@ -2,7 +2,6 @@ Task: trisquel-console Section: user Description: Trisquel console environment This task provides a basic Trisquel console environment -Packages: list Key: trisquel-base trisquel-base-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop b/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop index 8e77753..0106fe0 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-desktop @@ -2,7 +2,6 @@ Task: trisquel-desktop Section: user Description: Trisquel desktop environment This task provides the standard Trisquel desktop environment and applications. -Packages: list Key: trisquel trisquel-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome b/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome index 358db11..8a9c0a7 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-gnome @@ -2,7 +2,6 @@ Task: trisquel-gnome Section: user Description: Trisquel GNOME environment This task provides a Trisquel desktop based on the GNOME environment -Packages: list Key: trisquel-gnome trisquel-gnome-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini b/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini index 4af6cff..9534af5 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini +++ b/helpers/DATA/tasksel/trisquel-tasks/trisquel-mini @@ -2,7 +2,6 @@ Task: trisquel-mini Section: user Description: Trisquel mini environment This task provides a small Trisquel desktop environment -Packages: list Key: trisquel-mini trisquel-mini-recommended diff --git a/helpers/DATA/tasksel/trisquel-tasks/web-server b/helpers/DATA/tasksel/trisquel-tasks/web-server index 7ca2b2d..279e037 100644 --- a/helpers/DATA/tasksel/trisquel-tasks/web-server +++ b/helpers/DATA/tasksel/trisquel-tasks/web-server @@ -2,7 +2,6 @@ Task: web-server Section: server Description: GLAMP web server Selects a ready-made GNU+Linux/Apache/MySQL/PHP server. -Packages: list Key: apache2 mysql-server diff --git a/helpers/make-tasksel b/helpers/make-tasksel index 8b94f62..fe9f219 100644 --- a/helpers/make-tasksel +++ b/helpers/make-tasksel @@ -1,7 +1,7 @@ #!/bin/sh # # Copyright (C) 2008-2020 Ruben Rodriguez -# Copyright (C) 2022 Luis Guzman +# Copyright (C) 2025 Luis Guzman # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -VERSION=6 +VERSION=7 COMPONENT=main . ./config @@ -26,17 +26,21 @@ COMPONENT=main # No install recommends sed 's/Install-Recommends=true/Install-Recommends=false/g' -i tasksel.pl -#Remove debian generic-tasks +# Remove debian generic-tasks sed -i '/Package: task-desktop/,/$p/d' debian/control -#Setup trisquel task required customization. +# Setup trisquel task required customization. cp -r $DATA/trisquel-tasks . cp $DATA/Makefile . cp $DATA/filter-tasks . +cp $DATA/lang-gen.sh . +cp $DATA/list packages/list + sed "/USUITE/s/.*/USUITE=$CODENAME/" Makefile -i replace "debian-tasks.desc" "trisquel-tasks.desc" -changelog "Added Trisquel's tasks" +changelog "Added Trisquel's tasks +Added Trisquel's l10n tasksel implementation for d-i" package