Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package bemenu for openSUSE:Factory checked in at 2022-02-22 21:18:08 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bemenu (Old) and /work/SRC/openSUSE:Factory/.bemenu.new.1958 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bemenu" Tue Feb 22 21:18:08 2022 rev:13 rq:956607 version:0.6.7 Changes: -------- --- /work/SRC/openSUSE:Factory/bemenu/bemenu.changes 2022-02-21 17:48:43.215631891 +0100 +++ /work/SRC/openSUSE:Factory/.bemenu.new.1958/bemenu.changes 2022-02-22 21:18:42.370291908 +0100 @@ -1,0 +2,7 @@ +Tue Feb 22 06:46:32 UTC 2022 - Michael Vetter <mvet...@suse.com> + +- Update to 0.6.7: + * Symbol validation #247 + * wayland: various fixes #249 + +------------------------------------------------------------------- Old: ---- 0.6.6.tar.gz New: ---- 0.6.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bemenu.spec ++++++ --- /var/tmp/diff_new_pack.83gsv7/_old 2022-02-22 21:18:42.890292003 +0100 +++ /var/tmp/diff_new_pack.83gsv7/_new 2022-02-22 21:18:42.894292003 +0100 @@ -18,7 +18,7 @@ %define bcond_with curses Name: bemenu -Version: 0.6.6 +Version: 0.6.7 Release: 0 Summary: Dynamic menu library and client program inspired by dmenu License: MIT ++++++ 0.6.6.tar.gz -> 0.6.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/.github/workflows/ci.yml new/bemenu-0.6.7/.github/workflows/ci.yml --- old/bemenu-0.6.6/.github/workflows/ci.yml 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/.github/workflows/ci.yml 2022-02-22 01:01:04.000000000 +0100 @@ -17,15 +17,25 @@ run: make PREFIX=install EXTRA_WARNINGS=-Werror - name: make install run: make install PREFIX=install + - name: print install tree + run: find install | sort + - name: check symbols + run: make check-symbols osx: runs-on: macos-latest steps: - uses: actions/checkout@v2 - name: install build deps - run: brew update; brew install make pkg-config + run: brew update; brew install make pkg-config scdoc - name: make - run: sh build-osx.sh EXTRA_WARNINGS=-Werror clients curses + run: sh build-osx.sh EXTRA_WARNINGS=-Werror PREFIX=install clients curses + - name: make install + run: sh build-osx.sh PREFIX=install install + - name: print install tree + run: find install | sort + - name: check symbols + run: sh build-osx.sh check-symbols doxygen: runs-on: ubuntu-latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/GNUmakefile new/bemenu-0.6.7/GNUmakefile --- old/bemenu-0.6.6/GNUmakefile 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/GNUmakefile 2022-02-22 01:01:04.000000000 +0100 @@ -60,16 +60,19 @@ cdl.a: private override LDFLAGS += -fPIC cdl.a: lib/3rdparty/cdl.c lib/3rdparty/cdl.h +util.a: private override LDFLAGS += -fPIC +util.a: lib/util.c lib/internal.h + libbemenu.so: private override LDLIBS += -ldl -libbemenu.so: lib/bemenu.h lib/internal.h lib/filter.c lib/item.c lib/library.c lib/list.c lib/menu.c lib/util.c cdl.a +libbemenu.so: lib/bemenu.h lib/internal.h lib/filter.c lib/item.c lib/library.c lib/list.c lib/menu.c util.a cdl.a bemenu-renderer-curses.so: private override LDLIBS += $(shell pkg-config --libs ncursesw) -lm bemenu-renderer-curses.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I ncursesw) -bemenu-renderer-curses.so: lib/renderers/curses/curses.c +bemenu-renderer-curses.so: lib/renderers/curses/curses.c util.a bemenu-renderer-x11.so: private override LDLIBS += $(shell pkg-config --libs x11 xinerama cairo pango pangocairo) bemenu-renderer-x11.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I x11 xinerama cairo pango pangocairo) -bemenu-renderer-x11.so: lib/renderers/cairo_renderer.h lib/renderers/x11/x11.c lib/renderers/x11/x11.h lib/renderers/x11/window.c lib/renderers/x11/xkb_unicode.c lib/renderers/x11/xkb_unicode.h +bemenu-renderer-x11.so: lib/renderers/cairo_renderer.h lib/renderers/x11/x11.c lib/renderers/x11/x11.h lib/renderers/x11/window.c lib/renderers/x11/xkb_unicode.c lib/renderers/x11/xkb_unicode.h util.a lib/renderers/wayland/xdg-shell.c: wayland-scanner private-code < "$$(pkg-config --variable=pkgdatadir wayland-protocols)/stable/xdg-shell/xdg-shell.xml" > $@ @@ -97,7 +100,7 @@ xdg-output.a: lib/renderers/wayland/xdg-output-unstable-v1.c lib/renderers/wayland/xdg-output-unstable-v1.h bemenu-renderer-wayland.so: private override LDLIBS += $(shell pkg-config --libs wayland-client cairo pango pangocairo xkbcommon) bemenu-renderer-wayland.so: private override CPPFLAGS += $(shell pkg-config --cflags-only-I wayland-client cairo pango pangocairo xkbcommon) -bemenu-renderer-wayland.so: lib/renderers/cairo_renderer.h lib/renderers/wayland/wayland.c lib/renderers/wayland/wayland.h lib/renderers/wayland/registry.c lib/renderers/wayland/window.c xdg-shell.a wlr-layer-shell.a xdg-output.a +bemenu-renderer-wayland.so: lib/renderers/cairo_renderer.h lib/renderers/wayland/wayland.c lib/renderers/wayland/wayland.h lib/renderers/wayland/registry.c lib/renderers/wayland/window.c xdg-shell.a wlr-layer-shell.a xdg-output.a util.a common.a: client/common/common.c client/common/common.h bemenu: common.a client/bemenu.c @@ -124,8 +127,8 @@ -chmod 0755 $(addprefix "$(DESTDIR)$(PREFIX)$(bindir)"/,$(bins)) install-man: bemenu.1 - mkdir -p "$(DESTDIR)$(PREFIX)$(mandir)" - -cp $< "$(DESTDIR)$(PREFIX)$(mandir)" + -hash scdoc && mkdir -p "$(DESTDIR)$(PREFIX)$(mandir)" + -hash scdoc && cp $< "$(DESTDIR)$(PREFIX)$(mandir)" install-renderers: install-curses install-wayland install-x11 @@ -158,6 +161,9 @@ git archive --prefix="bemenu-$(VERSION)/" -o "bemenu-$(VERSION).tar.gz" "$(GIT_TAG)" gpg --default-key "$(GPG_KEY_ID)" --armor --detach-sign "bemenu-$(VERSION).tar.gz" +check-symbols: libbemenu.so lib/bemenu.h + sh scripts/check-symbols.sh $^ bemenu-renderer-*.so + clean: $(RM) -r *.dSYM # OSX generates .dSYM dirs with -g ... $(RM) $(pkgconfigs) $(libs) $(bins) $(renderers) $(mans) *.a *.so.* @@ -175,4 +181,4 @@ .DELETE_ON_ERROR: .PHONY: all clean uninstall install install-base install-pkgconfig install-include install-libs install-lib-symlinks \ install-man install-bins install-docs install-renderers install-curses install-wayland install-x11 \ - doxygen sign clients curses x11 wayland + doxygen sign check-symbols clients curses x11 wayland diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/VERSION new/bemenu-0.6.7/VERSION --- old/bemenu-0.6.6/VERSION 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/VERSION 2022-02-22 01:01:04.000000000 +0100 @@ -1 +1 @@ -0.6.6 +0.6.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/lib/internal.h new/bemenu-0.6.7/lib/internal.h --- old/bemenu-0.6.6/lib/internal.h 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/lib/internal.h 2022-02-22 01:01:04.000000000 +0100 @@ -401,9 +401,6 @@ /* library.c */ bool bm_renderer_activate(struct bm_renderer *renderer, struct bm_menu *menu); -/* menu.c */ -BM_PUBLIC bool bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item); - /* filter.c */ struct bm_item** bm_filter_dmenu(struct bm_menu *menu, bool addition, uint32_t *out_nmemb); struct bm_item** bm_filter_dmenu_case_insensitive(struct bm_menu *menu, bool addition, uint32_t *out_nmemb); @@ -421,22 +418,26 @@ bool list_remove_item(struct list *list, const void *item); void list_sort(struct list *list, int (*compar)(const void *a, const void *b)); -/* util.c */ -BM_PUBLIC char* bm_strdup(const char *s); -BM_PUBLIC bool bm_resize_buffer(char **in_out_buffer, size_t *in_out_size, size_t nsize); -BM_PUBLIC BM_LOG_ATTR(1, 2) char* bm_dprintf(const char *fmt, ...); -BM_PUBLIC BM_LOG_ATTR(3, 0) bool bm_vrprintf(char **in_out_buffer, size_t *in_out_len, const char *fmt, va_list args); -BM_PUBLIC size_t bm_strip_token(char *string, const char *token, size_t *out_next); -BM_PUBLIC int bm_strupcmp(const char *hay, const char *needle); -BM_PUBLIC int bm_strnupcmp(const char *hay, const char *needle, size_t len); -BM_PUBLIC char* bm_strupstr(const char *hay, const char *needle); -BM_PUBLIC int32_t bm_utf8_string_screen_width(const char *string); -BM_PUBLIC size_t bm_utf8_rune_next(const char *string, size_t start); -BM_PUBLIC size_t bm_utf8_rune_prev(const char *string, size_t start); -BM_PUBLIC size_t bm_utf8_rune_width(const char *rune, uint32_t u8len); -BM_PUBLIC size_t bm_utf8_rune_remove(char *string, size_t start, size_t *out_rune_width); -BM_PUBLIC size_t bm_utf8_rune_insert(char **string, size_t *bufSize, size_t start, const char *rune, uint32_t u8len, size_t *out_rune_width); -BM_PUBLIC size_t bm_unicode_insert(char **string, size_t *bufSize, size_t start, uint32_t unicode, size_t *out_rune_width); +/* util.c + * Functions here may be used in renderers also. They will be statically compiled to all units, + * so do not mark them as a BM_PUBLIC. + */ +char* bm_strdup(const char *s); +bool bm_resize_buffer(char **in_out_buffer, size_t *in_out_size, size_t nsize); +BM_LOG_ATTR(1, 2) char* bm_dprintf(const char *fmt, ...); +BM_LOG_ATTR(3, 0) bool bm_vrprintf(char **in_out_buffer, size_t *in_out_len, const char *fmt, va_list args); +size_t bm_strip_token(char *string, const char *token, size_t *out_next); +int bm_strupcmp(const char *hay, const char *needle); +int bm_strnupcmp(const char *hay, const char *needle, size_t len); +char* bm_strupstr(const char *hay, const char *needle); +int32_t bm_utf8_string_screen_width(const char *string); +size_t bm_utf8_rune_next(const char *string, size_t start); +size_t bm_utf8_rune_prev(const char *string, size_t start); +size_t bm_utf8_rune_width(const char *rune, uint32_t u8len); +size_t bm_utf8_rune_remove(char *string, size_t start, size_t *out_rune_width); +size_t bm_utf8_rune_insert(char **string, size_t *bufSize, size_t start, const char *rune, uint32_t u8len, size_t *out_rune_width); +size_t bm_unicode_insert(char **string, size_t *bufSize, size_t start, uint32_t unicode, size_t *out_rune_width); +bool bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item); #endif /* _BEMENU_INTERNAL_H_ */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/lib/menu.c new/bemenu-0.6.7/lib/menu.c --- old/bemenu-0.6.6/lib/menu.c 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/lib/menu.c 2022-02-22 01:01:04.000000000 +0100 @@ -39,18 +39,6 @@ bm_filter_dmenu_case_insensitive /* BM_FILTER_DMENU_CASE_INSENSITIVE */ }; -bool -bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item) -{ - assert(menu); - assert(item); - - uint32_t i, count; - struct bm_item **items = bm_menu_get_selected_items(menu, &count); - for (i = 0; i < count && items[i] != item; ++i); - return (i < count); -} - struct bm_menu* bm_menu_new(const char *renderer) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/lib/renderers/wayland/registry.c new/bemenu-0.6.7/lib/renderers/wayland/registry.c --- old/bemenu-0.6.6/lib/renderers/wayland/registry.c 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/lib/renderers/wayland/registry.c 2022-02-22 01:01:04.000000000 +0100 @@ -56,7 +56,7 @@ } char *map_str; - if ((map_str = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0)) == MAP_FAILED) { + if ((map_str = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0)) == MAP_FAILED) { close(fd); return; } @@ -605,7 +605,7 @@ if (strcmp(interface, "wl_compositor") == 0) { wayland->compositor = wl_registry_bind(registry, id, &wl_compositor_interface, 3); } else if (strcmp(interface, zwlr_layer_shell_v1_interface.name) == 0) { - wayland->layer_shell = wl_registry_bind(registry, id, &zwlr_layer_shell_v1_interface, 1); + wayland->layer_shell = wl_registry_bind(registry, id, &zwlr_layer_shell_v1_interface, 2); } else if (strcmp(interface, "wl_seat") == 0) { wayland->seat = wl_registry_bind(registry, id, &wl_seat_interface, 7); wl_seat_add_listener(wayland->seat, &seat_listener, &wayland->input); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/lib/util.c new/bemenu-0.6.7/lib/util.c --- old/bemenu-0.6.6/lib/util.c 2022-02-18 23:42:23.000000000 +0100 +++ new/bemenu-0.6.7/lib/util.c 2022-02-22 01:01:04.000000000 +0100 @@ -400,4 +400,16 @@ return bm_utf8_rune_insert(in_out_string, in_out_buf_size, start, mb, u8len, out_rune_width); } +bool +bm_menu_item_is_selected(const struct bm_menu *menu, const struct bm_item *item) +{ + assert(menu); + assert(item); + + uint32_t i, count; + struct bm_item **items = bm_menu_get_selected_items(menu, &count); + for (i = 0; i < count && items[i] != item; ++i); + return (i < count); +} + /* vim: set ts=8 sw=4 tw=0 :*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bemenu-0.6.6/scripts/check-symbols.sh new/bemenu-0.6.7/scripts/check-symbols.sh --- old/bemenu-0.6.6/scripts/check-symbols.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/bemenu-0.6.7/scripts/check-symbols.sh 2022-02-22 01:01:04.000000000 +0100 @@ -0,0 +1,42 @@ +#!/bin/sh +# Check that no internal symbols are being leaked from the library +# $1: path to the .so +# $2: path to the lib/bemenu.h + +hash grep nm sort awk comm printf cat touch + +tmp="$(mktemp -d)" +trap 'rm -rf "$tmp"' EXIT + +grep '^BM_PUBLIC' "$2" | grep -o '[a-z_]*(' | grep -o '[a-z_]*' | awk 'NF' | sort > "$tmp/hdr.txt" + +nm --extern-only "$1" |\ + awk '/T/{if (substr($3,1,1) == "_") print substr($3, 2); else print $3}' |\ + grep -o '[a-z_]*' | awk 'NF' | sort > "$tmp/lib.txt" + +comm -13 "$tmp/hdr.txt" "$tmp/lib.txt" > "$tmp/leaks.txt" +comm -23 "$tmp/hdr.txt" "$tmp/lib.txt" > "$tmp/missing.txt" + +if [ -s "$tmp/leaks.txt" ]; then + printf 'SYMBOL LEAKAGE: following symbols should not be marked BM_PUBLIC:\n' + cat "$tmp/leaks.txt" | awk '$0="> "$0' + touch "$tmp/failure" +fi + +if [ -s "$tmp/missing.txt" ]; then + printf 'SYMBOL MISSING: following BM_PUBLIC symbols were not found from the binary:\n' + cat "$tmp/missing.txt" | awk '$0="> "$0' + touch "$tmp/failure" +fi + +shift 2 +for renderer in "$@"; do + nm --extern-only "$renderer" | awk '/T/{print $3}' | grep -v register_renderer | awk 'NF' > "$tmp/${renderer}_leaks.txt" + if [ -s "$tmp/${renderer}_leaks.txt" ]; then + printf 'SYMBOL LEAKAGE: %s should only have a register_renderer symbol visible\n' "$renderer" + cat "$tmp/${renderer}_leaks.txt" | awk '$0="> "$0' + touch "$tmp/failure" + fi +done + +test -f "$tmp/failure" && exit 1 || exit 0