ports/net/samba419/files/0028-Fix-rl_completion_func_t.patch
Dimitry Andric c81f658808 net/samba419: fix rl_completion_func_t detection and usage
After a recent devel/readline update, net/samba419 fails to compile with
clang 19, resulting in errors similar to:

  ../../libcli/smbreadline/smbreadline.c:139:38: warning: 'CPPFunction' is deprecated [-Wdeprecated-declarations]
    139 |                 rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn;
        |                                                    ^
  ../../lib/replace/system/readline.h:50:31: note: expanded from macro 'RL_COMPLETION_CAST'
     50 | #  define RL_COMPLETION_CAST (CPPFunction *)
        |                               ^
  /usr/local/include/readline/rltypedefs.h:38:50: note: 'CPPFunction' has been explicitly marked deprecated here
     38 | typedef char **CPPFunction (void) __attribute__((deprecated));
        |                                                  ^
  ../../libcli/smbreadline/smbreadline.c:139:36: error: incompatible function pointer types assigning to 'rl_completion_func_t *' (aka 'char **(*)(const char *, int, int)') from 'CPPFunction *' (aka 'char **(*)(void)') [-Wincompatible-function-pointer-types]
    139 |                 rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn;
        |                                                  ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

There are two reasons: samba checks for `rl_completion_t`, while the
actual readline type is `rl_completion_func_t`, and samba's wrapper
`readline.h` header prefers the `CPPFunction` type which is deprecated,
while it should use `rl_completion_func_t` instead.

Fix the `wscript_configure` check to detect `rl_completion_func_t`, and
reverse the `HAVE_RL_COMPLETION_T` and `HAVE_CPPFUNCTION` checks in the
wrapper header.

PR:		281818
Reviewed by:	0mp
Approved by:	samba (0mp)
MFH:		2024Q3
2024-10-02 15:32:18 +02:00

33 lines
1.2 KiB
Diff

--- a/samba-4.19.8/lib/replace/system/readline.h 2023-07-18 10:14:54.478091000 +0200
+++ b/lib/replace/system/readline.h 2024-10-02 13:47:48.773606000 +0200
@@ -46,10 +46,10 @@
#endif
#ifdef HAVE_NEW_LIBREADLINE
-#ifdef HAVE_CPPFUNCTION
+#if defined(HAVE_RL_COMPLETION_FUNC_T)
+# define RL_COMPLETION_CAST (rl_completion_func_t *)
+#elif defined(HAVE_CPPFUNCTION)
# define RL_COMPLETION_CAST (CPPFunction *)
-#elif defined(HAVE_RL_COMPLETION_T)
-# define RL_COMPLETION_CAST (rl_completion_t *)
#else
# define RL_COMPLETION_CAST
#endif
diff -upr a/samba-4.19.8/libcli/smbreadline/wscript_configure b/libcli/smbreadline/wscript_configure
--- a/samba-4.19.8/libcli/smbreadline/wscript_configure 2023-07-18 10:14:54.558091600 +0200
+++ b/libcli/smbreadline/wscript_configure 2024-10-02 13:47:48.774008000 +0200
@@ -51,10 +51,10 @@ conf.CHECK_CODE('''
# endif
# endif
#endif
-int main(void) {rl_completion_t f; return 0;}
+int main(void) {rl_completion_func_t f; return 0;}
''',
'HAVE_RL_COMPLETION_FUNC_T', execute=False, addmain=False,
-msg='Checking for rl_completion_t')
+msg='Checking for rl_completion_func_t')
conf.CHECK_CODE('''
#ifdef HAVE_READLINE_READLINE_H