From 0ff7e0c998bb4fbc67925be762b528ae6585c4f3 Mon Sep 17 00:00:00 2001 From: Günther Deschner Date: Fri, 1 Oct 2010 10:34:14 +0200 Subject: samba: share readline wrappers among all buildsystems. Guenther --- libcli/smbreadline/readline.m4 | 96 ++++++++++++++++ libcli/smbreadline/smbreadline.c | 180 ++++++++++++++++++++++++++++++ libcli/smbreadline/smbreadline.h | 10 ++ libcli/smbreadline/wscript_build | 8 ++ libcli/smbreadline/wscript_configure | 52 +++++++++ source3/Makefile.in | 2 +- source3/client/client.c | 2 + source3/include/proto.h | 8 -- source3/lib/readline.c | 174 ----------------------------- source3/rpcclient/rpcclient.c | 1 + source3/torture/vfstest.c | 1 + source3/utils/net_rpc_shell.c | 1 + source3/wscript | 1 + source3/wscript_build | 15 +-- source4/Makefile.in | 2 +- source4/client/client.c | 2 +- source4/configure.ac | 2 +- source4/lib/registry/tools/regshell.c | 2 +- source4/lib/smbreadline/readline.m4 | 96 ---------------- source4/lib/smbreadline/smbreadline.h | 9 -- source4/lib/smbreadline/wscript_build | 8 -- source4/lib/smbreadline/wscript_configure | 52 --------- source4/torture/shell.c | 2 +- source4/torture/smbtorture.c | 2 +- source4/wscript | 2 +- source4/wscript_build | 2 +- 26 files changed, 366 insertions(+), 366 deletions(-) create mode 100644 libcli/smbreadline/readline.m4 create mode 100644 libcli/smbreadline/smbreadline.c create mode 100644 libcli/smbreadline/smbreadline.h create mode 100644 libcli/smbreadline/wscript_build create mode 100644 libcli/smbreadline/wscript_configure delete mode 100644 source3/lib/readline.c delete mode 100644 source4/lib/smbreadline/readline.m4 delete mode 100644 source4/lib/smbreadline/smbreadline.h delete mode 100644 source4/lib/smbreadline/wscript_build delete mode 100644 source4/lib/smbreadline/wscript_configure diff --git a/libcli/smbreadline/readline.m4 b/libcli/smbreadline/readline.m4 new file mode 100644 index 0000000000..f450cacac9 --- /dev/null +++ b/libcli/smbreadline/readline.m4 @@ -0,0 +1,96 @@ +############################################### +# Readline included by default unless explicitly asked not to +test "${with_readline+set}" != "set" && with_readline=yes + +EXTERNAL_READLINE=no +# test for where we get readline() from +AC_MSG_CHECKING(whether to use readline) +AC_ARG_WITH(readline, +[AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])], +[ case "$with_readline" in + yes) + AC_MSG_RESULT(yes) + + AC_CHECK_HEADERS(readline.h history.h readline/readline.h) + AC_CHECK_HEADERS(readline/history.h) + + AC_CHECK_HEADERS(readline.h readline/readline.h,[ + for termlib in ncurses curses termcap terminfo termlib tinfo; do + AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) + done + AC_CHECK_LIB(readline, rl_callback_handler_install, + [TERMLIBS="-lreadline $TERMLIBS" + EXTERNAL_READLINE=yes + break], [TERMLIBS=], $TERMLIBS)]) + ;; + no) + AC_MSG_RESULT(no) + ;; + *) + AC_MSG_RESULT(yes) + + # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at + # alternate readline path + _ldflags=${LDFLAGS} + _cppflags=${CPPFLAGS} + + # Add additional search path + LDFLAGS="-L$with_readline/lib $LDFLAGS" + CPPFLAGS="-I$with_readline/include $CPPFLAGS" + + AC_CHECK_HEADERS(readline.h history.h readline/readline.h) + AC_CHECK_HEADERS(readline/history.h) + + AC_CHECK_HEADERS(readline.h readline/readline.h,[ + for termlib in ncurses curses termcap terminfo termlib; do + AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) + done + AC_CHECK_LIB(readline, rl_callback_handler_install, + [TERMLDFLAGS="-L$with_readline/lib" + TERMCPPFLAGS="-I$with_readline/include" + LDFLAGS="-L$with_readline/lib $LDFLAGS" + CPPFLAGS="-I$with_readline/include $CPPFLAGS" + TERMLIBS="-lreadline $TERMLIBS" + EXTERNAL_READLINE=yes + break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)]) + + ;; + esac], + AC_MSG_RESULT(no) +) + +# The readline API changed slightly from readline3 to readline4, so +# code will generate warnings on one of them unless we have a few +# special cases. +AC_CHECK_LIB(readline, rl_completion_matches, + [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, + [Do we have rl_completion_matches?])], + [], + [$TERMLIBS]) + +# not all readline libs have rl_event_hook or history_list +AC_CHECK_DECLS(rl_event_hook, [], [], [ + #include + #include +]) +AC_CHECK_LIB(readline, history_list, + [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])], + [], + [$TERMLIBS]) + +AC_CHECK_LIB(readline, add_history, + [AC_DEFINE(HAVE_ADD_HISTORY, 1, [Do we have add_history?])], + [], + [$TERMLIBS]) + +AC_MSG_CHECKING(whether to use extern readline) +if test x"$EXTERNAL_READLINE" = x"yes"; then + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) + SMB_SUBSYSTEM(SMBREADLINE, [\$(smbreadlinesrcdir)/smbreadline.o], [READLINE]) + SMB_EXT_LIB(READLINE, [${TERMLIBS}]) + SMB_ENABLE(READLINE,YES) +else + SMB_SUBSYSTEM(SMBREADLINE, [\$(smbreadlinesrcdir)/smbreadline.o], []) + AC_MSG_RESULT(no) +fi diff --git a/libcli/smbreadline/smbreadline.c b/libcli/smbreadline/smbreadline.c new file mode 100644 index 0000000000..f8441ac5a3 --- /dev/null +++ b/libcli/smbreadline/smbreadline.c @@ -0,0 +1,180 @@ +/* + Unix SMB/CIFS implementation. + Samba readline wrapper implementation + Copyright (C) Simo Sorce 2001 + Copyright (C) Andrew Tridgell 2001 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include "includes.h" +#include "../lib/util/select.h" +#include "system/filesys.h" +#include "system/select.h" +#include "system/readline.h" +#include "libcli/smbreadline/smbreadline.h" + +#undef malloc + +#ifdef HAVE_LIBREADLINE +# ifdef HAVE_READLINE_READLINE_H +# include +# ifdef HAVE_READLINE_HISTORY_H +# include +# endif +# else +# ifdef HAVE_READLINE_H +# include +# ifdef HAVE_HISTORY_H +# include +# endif +# else +# undef HAVE_LIBREADLINE +# endif +# endif +#endif + +static bool smb_rl_done; + +#if HAVE_LIBREADLINE +/* + * MacOS/X does not have rl_done in readline.h, but + * readline.so has it + */ +extern int rl_done; +#endif + +void smb_readline_done(void) +{ + smb_rl_done = true; +#if HAVE_LIBREADLINE + rl_done = 1; +#endif +} + +/**************************************************************************** + Display the prompt and wait for input. Call callback() regularly +****************************************************************************/ + +static char *smb_readline_replacement(const char *prompt, void (*callback)(void), + char **(completion_fn)(const char *text, int start, int end)) +{ + fd_set fds; + char *line = NULL; + struct timeval timeout; + int fd = x_fileno(x_stdin); + char *ret; + + /* Prompt might be NULL in non-interactive mode. */ + if (prompt) { + x_fprintf(x_stdout, "%s", prompt); + x_fflush(x_stdout); + } + + line = (char *)malloc(BUFSIZ); + if (!line) { + return NULL; + } + + while (!smb_rl_done) { + timeout.tv_sec = 5; + timeout.tv_usec = 0; + + FD_ZERO(&fds); + FD_SET(fd,&fds); + + if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) { + ret = x_fgets(line, BUFSIZ, x_stdin); + if (ret == 0) { + SAFE_FREE(line); + } + return ret; + } + if (callback) { + callback(); + } + } + SAFE_FREE(line); + return NULL; +} + +/**************************************************************************** + Display the prompt and wait for input. Call callback() regularly. +****************************************************************************/ + +char *smb_readline(const char *prompt, void (*callback)(void), + char **(completion_fn)(const char *text, int start, int end)) +{ + char *ret; + bool interactive; + + interactive = isatty(x_fileno(x_stdin)) || getenv("CLI_FORCE_INTERACTIVE"); + if (!interactive) { + return smb_readline_replacement(NULL, callback, completion_fn); + } + +#if HAVE_LIBREADLINE + + /* Aargh! Readline does bizzare things with the terminal width + that mucks up expect(1). Set CLI_NO_READLINE in the environment + to force readline not to be used. */ + + if (getenv("CLI_NO_READLINE")) + return smb_readline_replacement(prompt, callback, completion_fn); + + if (completion_fn) { + /* The callback prototype has changed slightly between + different versions of Readline, so the same function + works in all of them to date, but we get compiler + warnings in some. */ + rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn; + } + +#if HAVE_DECL_RL_EVENT_HOOK + if (callback) + rl_event_hook = (Function *)callback; +#endif + ret = readline(prompt); + if (ret && *ret) + add_history(ret); + +#else + ret = smb_readline_replacement(prompt, callback, completion_fn); +#endif + + return ret; +} + +/**************************************************************************** + * return line buffer text + ****************************************************************************/ +const char *smb_readline_get_line_buffer(void) +{ +#if defined(HAVE_LIBREADLINE) + return rl_line_buffer; +#else + return NULL; +#endif +} + + +/**************************************************************************** + * set completion append character + ***************************************************************************/ +void smb_readline_ca_char(char c) +{ +#if defined(HAVE_LIBREADLINE) + rl_completion_append_character = c; +#endif +} diff --git a/libcli/smbreadline/smbreadline.h b/libcli/smbreadline/smbreadline.h new file mode 100644 index 0000000000..102106f262 --- /dev/null +++ b/libcli/smbreadline/smbreadline.h @@ -0,0 +1,10 @@ +#ifndef __SMBREADLINE_H__ +#define __SMBREADLINE_H__ + +char *smb_readline(const char *prompt, void (*callback)(void), + char **(completion_fn)(const char *text, int start, int end)); +const char *smb_readline_get_line_buffer(void); +void smb_readline_ca_char(char c); +void smb_readline_done(void); + +#endif /* __SMBREADLINE_H__ */ diff --git a/libcli/smbreadline/wscript_build b/libcli/smbreadline/wscript_build new file mode 100644 index 0000000000..17699eafa2 --- /dev/null +++ b/libcli/smbreadline/wscript_build @@ -0,0 +1,8 @@ +#!/usr/bin/env python + + +termlib=bld.env.READLINE_TERMLIB or '' + +bld.SAMBA_SUBSYSTEM('SMBREADLINE', + source='smbreadline.c', + deps=termlib + ' readline talloc') diff --git a/libcli/smbreadline/wscript_configure b/libcli/smbreadline/wscript_configure new file mode 100644 index 0000000000..cec6526898 --- /dev/null +++ b/libcli/smbreadline/wscript_configure @@ -0,0 +1,52 @@ +#!/usr/bin/env python + + +conf.CHECK_HEADERS('readline.h history.h readline/readline.h readline/history.h') +for termlib in ['ncurses', 'curses', 'termcap', 'terminfo', 'termlib', 'tinfo']: + if conf.CHECK_FUNCS_IN('tgetent', termlib): + conf.env['READLINE_TERMLIB'] = termlib + break + +conf.CHECK_CODE(''' +#ifdef HAVE_READLINE_READLINE_H +# include +# ifdef HAVE_READLINE_HISTORY_H +# include +# endif +#else +# ifdef HAVE_READLINE_H +# include +# ifdef HAVE_HISTORY_H +# include +# endif +# endif +#endif +int main(void) {rl_completion_t f; return 0;} +''', +'HAVE_RL_COMPLETION_FUNC_T', execute=False, addmain=False, +msg='Checking for rl_completion_t') + +conf.CHECK_CODE(''' +#ifdef HAVE_READLINE_READLINE_H +# include +# ifdef HAVE_READLINE_HISTORY_H +# include +# endif +#else +# ifdef HAVE_READLINE_H +# include +# ifdef HAVE_HISTORY_H +# include +# endif +# endif +#endif +int main(void) {CPPFunction f; return 0;} +''', +'HAVE_CPPFUNCTION', execute=False, addmain=False, +msg='Checking for CPPFunction') + +if conf.CHECK_FUNCS_IN('rl_completion_matches', 'readline'): + conf.DEFINE('HAVE_NEW_LIBREADLINE', 1) + +if conf.CHECK_FUNCS_IN('rl_event_hook', 'readline'): + conf.DEFINE('HAVE_HISTORY_LIST', 1) diff --git a/source3/Makefile.in b/source3/Makefile.in index 139ea70909..8be50fc519 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -481,7 +481,7 @@ LIB_OBJ = $(LIBSAMBAUTIL_OBJ) $(UTIL_OBJ) $(CRYPTO_OBJ) \ LIB_DUMMY_OBJ = lib/dummysmbd.o lib/dummyroot.o LIB_NONSMBD_OBJ = $(LIB_OBJ) $(LIB_DUMMY_OBJ) -READLINE_OBJ = lib/readline.o +READLINE_OBJ = ../libcli/smbreadline/smbreadline.o # Also depends on $(SECRETS_OBJ) $(LIBSAMBA_OBJ) # Be sure to include them into your application diff --git a/source3/client/client.c b/source3/client/client.c index e79ea16191..a24b7e3144 100644 --- a/source3/client/client.c +++ b/source3/client/client.c @@ -26,6 +26,8 @@ #include "client/client_proto.h" #include "../librpc/gen_ndr/cli_srvsvc.h" #include "../lib/util/select.h" +#include "system/readline.h" +#include "../libcli/smbreadline/smbreadline.h" #ifndef REGISTER #define REGISTER 0 diff --git a/source3/include/proto.h b/source3/include/proto.h index 4f4ea996e6..7fb0a3d088 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -654,14 +654,6 @@ void privilege_set_free(PRIVILEGE_SET *priv_set); bool is_privileged_sid( const struct dom_sid *sid ); bool grant_all_privileges( const struct dom_sid *sid ); -/* The following definitions come from lib/readline.c */ - -void smb_readline_done(void); -char *smb_readline(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)); -const char *smb_readline_get_line_buffer(void); -void smb_readline_ca_char(char c); - /* The following definitions come from lib/recvfile.c */ ssize_t sys_recvfile(int fromfd, diff --git a/source3/lib/readline.c b/source3/lib/readline.c deleted file mode 100644 index f20fc0f1db..0000000000 --- a/source3/lib/readline.c +++ /dev/null @@ -1,174 +0,0 @@ -/* - Unix SMB/CIFS implementation. - Samba readline wrapper implementation - Copyright (C) Simo Sorce 2001 - Copyright (C) Andrew Tridgell 2001 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "includes.h" -#include "../lib/util/select.h" - -#ifdef HAVE_LIBREADLINE -# ifdef HAVE_READLINE_READLINE_H -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -# else -# ifdef HAVE_READLINE_H -# include -# ifdef HAVE_HISTORY_H -# include -# endif -# else -# undef HAVE_LIBREADLINE -# endif -# endif -#endif - -static bool smb_rl_done; - -#if HAVE_LIBREADLINE -/* - * MacOS/X does not have rl_done in readline.h, but - * readline.so has it - */ -extern int rl_done; -#endif - -void smb_readline_done(void) -{ - smb_rl_done = true; -#if HAVE_LIBREADLINE - rl_done = 1; -#endif -} - -/**************************************************************************** - Display the prompt and wait for input. Call callback() regularly -****************************************************************************/ - -static char *smb_readline_replacement(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)) -{ - fd_set fds; - char *line = NULL; - struct timeval timeout; - int fd = x_fileno(x_stdin); - char *ret; - - /* Prompt might be NULL in non-interactive mode. */ - if (prompt) { - x_fprintf(x_stdout, "%s", prompt); - x_fflush(x_stdout); - } - - line = (char *)SMB_MALLOC(BUFSIZ); - if (!line) { - return NULL; - } - - while (!smb_rl_done) { - timeout.tv_sec = 5; - timeout.tv_usec = 0; - - FD_ZERO(&fds); - FD_SET(fd,&fds); - - if (sys_select_intr(fd+1,&fds,NULL,NULL,&timeout) == 1) { - ret = x_fgets(line, BUFSIZ, x_stdin); - if (ret == 0) { - SAFE_FREE(line); - } - return ret; - } - if (callback) { - callback(); - } - } - SAFE_FREE(line); - return NULL; -} - -/**************************************************************************** - Display the prompt and wait for input. Call callback() regularly. -****************************************************************************/ - -char *smb_readline(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)) -{ - char *ret; - bool interactive; - - interactive = isatty(x_fileno(x_stdin)) || getenv("CLI_FORCE_INTERACTIVE"); - if (!interactive) { - return smb_readline_replacement(NULL, callback, completion_fn); - } - -#if HAVE_LIBREADLINE - - /* Aargh! Readline does bizzare things with the terminal width - that mucks up expect(1). Set CLI_NO_READLINE in the environment - to force readline not to be used. */ - - if (getenv("CLI_NO_READLINE")) - return smb_readline_replacement(prompt, callback, completion_fn); - - if (completion_fn) { - /* The callback prototype has changed slightly between - different versions of Readline, so the same function - works in all of them to date, but we get compiler - warnings in some. */ - rl_attempted_completion_function = RL_COMPLETION_CAST completion_fn; - } - -#if HAVE_DECL_RL_EVENT_HOOK - if (callback) - rl_event_hook = (Function *)callback; -#endif - ret = readline(prompt); - if (ret && *ret) - add_history(ret); - -#else - ret = smb_readline_replacement(prompt, callback, completion_fn); -#endif - - return ret; -} - -/**************************************************************************** - * return line buffer text - ****************************************************************************/ -const char *smb_readline_get_line_buffer(void) -{ -#if defined(HAVE_LIBREADLINE) - return rl_line_buffer; -#else - return NULL; -#endif -} - - -/**************************************************************************** - * set completion append character - ***************************************************************************/ -void smb_readline_ca_char(char c) -{ -#if defined(HAVE_LIBREADLINE) - rl_completion_append_character = c; -#endif -} diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index a1faca78d8..b0412ef1d2 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -27,6 +27,7 @@ #include "rpc_client/cli_lsarpc.h" #include "../librpc/gen_ndr/ndr_netlogon.h" #include "rpc_client/cli_netlogon.h" +#include "../libcli/smbreadline/smbreadline.h" enum pipe_auth_type_spnego { PIPE_AUTH_TYPE_SPNEGO_NONE = 0, diff --git a/source3/torture/vfstest.c b/source3/torture/vfstest.c index 923b5479ab..76025eef1f 100644 --- a/source3/torture/vfstest.c +++ b/source3/torture/vfstest.c @@ -26,6 +26,7 @@ #include "includes.h" #include "popt_common.h" #include "vfstest.h" +#include "../libcli/smbreadline/smbreadline.h" /* List to hold groups of commands */ static struct cmd_list { diff --git a/source3/utils/net_rpc_shell.c b/source3/utils/net_rpc_shell.c index d005da63e7..82f9f29ced 100644 --- a/source3/utils/net_rpc_shell.c +++ b/source3/utils/net_rpc_shell.c @@ -23,6 +23,7 @@ #include "utils/net.h" #include "../librpc/gen_ndr/ndr_samr.h" #include "lib/netapi/netapi.h" +#include "../libcli/smbreadline/smbreadline.h" static NTSTATUS rpc_sh_info(struct net_context *c, TALLOC_CTX *mem_ctx, struct rpc_sh_ctx *ctx, diff --git a/source3/wscript b/source3/wscript index 909008b234..d39bedb13a 100644 --- a/source3/wscript +++ b/source3/wscript @@ -87,6 +87,7 @@ def configure(conf): conf.RECURSE('../lib/nss_wrapper') conf.RECURSE('../lib/socket_wrapper') conf.RECURSE('../lib/zlib') + conf.RECURSE('../libcli/smbreadline') conf.CHECK_HEADERS('execinfo.h libexc.h libunwind.h netdb.h') diff --git a/source3/wscript_build b/source3/wscript_build index 0d70a936ec..f724729f3b 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -215,8 +215,6 @@ LIB_SRC = '''${LIBSAMBAUTIL_SRC} ${UTIL_SRC} LIB_DUMMY_SRC = '''lib/dummysmbd.c lib/dummyroot.c''' LIB_NONSMBD_SRC = '''${LIB_DUMMY_SRC}''' -READLINE_SRC = '''lib/readline.c''' - POPT_LIB_SRC = '''lib/popt_common.c''' PARAM_WITHOUT_REG_SRC = '''param/loadparm.c param/util.c param/loadparm_server_role.c @@ -986,6 +984,7 @@ t.env.BUILDDIR = bld.path.abspath() bld.SETUP_BUILD_GROUPS() bld.RECURSE('../lib/replace') +bld.RECURSE('../libcli/smbreadline') print "SBINDIR=%s" % bld.env.SBINDIR bld.RECURSE('build') @@ -1220,10 +1219,6 @@ bld.SAMBA_SUBSYSTEM('PROFILE', source='${PROFILE_SRC}', vars=locals()) -bld.SAMBA_SUBSYSTEM('READLINE', - source=READLINE_SRC, - vars=locals()) - bld.SAMBA_SUBSYSTEM('PRINTBASE', source=PRINTBASE_SRC, vars=locals()) @@ -1359,21 +1354,21 @@ bld.SAMBA_BINARY('rpcclient/rpcclient', source=RPCCLIENT_SRC, deps='''talloc tdb cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN LIBMSRPC - LIBADS READLINE DISPLAY_SEC DCUTIL''', + LIBADS SMBREADLINE DISPLAY_SEC DCUTIL''', vars=locals()) bld.SAMBA_BINARY('smbclient', source=CLIENT_SRC, deps='''talloc tdb cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN - LIBMSRPC READLINE DISPLAY_SEC SOCKET_WRAPPER''', + LIBMSRPC SMBREADLINE DISPLAY_SEC SOCKET_WRAPPER''', vars=locals()) bld.SAMBA_BINARY('net', source=NET_SRC, deps='''talloc tdb libnetapi libaddns cap resolv POPT_SAMBA PASSDB LIBSMB LIB_NONSMBD PARAM_WITHOUT_REG libwbclient PARAM KRBCLIENT LIBMSRPC_GEN LIBMSRPC LIBGPO LIBADS LIBADS_SERVER LIBADS_PRINTER - LOCALE_DIR LIBAFS LIBAFS_SETTOKEN READLINE PASSWD_UTIL LIBNET + LOCALE_DIR LIBAFS LIBAFS_SETTOKEN SMBREADLINE PASSWD_UTIL LIBNET LIBNET_DSSYNC LIBNET_SAMSYNC LIBEVENTLOG DISPLAY_SEC DCUTIL REGFIO NDR_NTPRINTING''', vars=locals()) @@ -1507,7 +1502,7 @@ bld.SAMBA_BINARY('pdbtest', bld.SAMBA_BINARY('vfstest', source=VFSTEST_SRC, - deps='''SMBD_BASE READLINE''', + deps='''SMBD_BASE SMBREADLINE''', vars=locals()) bld.SAMBA_BINARY('smbiconv', diff --git a/source4/Makefile.in b/source4/Makefile.in index 40f35e0308..7c4f1416ff 100644 --- a/source4/Makefile.in +++ b/source4/Makefile.in @@ -68,7 +68,7 @@ tdbsrcdir := ../lib/tdb ldbsrcdir := lib/ldb libtlssrcdir := lib/tls libregistrysrcdir := lib/registry -smbreadlinesrcdir := lib/smbreadline +smbreadlinesrcdir := ../libcli/smbreadline libmessagingsrcdir := lib/messaging libteventsrcdir := ../lib/tevent libeventssrcdir := lib/events diff --git a/source4/client/client.c b/source4/client/client.c index ee5357f1bf..93d6f34495 100644 --- a/source4/client/client.c +++ b/source4/client/client.c @@ -45,7 +45,7 @@ #include "system/time.h" /* needed by some systems for asctime() */ #include "libcli/resolve/resolve.h" #include "libcli/security/security.h" -#include "lib/smbreadline/smbreadline.h" +#include "../libcli/smbreadline/smbreadline.h" #include "librpc/gen_ndr/ndr_nbt.h" #include "param/param.h" #include "libcli/raw/raw_proto.h" diff --git a/source4/configure.ac b/source4/configure.ac index f415d0bbb4..bdbbb30d71 100644 --- a/source4/configure.ac +++ b/source4/configure.ac @@ -12,7 +12,7 @@ AC_DEFINE(CONFIG_H_IS_FROM_SAMBA,1,[Marker for samba's config.h.]) # Configuration rules. m4_include(build/m4/env.m4) m4_include(../lib/replace/samba.m4) -m4_include(lib/smbreadline/readline.m4) +m4_include(../libcli/smbreadline/readline.m4) m4_include(heimdal_build/config.m4) m4_include(../lib/util/fault.m4) m4_include(../lib/util/signal.m4) diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c index 993fe3d791..6bd7fd3b8b 100644 --- a/source4/lib/registry/tools/regshell.c +++ b/source4/lib/registry/tools/regshell.c @@ -24,7 +24,7 @@ #include "lib/cmdline/popt_common.h" #include "lib/events/events.h" #include "system/time.h" -#include "lib/smbreadline/smbreadline.h" +#include "../libcli/smbreadline/smbreadline.h" #include "librpc/gen_ndr/ndr_security.h" #include "lib/registry/tools/common.h" #include "param/param.h" diff --git a/source4/lib/smbreadline/readline.m4 b/source4/lib/smbreadline/readline.m4 deleted file mode 100644 index 06d60caae1..0000000000 --- a/source4/lib/smbreadline/readline.m4 +++ /dev/null @@ -1,96 +0,0 @@ -############################################### -# Readline included by default unless explicitly asked not to -test "${with_readline+set}" != "set" && with_readline=yes - -EXTERNAL_READLINE=no -# test for where we get readline() from -AC_MSG_CHECKING(whether to use readline) -AC_ARG_WITH(readline, -[AS_HELP_STRING([--with-readline[=DIR]], [Look for readline include/libs in DIR (default=auto)])], -[ case "$with_readline" in - yes) - AC_MSG_RESULT(yes) - - AC_CHECK_HEADERS(readline.h history.h readline/readline.h) - AC_CHECK_HEADERS(readline/history.h) - - AC_CHECK_HEADERS(readline.h readline/readline.h,[ - for termlib in ncurses curses termcap terminfo termlib tinfo; do - AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) - done - AC_CHECK_LIB(readline, rl_callback_handler_install, - [TERMLIBS="-lreadline $TERMLIBS" - EXTERNAL_READLINE=yes - break], [TERMLIBS=], $TERMLIBS)]) - ;; - no) - AC_MSG_RESULT(no) - ;; - *) - AC_MSG_RESULT(yes) - - # Needed for AC_CHECK_HEADERS and AC_CHECK_LIB to look at - # alternate readline path - _ldflags=${LDFLAGS} - _cppflags=${CPPFLAGS} - - # Add additional search path - LDFLAGS="-L$with_readline/lib $LDFLAGS" - CPPFLAGS="-I$with_readline/include $CPPFLAGS" - - AC_CHECK_HEADERS(readline.h history.h readline/readline.h) - AC_CHECK_HEADERS(readline/history.h) - - AC_CHECK_HEADERS(readline.h readline/readline.h,[ - for termlib in ncurses curses termcap terminfo termlib; do - AC_CHECK_LIB(${termlib}, tgetent, [TERMLIBS="-l${termlib}"; break]) - done - AC_CHECK_LIB(readline, rl_callback_handler_install, - [TERMLDFLAGS="-L$with_readline/lib" - TERMCPPFLAGS="-I$with_readline/include" - LDFLAGS="-L$with_readline/lib $LDFLAGS" - CPPFLAGS="-I$with_readline/include $CPPFLAGS" - TERMLIBS="-lreadline $TERMLIBS" - EXTERNAL_READLINE=yes - break], [TERMLIBS= CPPFLAGS=$_cppflags], $TERMLIBS)]) - - ;; - esac], - AC_MSG_RESULT(no) -) - -# The readline API changed slightly from readline3 to readline4, so -# code will generate warnings on one of them unless we have a few -# special cases. -AC_CHECK_LIB(readline, rl_completion_matches, - [AC_DEFINE(HAVE_NEW_LIBREADLINE, 1, - [Do we have rl_completion_matches?])], - [], - [$TERMLIBS]) - -# not all readline libs have rl_event_hook or history_list -AC_CHECK_DECLS(rl_event_hook, [], [], [ - #include - #include -]) -AC_CHECK_LIB(readline, history_list, - [AC_DEFINE(HAVE_HISTORY_LIST, 1, [Do we have history_list?])], - [], - [$TERMLIBS]) - -AC_CHECK_LIB(readline, add_history, - [AC_DEFINE(HAVE_ADD_HISTORY, 1, [Do we have add_history?])], - [], - [$TERMLIBS]) - -AC_MSG_CHECKING(whether to use extern readline) -if test x"$EXTERNAL_READLINE" = x"yes"; then - AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_LIBREADLINE,1,[Whether the system has readline]) - SMB_SUBSYSTEM(SMBREADLINE, [\$(smbreadlinesrcdir)/smbreadline.o], [READLINE]) - SMB_EXT_LIB(READLINE, [${TERMLIBS}]) - SMB_ENABLE(READLINE,YES) -else - SMB_SUBSYSTEM(SMBREADLINE, [\$(smbreadlinesrcdir)/smbreadline.o], []) - AC_MSG_RESULT(no) -fi diff --git a/source4/lib/smbreadline/smbreadline.h b/source4/lib/smbreadline/smbreadline.h deleted file mode 100644 index cde2b47a24..0000000000 --- a/source4/lib/smbreadline/smbreadline.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef __SMBREADLINE_H__ -#define __SMBREADLINE_H__ - -char *smb_readline(const char *prompt, void (*callback)(void), - char **(completion_fn)(const char *text, int start, int end)); -const char *smb_readline_get_line_buffer(void); -void smb_readline_ca_char(char c); - -#endif /* __SMBREADLINE_H__ */ diff --git a/source4/lib/smbreadline/wscript_build b/source4/lib/smbreadline/wscript_build deleted file mode 100644 index 17699eafa2..0000000000 --- a/source4/lib/smbreadline/wscript_build +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env python - - -termlib=bld.env.READLINE_TERMLIB or '' - -bld.SAMBA_SUBSYSTEM('SMBREADLINE', - source='smbreadline.c', - deps=termlib + ' readline talloc') diff --git a/source4/lib/smbreadline/wscript_configure b/source4/lib/smbreadline/wscript_configure deleted file mode 100644 index cec6526898..0000000000 --- a/source4/lib/smbreadline/wscript_configure +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env python - - -conf.CHECK_HEADERS('readline.h history.h readline/readline.h readline/history.h') -for termlib in ['ncurses', 'curses', 'termcap', 'terminfo', 'termlib', 'tinfo']: - if conf.CHECK_FUNCS_IN('tgetent', termlib): - conf.env['READLINE_TERMLIB'] = termlib - break - -conf.CHECK_CODE(''' -#ifdef HAVE_READLINE_READLINE_H -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -#else -# ifdef HAVE_READLINE_H -# include -# ifdef HAVE_HISTORY_H -# include -# endif -# endif -#endif -int main(void) {rl_completion_t f; return 0;} -''', -'HAVE_RL_COMPLETION_FUNC_T', execute=False, addmain=False, -msg='Checking for rl_completion_t') - -conf.CHECK_CODE(''' -#ifdef HAVE_READLINE_READLINE_H -# include -# ifdef HAVE_READLINE_HISTORY_H -# include -# endif -#else -# ifdef HAVE_READLINE_H -# include -# ifdef HAVE_HISTORY_H -# include -# endif -# endif -#endif -int main(void) {CPPFunction f; return 0;} -''', -'HAVE_CPPFUNCTION', execute=False, addmain=False, -msg='Checking for CPPFunction') - -if conf.CHECK_FUNCS_IN('rl_completion_matches', 'readline'): - conf.DEFINE('HAVE_NEW_LIBREADLINE', 1) - -if conf.CHECK_FUNCS_IN('rl_event_hook', 'readline'): - conf.DEFINE('HAVE_HISTORY_LIST', 1) diff --git a/source4/torture/shell.c b/source4/torture/shell.c index 03c670a902..4c098a9748 100644 --- a/source4/torture/shell.c +++ b/source4/torture/shell.c @@ -21,7 +21,7 @@ #include "includes.h" #include "system/readline.h" -#include "lib/smbreadline/smbreadline.h" +#include "../libcli/smbreadline/smbreadline.h" #include "lib/cmdline/popt_common.h" #include "auth/credentials/credentials.h" #include "torture/smbtorture.h" diff --git a/source4/torture/smbtorture.c b/source4/torture/smbtorture.c index 940ce85c74..8989bdf8d2 100644 --- a/source4/torture/smbtorture.c +++ b/source4/torture/smbtorture.c @@ -24,7 +24,7 @@ #include "system/wait.h" #include "system/filesys.h" #include "system/readline.h" -#include "lib/smbreadline/smbreadline.h" +#include "../libcli/smbreadline/smbreadline.h" #include "libcli/libcli.h" #include "lib/events/events.h" diff --git a/source4/wscript b/source4/wscript index 64502b3f4f..806c58a4f2 100644 --- a/source4/wscript +++ b/source4/wscript @@ -109,7 +109,7 @@ def configure(conf): conf.RECURSE('../lib/uid_wrapper') conf.RECURSE('../lib/popt') conf.RECURSE('../lib/subunit/c') - conf.RECURSE('lib/smbreadline') + conf.RECURSE('../libcli/smbreadline') conf.RECURSE('../pidl') conf.RECURSE('selftest') diff --git a/source4/wscript_build b/source4/wscript_build index 110ca3ea2f..a4236643e9 100644 --- a/source4/wscript_build +++ b/source4/wscript_build @@ -110,7 +110,7 @@ bld.RECURSE('../libcli/samsync') bld.RECURSE('lib/policy') bld.RECURSE('../libcli/named_pipe_auth') bld.RECURSE('heimdal_build') -bld.RECURSE('lib/smbreadline') +bld.RECURSE('../libcli/smbreadline') bld.RECURSE('../codepages') bld.RECURSE('setup') bld.RECURSE('scripting') -- cgit