First, thanks a lit for maintaining these tool. `euse -p net-wireless/wpa_supplicant -E wps` fails with "ERROR: Invalid package atom. Did you forget the leading '='?" Looking at the euse code, in modify_package(), regexp are used to split the package. Reproducing the code here, and testing with "net-wireless/wpa_supplicant" as follows PACKAGE=net-wireless/wpa_supplicant atom_re="^[<>]?=?([a-z][0-9a-z/-]+[0-9a-z])(-[0-9pr._*-]+)?" pkg=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\1/") V=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\2/") echo $pkg echo $V yields """ net-wireless/wpa_supplicant _supplicant """ Limited knowledge of the extended regexp here, but adding "_" in the first group as follow PACKAGE=net-wireless/wpa_supplicant atom_re="^[<>]?=?([a-z][_0-9a-z/-]+[0-9a-z])(-[0-9pr._*-]+)?" pkg=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\1/") V=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\2/") echo $pkg echo $V yields """ net-wireless/wpa_supplicant """ quick testing: * with PACKAGE="=net-wireless/wpa_supplicant-2.10-r1", we get """ net-wireless/wpa_supplicant -2.10-r1 """ * with PACKAGE=">=sys-libs/ncurses-6.3_p20211106", we get """ sys-libs/ncurses -6.3_p20211106 """ A side-note: it would be great to specify (in the README for instance) how to report bugs. Also it is confusing that gentoolkit is mentioned on this page https://bugs.gentoo.org/describecomponents.cgi?product=Portage%20Development but this component is not selectable when reporting the bug. Thanks! $ emerge --info gentoolkit sed Portage 3.0.30 (python 3.9.10-final-0, default/linux/amd64/17.1/desktop/plasma, gcc-11.2.1, glibc-2.34-r10, 5.16.13-gentoo x86_64) ================================================================= System Settings ================================================================= System uname: Linux-5.16.13-gentoo-x86_64-Intel-R-_Core-TM-_i7-8665U_CPU_@_1.90GHz-with-glibc2.34 KiB Mem: 32679092 total, 6370888 free KiB Swap: 0 total, 0 free Timestamp of repository gentoo: Thu, 17 Mar 2022 10:30:01 +0000 Head commit of repository gentoo: b839fccce25d49df2fcfe5ed184b557796b0d6bd Head commit of repository flatpak-overlay: 4bf9a7815ca9361f86459c8a8e9bc403e3721704 Head commit of repository kdab-overlay: 7f7d39d40b5d0561c56201e7642796e99d0c99b6 sh bash 5.1_p16 ld GNU ld (Gentoo 2.37_p1 p2) 2.37 app-misc/pax-utils: 1.3.3::gentoo app-shells/bash: 5.1_p16::gentoo dev-java/java-config: 2.3.1::gentoo dev-lang/perl: 5.34.1::gentoo dev-lang/python: 2.7.18_p14::gentoo, 3.9.10_p1::gentoo, 3.10.2_p1::gentoo dev-lang/rust-bin: 1.59.0::gentoo dev-util/cmake: 3.22.3::gentoo dev-util/meson: 0.61.3::gentoo sys-apps/baselayout: 2.8::gentoo sys-apps/openrc: 0.44.10::gentoo sys-apps/sandbox: 2.29::gentoo sys-devel/autoconf: 2.13-r1::gentoo, 2.69-r5::gentoo, 2.71-r1::gentoo sys-devel/automake: 1.16.5::gentoo sys-devel/binutils: 2.37_p1-r2::gentoo sys-devel/binutils-config: 5.4.1::gentoo sys-devel/clang: 13.0.1::gentoo sys-devel/gcc: 10.3.1_p20211126::gentoo, 11.2.1_p20220115::gentoo sys-devel/gcc-config: 2.5-r1::gentoo sys-devel/libtool: 2.4.6-r6::gentoo sys-devel/lld: 13.0.1::gentoo sys-devel/llvm: 13.0.1::gentoo sys-devel/make: 4.3::gentoo sys-kernel/linux-headers: 5.16::gentoo (virtual/os-headers) sys-libs/glibc: 2.34-r10::gentoo Repositories: gentoo location: /var/db/repos/gentoo sync-type: rsync sync-uri: rsync://rsync.gentoo.org/gentoo-portage priority: -1000 sync-rsync-verify-max-age: 24 sync-rsync-extra-opts: sync-rsync-verify-metamanifest: yes sync-rsync-verify-jobs: 1 flatpak-overlay location: /var/db/repos/flatpak sync-type: git sync-uri: https://github.com/fosero/flatpak-overlay.git masters: gentoo priority: 50 kdab-overlay location: /var/db/repos/kdab sync-type: git sync-uri: https://github.com/KDAB/kdab-overlay.git masters: gentoo priority: 50 localrepo location: /var/db/repos/localrepo masters: gentoo priority: 50 ACCEPT_KEYWORDS="amd64 ~amd64" ACCEPT_LICENSE="@FREE" CBUILD="x86_64-pc-linux-gnu" CFLAGS="-O2 -march=native -pipe" CHOST="x86_64-pc-linux-gnu" CONFIG_PROTECT="/etc /usr/share/config /usr/share/gnupg/qualified.txt /usr/share/themes/oxygen-gtk/gtk-2.0 /usr/share/themes/oxygen-gtk/gtk-3.0" CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo /etc/texmf/language.dat.d /etc/texmf/language.def.d /etc/texmf/updmap.d /etc/texmf/web2c" CXXFLAGS="-O2 -march=native -pipe" DISTDIR="/var/cache/distfiles" ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR" FCFLAGS="-O2 -march=native -pipe" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs binpkg-multi-instance buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned qa-unresolved-soname-deps sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr" FFLAGS="-O2 -march=native -pipe" GENTOO_MIRRORS="https://ftp.fau.de/gentoo" LANG="en_US.utf-8" LC_ALL="en_US.utf-8" LDFLAGS="-Wl,-O1 -Wl,--as-needed" MAKEOPTS="-j4" PKGDIR="/var/cache/binpkgs" PORTAGE_CONFIGROOT="/" PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git" PORTAGE_TMPDIR="/dev/shm" SHELL="/bin/bash" USE="X a52 aac acl acpi activities adns alsa amd64 audit avif bcrypt berkdb blake2 bluetooth bluray boost branding brightness-control brotli bzip2 cacert cairo caps cdda cdr chm cli colord cplugins crypt cscope cups curl dbus declarative dia djvu dri dts dvd dvdr ed25519 egl eglfs elf elogind encode eps epub evdev exif ffmpeg fftw fits flac fontconfig fontforge fortran gdbm gif gles gles2 gmp gold gpm graphviz gsl gtk gui heif highlight http2 iconv icu idn imagemagick ipv6 jack jpeg jpeg2k json kde kms kwallet lapack lapacke latex lcms libbsd libglvnd libnotify libsamplerate libtirpc lm-sensors lv2 lz4 lzma mad markdown metis mms mng mobi mp3 mp4 mpeg mtp multilib ncurses nls nptl ogg openexr opengl openmp pam pango pcre pdf perl plasma plugins pm-utils png policykit postscript ppds pthread python qml qt5 quiche raw readline rtmp sasl screencast sctp sdl seccomp semantic-desktop sparse speex spell split-usr sqlite ssh ssl startup-notification svg svt-av1 szip terminal theora threads thunderbolt tiff tools touchpad truetype udev udisks unicode upower usb utils v4l vaapi vim-syntax vorbis wayland webp widgets x264 xar xattr xcb xml xpm xv xvid xxhash yaml z3 zimg zlib zstd" ABI_X86="64" ADA_TARGET="gnat_2020" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="mmx mmxext sse sse2 aes avx avx2 f16c fma3 pclmul popcnt sse3 sse4_1 sse4_2 ssse3" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" L10N="de en fr" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LLVM_TARGETS="BPF X86 WebAssembly" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-4 php8-0" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_9" PYTHON_TARGETS="python3_9 python3_10" USERLAND="GNU" VIDEO_CARDS="intel i965 iris" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account" Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EMERGE_DEFAULT_OPTS, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS ================================================================= Package Settings ================================================================= app-portage/gentoolkit-0.5.1-r1::gentoo was built with the following: USE="-test" ABI_X86="(64)" PYTHON_TARGETS="python3_10 python3_9 -pypy3 -python3_8" FEATURES="merge-sync binpkg-docompress ipc-sandbox fixlafiles ebuild-locks userfetch preserve-libs unmerge-logs news binpkg-multi-instance distlocks network-sandbox assume-digests multilib-strict xattr binpkg-logs protect-owned userpriv strict config-protect-if-modified unknown-features-warn usersandbox sfperms unmerge-orphans sandbox usersync parallel-fetch pid-sandbox binpkg-dostrip qa-unresolved-soname-deps" sys-apps/sed-4.8::gentoo was built with the following: USE="acl nls (-selinux) -static" ABI_X86="(64)" FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs config-protect-if-modified distlocks ebuild-locks fixlafiles ipc-sandbox merge-sync multilib-strict network-sandbox news parallel-fetch pid-sandbox preserve-libs protect-owned sandbox sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
(In reply to Olivier Huber from comment #0) > Limited knowledge of the extended regexp here, but adding "_" in the first > group as follow > > PACKAGE=net-wireless/wpa_supplicant > atom_re="^[<>]?=?([a-z][_0-9a-z/-]+[0-9a-z])(-[0-9pr._*-]+)?" > pkg=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\1/") > V=$(echo "${PACKAGE}" | sed -re "s/${atom_re}/\2/") That's an improvement, but still not entirely correct. PMS <https://projects.gentoo.org/pms/8/pms.html#x1-150003> says about package names: "A package name may contain any of the characters [A-Za-z0-9+_-]. It must not begin with a hyphen or a plus sign, and must not end in a hyphen followed by anything matching the version syntax described in section 3.2." So the first matching group should be: ([A-Za-z0-9_][A-Za-z0-9+_-]*) For the version, a regexp can be found in eapi7-ver.eclass (function _ver_compare): re="^([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9 ]+)?$" Some of the parentheses can be omitted, but this has been tested and is also used in Portage in EAPI 7 and later.
(In reply to Ulrich Müller from comment #1) Thanks for looking into this and providing useful pieces of advice. After looking at the PMS, I'm now using atom_re="^[<>]?=?([A-Za-z0-9_][A-Za-z0-9+_.-]*/[A-Za-z0-9_][A-Za-z0-9+_-]*)(-([0-9]+(\.[0-9]+)*)([a-z]?)((_(alpha|beta|pre|rc|p)[0-9]*)*)(-r[0-9]+)?)?" pkg=$(echo "${PACKAGE}" | sed -re "s:${atom_re}:\1:") V=$(echo "${PACKAGE}" | sed -re "s:${atom_re}:\2:") echo "pkg=$pkg" echo "V=$V" However, if I test that with PACKAGE=virtual/man-0-r4 it fails to split the version out. To my very limited regexp knowledge, the first group can capture the whole variable. I'm unsure how to handle this case. Would it be right to detect if a version is present in PACKAGE and only in this case to split it into pkg and V?
I've got working regular expressions here: https://github.com/mattst88/dep-parsing