From 763de4a079979239c9b48fc770c8c55570b9680a256b65e99cc5027178dbfb91 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Fri, 14 Jun 2024 22:35:27 +0300 Subject: [PATCH] herbe skel --- build/distfiles/.gitignore | 2 + .../herbe-1.0.0-10-gdec89e4.tar.zst.do | 7 ++ build/skel/graphics/freetype-2.9.1.do | 7 ++ .../skel/sysutils/herbe-1.0.0-10-gdec89e4.do | 23 ++++ .../skel/sysutils/herbe-vertical-stack.patch | 114 ++++++++++++++++++ 5 files changed, 153 insertions(+) create mode 100644 build/distfiles/herbe-1.0.0-10-gdec89e4.tar.zst.do create mode 100644 build/skel/sysutils/herbe-1.0.0-10-gdec89e4.do create mode 100644 build/skel/sysutils/herbe-vertical-stack.patch diff --git a/build/distfiles/.gitignore b/build/distfiles/.gitignore index 3f1b5c4..193c53d 100644 --- a/build/distfiles/.gitignore +++ b/build/distfiles/.gitignore @@ -63,6 +63,8 @@ /grep-3.11.tar.xz /guix.git/ /harfbuzz-8.5.0.tar.xz +/herbe-1.0.0-10-gdec89e4.tar.zst +/herbe.git/ /httpd-2.4.59.tar.bz2 /icu4c-63.tgz /icu4c-75.tgz diff --git a/build/distfiles/herbe-1.0.0-10-gdec89e4.tar.zst.do b/build/distfiles/herbe-1.0.0-10-gdec89e4.tar.zst.do new file mode 100644 index 0000000..805f558 --- /dev/null +++ b/build/distfiles/herbe-1.0.0-10-gdec89e4.tar.zst.do @@ -0,0 +1,7 @@ +[ -n "$BASS_ROOT" ] || BASS_ROOT="$(dirname "$(realpath -- "$0")")"/../.. +sname=$1.do . "$BASS_ROOT"/lib/rc +[ -d herbe.git ] || git clone --depth 1 --bare https://github.com/dudik/herbe.git >&2 +cd herbe.git +commit=dec89e4d669a38a3f6dd8a6f2e2bae39f26369d3 +git fetch origin $commit >&2 +git archive --prefix=${1%.tar.zst}/ $commit | $COMPRESSOR diff --git a/build/skel/graphics/freetype-2.9.1.do b/build/skel/graphics/freetype-2.9.1.do index 261b8c4..74b30d3 100644 --- a/build/skel/graphics/freetype-2.9.1.do +++ b/build/skel/graphics/freetype-2.9.1.do @@ -20,4 +20,11 @@ gmake install >&2 cd "$SKELBINS"/$ARCH "$BASS_ROOT"/build/lib/prepare-preinst-010-rdeps $NAME-$hsh $rdeps +mkdir -p $NAME-$hsh/skelpkg/$NAME-$hsh/hooks/postinst +cat >$NAME-$hsh/skelpkg/$NAME-$hsh/hooks/postinst/01rc-add <>rc +EOF +chmod +x $NAME-$hsh/skelpkg/$NAME-$hsh/hooks/postinst/01rc-add "$BASS_ROOT"/build/lib/mk-pkg $NAME-$hsh diff --git a/build/skel/sysutils/herbe-1.0.0-10-gdec89e4.do b/build/skel/sysutils/herbe-1.0.0-10-gdec89e4.do new file mode 100644 index 0000000..a8f43b8 --- /dev/null +++ b/build/skel/sysutils/herbe-1.0.0-10-gdec89e4.do @@ -0,0 +1,23 @@ +[ -n "$BASS_ROOT" ] || BASS_ROOT="$(dirname "$(realpath -- "$0")")"/../../../.. +sname=$1.do . "$BASS_ROOT"/lib/rc +. "$BASS_ROOT"/build/skel/common.rc + +bdeps="rc-paths stow archivers/zstd" +rdeps=graphics/freetype-2.9.1 +redo-ifchange $bdeps "$DISTFILES"/$NAME.tar.zst $rdeps +hsh=$("$BASS_ROOT"/build/bin/cksum $BASS_REV $SPATH) +. "$BASS_ROOT"/build/lib/create-tmp-for-build.rc +"$BASS_ROOT"/build/bin/pkg-inst $bdeps $rdeps +. ./rc +$TAR xf "$DISTFILES"/$NAME.tar.zst +"$BASS_ROOT"/bin/rm-r "$SKELBINS"/$ARCH/$NAME-$hsh + +cd $NAME +patch <"$BASS_ROOT"/build/skel/sysutils/herbe-vertical-stack.patch >&2 +make -j$MAKE_JOBS CFLAGS="$CFLAGS -lX11 -lXft $LDFLAGS" >&2 +mkdir -p "$SKELBINS"/$ARCH/$NAME-$hsh/bin +mv herbe "$SKELBINS"/$ARCH/$NAME-$hsh/bin + +cd "$SKELBINS"/$ARCH +"$BASS_ROOT"/build/lib/prepare-preinst-010-rdeps $NAME-$hsh $rdeps +"$BASS_ROOT"/build/lib/mk-pkg $NAME-$hsh diff --git a/build/skel/sysutils/herbe-vertical-stack.patch b/build/skel/sysutils/herbe-vertical-stack.patch new file mode 100644 index 0000000..ee6514a --- /dev/null +++ b/build/skel/sysutils/herbe-vertical-stack.patch @@ -0,0 +1,114 @@ +From 8dada09a170c60ce7a57ea67dd00ef086ee68cfe Mon Sep 17 00:00:00 2001 +From: Sergey Matveev +Date: Fri, 14 Jun 2024 22:22:23 +0300 +Subject: [PATCH] Vertical stacking + +--- + herbe.c | 44 ++++++++++++++++++++++++++++---------------- + 1 file changed, 28 insertions(+), 16 deletions(-) + +diff --git a/herbe.c b/herbe.c +index 51d3990..b0a3208 100644 +--- a/herbe.c ++++ b/herbe.c +@@ -7,7 +7,8 @@ + #include + #include + #include +-#include ++#include ++#include + + #include "config.h" + +@@ -79,13 +80,22 @@ void expire(int sig) + XFlush(display); + } + ++void read_y_offset(unsigned int **offset, int *id) { ++ int shm_id = shmget(8432, sizeof(unsigned int), IPC_CREAT | 0660); ++ if (shm_id == -1) die("shmget failed"); ++ ++ *offset = (unsigned int *)shmat(shm_id, 0, 0); ++ if (*offset == (unsigned int *)-1) die("shmat failed\n"); ++ *id = shm_id; ++} ++ ++void free_y_offset(int id) { ++ shmctl(id, IPC_RMID, NULL); ++} ++ + int main(int argc, char *argv[]) + { +- if (argc == 1) +- { +- sem_unlink("/herbe"); +- die("Usage: %s body", argv[0]); +- } ++ if (argc == 1) die("Usage: %s body", argv[0]); + + struct sigaction act_expire, act_ignore; + +@@ -151,16 +161,22 @@ int main(int argc, char *argv[]) + } + } + +- unsigned int x = pos_x; +- unsigned int y = pos_y; ++ int y_offset_id; ++ unsigned int *y_offset; ++ read_y_offset(&y_offset, &y_offset_id); ++ + unsigned int text_height = font->ascent - font->descent; + unsigned int height = (num_of_lines - 1) * line_spacing + num_of_lines * text_height + 2 * padding; ++ unsigned int x = pos_x; ++ unsigned int y = pos_y + *y_offset; ++ ++ unsigned int used_y_offset = (*y_offset) += height + padding; + + if (corner == TOP_RIGHT || corner == BOTTOM_RIGHT) +- x = screen_width - width - border_size * 2 - pos_x; ++ x = screen_width - width - border_size * 2 - x; + + if (corner == BOTTOM_LEFT || corner == BOTTOM_RIGHT) +- y = screen_height - height - border_size * 2 - pos_y; ++ y = screen_height - height - border_size * 2 - y; + + window = XCreateWindow(display, RootWindow(display, screen), x, y, width, height, border_size, DefaultDepth(display, screen), + CopyFromParent, visual, CWOverrideRedirect | CWBackPixel | CWBorderPixel, &attributes); +@@ -171,9 +187,6 @@ int main(int argc, char *argv[]) + XSelectInput(display, window, ExposureMask | ButtonPress); + XMapWindow(display, window); + +- sem_t *mutex = sem_open("/herbe", O_CREAT, 0644, 1); +- sem_wait(mutex); +- + sigaction(SIGUSR1, &act_expire, 0); + sigaction(SIGUSR2, &act_expire, 0); + +@@ -204,12 +217,11 @@ int main(int argc, char *argv[]) + } + } + +- sem_post(mutex); +- sem_close(mutex); + + for (int i = 0; i < num_of_lines; i++) + free(lines[i]); + ++ if (used_y_offset == *y_offset) free_y_offset(y_offset_id); + free(lines); + XftDrawDestroy(draw); + XftColorFree(display, visual, colormap, &color); +@@ -217,4 +229,4 @@ int main(int argc, char *argv[]) + XCloseDisplay(display); + + return exit_code; +-} +\ No newline at end of file ++} + +base-commit: dec89e4d669a38a3f6dd8a6f2e2bae39f26369d3 +-- +2.45.2 + -- 2.48.1