Skip to content

Commit

Permalink
Merge pull request #113 from CachyOS/zsh-pgo
Browse files Browse the repository at this point in the history
feat(zsh): zsh pgo
  • Loading branch information
lseman authored Feb 3, 2024
2 parents dc65974 + a30f29b commit 03d01a1
Show file tree
Hide file tree
Showing 6 changed files with 389 additions and 0 deletions.
38 changes: 38 additions & 0 deletions zsh/.SRCINFO
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
pkgbase = zsh
pkgver = 5.9
pkgrel = 4
url = https://www.zsh.org/
arch = x86_64
license = custom
makedepends = pcre
makedepends = libcap
makedepends = gdbm
makedepends = yodl
source = https://www.zsh.org/pub/zsh-5.9.tar.xz
source = https://www.zsh.org/pub/zsh-5.9.tar.xz.asc
source = https://www.zsh.org/pub/zsh-5.9-doc.tar.xz
source = https://www.zsh.org/pub/zsh-5.9-doc.tar.xz.asc
source = 0001-50629-do-not-use-egrep-in-tests.patch
source = fix-autocompletion.patch
source = zprofile
validpgpkeys = F7B2754C7DE2830914661F0EA71D9A9D4BDB27B3
validpgpkeys = E96646BE08C0AF0AA0F90788A5FEEE3AC7937444
validpgpkeys = 7CA7ECAAF06216B90F894146ACF8146CAE8CBBC4
sha512sums = d9138b7f379ad942a5f46819d2dd52d31f3a1129f2a0d1b53d4c5cd43c318b60396da6d37c57c477b8e958fb750209aca0ae93f8c9dd42ac958de006a0ff067e
sha512sums = SKIP
sha512sums = 5cc6abcdcfb4f5ad7bc4a31364ca49dfd87ae03e0082d89cc2ba1f00570f6757266ee60894ad31b562408de91494c22f177b414b03cb78c31d92328686be9860
sha512sums = SKIP
sha512sums = af6a905e83807efb614a585ac1876e0a9cc8b745911b43915b06aab46757a6df6dfc64a7a60b53cc7e62e528c04aa7460e660a1de6720476030dd746af76c6e3
sha512sums = fa01836f40602e158fa5e802e8f2548af751c806c87a54e1761196497b2c35a68c6f8a195a5aac22c3c27e59b80b2f50bf590f124afe3ed4a9289b00033aff1f
sha512sums = b287e00d8de4dc4cfb1c52bb2aef1d4b191de3512baad4c91dc81e78ddc3e5bb07297f43924b022ac44ff401a348d8a9fa366e19ddc8ea1ea72df311f5ed0034

pkgname = zsh
pkgdesc = A very advanced and programmable command interpreter (shell) for UNIX
install = zsh.install
depends = pcre
depends = libcap
depends = gdbm
backup = etc/zsh/zprofile

pkgname = zsh-doc
pkgdesc = Info, HTML and PDF format of the ZSH documentation
164 changes: 164 additions & 0 deletions zsh/0001-50629-do-not-use-egrep-in-tests.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
commit 4fc5dc0292acd77f17281f451774ba2ca4203026
Author: Jun-ichi Takimoto <[email protected]>
Date: Thu Sep 15 18:56:20 2022 +0900

50629: do not use egrep in tests

diff --git a/Test/D07multibyte.ztst b/Test/D07multibyte.ztst
index e2e9a25ef..6909346cb 100644
--- a/Test/D07multibyte.ztst
+++ b/Test/D07multibyte.ztst
@@ -1,19 +1,7 @@
%prep

-# Find a UTF-8 locale.
- setopt multibyte
-# Don't let LC_* override our choice of locale.
- unset -m LC_\*
- mb_ok=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- mb_ok=1
- break;
- fi
- done
- if [[ -z $mb_ok ]]; then
+ LANG=$(ZTST_find_UTF8)
+ if [[ -z $LANG ]]; then
ZTST_unimplemented="no UTF-8 locale or multibyte mode is not implemented"
else
print -u $ZTST_fd Testing multibyte with locale $LANG
diff --git a/Test/E01options.ztst b/Test/E01options.ztst
index 2acbfd357..d38fbed74 100644
--- a/Test/E01options.ztst
+++ b/Test/E01options.ztst
@@ -651,7 +651,7 @@
>noktarg1
>0 1

- showopt() { setopt | egrep 'localoptions|ksharrays'; }
+ showopt() { echo ${(FM)${(@f)"$(setopt)"}:#(localoptions|ksharrays)*} }
f1() { setopt localoptions ksharrays; showopt }
f2() { setopt ksharrays; showopt }
setopt kshoptionprint
diff --git a/Test/V07pcre.ztst b/Test/V07pcre.ztst
index c9c844d2a..ca13419e5 100644
--- a/Test/V07pcre.ztst
+++ b/Test/V07pcre.ztst
@@ -6,20 +6,8 @@
return 0
fi
setopt rematch_pcre
-# Find a UTF-8 locale.
- setopt multibyte
-# Don't let LC_* override our choice of locale.
- unset -m LC_\*
- mb_ok=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- mb_ok=1
- break;
- fi
- done
- if [[ -z $mb_ok ]]; then
+ LANG=$(ZTST_find_UTF8)
+ if [[ -z $LANG ]]; then
ZTST_unimplemented="no UTF-8 locale or multibyte mode is not implemented"
else
print -u $ZTST_fd Testing PCRE multibyte with locale $LANG
diff --git a/Test/X02zlevi.ztst b/Test/X02zlevi.ztst
index 8146d6752..203c13c32 100644
--- a/Test/X02zlevi.ztst
+++ b/Test/X02zlevi.ztst
@@ -1,16 +1,7 @@
# Tests of the vi mode of ZLE

%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
comptestinit -v -z $ZTST_testdir/../Src/zsh
diff --git a/Test/X03zlebindkey.ztst b/Test/X03zlebindkey.ztst
index 43692a85b..5277332a7 100644
--- a/Test/X03zlebindkey.ztst
+++ b/Test/X03zlebindkey.ztst
@@ -3,16 +3,7 @@
# into bindings. The latter is particularly tricky with multibyte sequences.

%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
comptestinit -z $ZTST_testdir/../Src/zsh
diff --git a/Test/Y01completion.ztst b/Test/Y01completion.ztst
index 6af0efc6d..f976f9f91 100644
--- a/Test/Y01completion.ztst
+++ b/Test/Y01completion.ztst
@@ -1,16 +1,7 @@
# Tests for completion system.

%prep
- unset -m LC_\*
- ZSH_TEST_LANG=
- langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
- $(locale -a 2>/dev/null | egrep 'utf8|UTF-8'))
- for LANG in $langs; do
- if [[ é = ? ]]; then
- ZSH_TEST_LANG=$LANG
- break;
- fi
- done
+ ZSH_TEST_LANG=$(ZTST_find_UTF8)
if ( zmodload zsh/zpty 2>/dev/null ); then
. $ZTST_srcdir/comptest
mkdir comp.tmp
diff --git a/Test/ztst.zsh b/Test/ztst.zsh
index aca275c1c..d95b726e7 100755
--- a/Test/ztst.zsh
+++ b/Test/ztst.zsh
@@ -37,6 +37,21 @@ emulate -R zsh
# LANG must be passed to child zsh.
export LANG

+# find UTF-8 locale
+ZTST_find_UTF8 () {
+ setopt multibyte
+ # Don't let LC_* override our choice of locale.
+ unset -m LC_\*
+ local langs=(en_{US,GB}.{UTF-,utf}8 en.UTF-8
+ ${(M)$(locale -a 2>/dev/null):#*.(utf8|UTF-8)})
+ for LANG in $langs; do
+ if [[ é = ? ]]; then
+ echo $LANG
+ return
+ fi
+ done
+}
+
# Don't propagate variables that are set by default in the shell.
typeset +x WORDCHARS

135 changes: 135 additions & 0 deletions zsh/PKGBUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# Maintainer: Pierre Schmitz <[email protected]>
# PGO Version: Laio Seman <laio [at] ieee.org>

pkgbase=zsh
pkgname=('zsh')
pkgver=5.9
pkgrel=4
arch=('x86_64')
url='https://www.zsh.org/'
license=('custom')
makedepends=('pcre' 'libcap' 'gdbm' 'yodl' 'gcc')
source=("https://www.zsh.org/pub/zsh-${pkgver}"{,-doc}".tar.xz"{,.asc}
'0001-50629-do-not-use-egrep-in-tests.patch'
'fix-autocompletion.patch'
'zprofile')
sha512sums=('d9138b7f379ad942a5f46819d2dd52d31f3a1129f2a0d1b53d4c5cd43c318b60396da6d37c57c477b8e958fb750209aca0ae93f8c9dd42ac958de006a0ff067e'
'SKIP'
'5cc6abcdcfb4f5ad7bc4a31364ca49dfd87ae03e0082d89cc2ba1f00570f6757266ee60894ad31b562408de91494c22f177b414b03cb78c31d92328686be9860'
'SKIP'
'af6a905e83807efb614a585ac1876e0a9cc8b745911b43915b06aab46757a6df6dfc64a7a60b53cc7e62e528c04aa7460e660a1de6720476030dd746af76c6e3'
'fa01836f40602e158fa5e802e8f2548af751c806c87a54e1761196497b2c35a68c6f8a195a5aac22c3c27e59b80b2f50bf590f124afe3ed4a9289b00033aff1f'
'b287e00d8de4dc4cfb1c52bb2aef1d4b191de3512baad4c91dc81e78ddc3e5bb07297f43924b022ac44ff401a348d8a9fa366e19ddc8ea1ea72df311f5ed0034')
validpgpkeys=('F7B2754C7DE2830914661F0EA71D9A9D4BDB27B3'
'E96646BE08C0AF0AA0F90788A5FEEE3AC7937444'
'7CA7ECAAF06216B90F894146ACF8146CAE8CBBC4')

prepare() {
cd "${srcdir}/${pkgbase}-${pkgver}"

# 50629: do not use egrep in tests
patch -Np1 <../0001-50629-do-not-use-egrep-in-tests.patch

# https://github.com/zsh-users/zsh/commit/3e3cfabcc74dc79d4d8717c4e5859d8d01be6c54
# https://www.zsh.org/mla/workers/2022/msg00652.html
patch -Np1 <../fix-autocompletion.patch

# Set correct keymap path
sed -i 's#/usr/share/keymaps#/usr/share/kbd/keymaps#g' Completion/Unix/Command/_loadkeys

# Fix usb.ids path
sed -i 's#/usr/share/misc/usb.ids#/usr/share/hwdata/usb.ids#g' Completion/Linux/Command/_lsusb

# Remove unneeded and conflicting completion scripts
for _fpath in AIX BSD Cygwin Darwin Debian Mandriva openSUSE Redhat Solaris; do
rm -rf Completion/$_fpath
sed "s#\s*Completion/$_fpath/\*/\*##g" -i Src/Zle/complete.mdd
done
rm Completion/Linux/Command/_pkgtool

# force generation of documentation with correct paths
rm Doc/version.yo
}

build() {
cd "${srcdir}/${pkgbase}-${pkgver}"


export CFLAGS="${CFLAGS} -fprofile-generate -fprofile-update=atomic -fprofile-partial-training"
export CXXFLAGS="${CXXFLAGS} -fprofile-generate -fprofile-update=atomic -fprofile-partial-training"

./configure --prefix=/usr \
--docdir=/usr/share/doc/zsh \
--htmldir=/usr/share/doc/zsh/html \
--enable-etcdir=/etc/zsh \
--enable-zshenv=/etc/zsh/zshenv \
--enable-zlogin=/etc/zsh/zlogin \
--enable-zlogout=/etc/zsh/zlogout \
--enable-zprofile=/etc/zsh/zprofile \
--enable-zshrc=/etc/zsh/zshrc \
--enable-maildir-support \
--with-term-lib='ncursesw' \
--enable-multibyte \
--enable-function-subdirs \
--enable-fndir=/usr/share/zsh/functions \
--enable-scriptdir=/usr/share/zsh/scripts \
--with-tcsetpgrp \
--enable-pcre \
--enable-gdbm \
--enable-cap \
--enable-zsh-secure-free

make
cd Test
ZTST_continue=1 make test || true
cd ..

export CFLAGS="${CFLAGS/-fprofile-generate/}"
export CXXFLAGS="${CXXFLAGS/-fprofile-generate/}"
export CFLAGS="${CFLAGS//-fprofile-update=atomic/}"
export CXXFLAGS="${CXXFLAGS//-fprofile-update=atomic/}"

export CFLAGS="${CFLAGS} -fprofile-use -Wno-error=coverage-mismatch"
export CXXFLAGS="${CXXFLAGS} -fprofile-use -Wno-error=coverage-mismatch"

make clean
./configure --prefix=/usr \
--docdir=/usr/share/doc/zsh \
--htmldir=/usr/share/doc/zsh/html \
--enable-etcdir=/etc/zsh \
--enable-zshenv=/etc/zsh/zshenv \
--enable-zlogin=/etc/zsh/zlogin \
--enable-zlogout=/etc/zsh/zlogout \
--enable-zprofile=/etc/zsh/zprofile \
--enable-zshrc=/etc/zsh/zshrc \
--enable-maildir-support \
--with-term-lib='ncursesw' \
--enable-multibyte \
--enable-function-subdirs \
--enable-fndir=/usr/share/zsh/functions \
--enable-scriptdir=/usr/share/zsh/scripts \
--with-tcsetpgrp \
--enable-pcre \
--enable-gdbm \
--enable-cap \
--enable-zsh-secure-free

make
}

check() {
cd "${srcdir}/${pkgbase}-${pkgver}"
HOME="${srcdir}" make check || true
}

package_zsh() {
pkgdesc='A very advanced and programmable command interpreter (shell) for UNIX'
depends=('pcre' 'libcap' 'gdbm')
backup=('etc/zsh/zprofile')
install=zsh.install

cd "${srcdir}/${pkgbase}-${pkgver}"
make DESTDIR="${pkgdir}/" install
install -D -m644 "${srcdir}/zprofile" "${pkgdir}/etc/zsh/zprofile"
install -D -m644 LICENCE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
}
37 changes: 37 additions & 0 deletions zsh/fix-autocompletion.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
From 3e3cfabcc74dc79d4d8717c4e5859d8d01be6c54 Mon Sep 17 00:00:00 2001
From: Bart Schaefer <[email protected]>
Date: Fri, 3 Jun 2022 20:08:15 -0700
Subject: [PATCH] 50325: revert 38150 and fix in calling function
cfp_matcher_range() instead

---
Src/Zle/compmatch.c | 2 +-
Src/Zle/computil.c | 2 +-
1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Src/Zle/compmatch.c b/Src/Zle/compmatch.c
index bb8359f1d1..56e5509a45 100644
--- a/Src/Zle/compmatch.c
+++ b/Src/Zle/compmatch.c
@@ -1319,7 +1319,7 @@ pattern_match_equivalence(Cpattern lp, convchar_t wind, int wmtp,
convchar_t lchr;
int lmtp;

- if (!PATMATCHINDEX(lp->u.str, wind, &lchr, &lmtp)) {
+ if (!PATMATCHINDEX(lp->u.str, wind-1, &lchr, &lmtp)) {
/*
* No equivalent. No possible match; give up.
*/
diff --git a/Src/Zle/computil.c b/Src/Zle/computil.c
index 59abb4cc40..77ccdebf7e 100644
--- a/Src/Zle/computil.c
+++ b/Src/Zle/computil.c
@@ -4383,7 +4383,7 @@ cfp_matcher_range(Cmatcher *ms, char *add)
* word pattern.
*/
if ((ind = pattern_match_equivalence
- (m->word, ind, mt, addc)) != CHR_INVALID) {
+ (m->word, ind+1, mt, addc)) != CHR_INVALID) {
if (ret) {
if (imeta(ind)) {
*p++ = Meta;
1 change: 1 addition & 0 deletions zsh/zprofile
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
emulate sh -c 'source /etc/profile'
14 changes: 14 additions & 0 deletions zsh/zsh.install
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/bin/sh

post_install() {
grep -qe '^/bin/zsh$' etc/shells || echo '/bin/zsh' >> etc/shells
grep -qe '^/usr/bin/zsh$' etc/shells || echo '/usr/bin/zsh' >> etc/shells
}

post_upgrade() {
post_install
}

pre_remove() {
sed -i -r '/^(\/usr)?\/bin\/zsh$/d' etc/shells
}

0 comments on commit 03d01a1

Please sign in to comment.