From adee5315265cc46aa6a3057071527abb16e1cd94 Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Fri, 9 Nov 2012 19:55:57 -0600 Subject: Rename readline to gnu-readline The Readline class clashes with the Readline module from the Ruby stdlib. This has mostly worked, but with the recent debugging support's integration of IRB, it is no longer possible for them to coexist. So we need to rename it. The implications of this are: - Anything that depends on readline will reinstall it as "gnu-readline". Anything already installed will continue to function. - "brew upgrade readline" will say "gnu-readline not installed", as "readline" is now an alias. - Probably other things. So there are some downsides, but we will just have to deal with them. Fixes #15776. --- Library/Formula/gnu-readline.rb | 190 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 Library/Formula/gnu-readline.rb (limited to 'Library/Formula/gnu-readline.rb') diff --git a/Library/Formula/gnu-readline.rb b/Library/Formula/gnu-readline.rb new file mode 100644 index 000000000..183cd8d19 --- /dev/null +++ b/Library/Formula/gnu-readline.rb @@ -0,0 +1,190 @@ +require 'formula' + +class GnuReadline < Formula + homepage 'http://tiswww.case.edu/php/chet/readline/rltop.html' + url 'http://ftpmirror.gnu.org/readline/readline-6.2.tar.gz' + mirror 'http://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz' + sha256 '79a696070a058c233c72dd6ac697021cc64abd5ed51e59db867d66d196a89381' + version '6.2.4' + + keg_only <<-EOS.undent + OS X provides the BSD libedit library, which shadows libreadline. + In order to prevent conflicts when programs look for libreadline we are + defaulting this GNU Readline installation to keg-only. + EOS + + # Vendor the patches. + # The mirrors are unreliable for getting the patches, and the more patches + # there are, the more unreliable they get. Pulling this patch inline to + # reduce bug reports. + # Upstream patches can be found in: + # http://ftpmirror.gnu.org/readline/readline-6.2-patches + def patches; DATA; end + + def install + # Always build universal, per https://github.com/mxcl/homebrew/issues/issue/899 + ENV.universal_binary + system "./configure", "--prefix=#{prefix}", + "--mandir=#{man}", + "--infodir=#{info}", + "--enable-multibyte" + system "make install" + end +end + +__END__ +diff --git a/callback.c b/callback.c +index 4ee6361..7682cd0 100644 +--- a/callback.c ++++ b/callback.c +@@ -148,6 +148,9 @@ rl_callback_read_char () + eof = _rl_vi_domove_callback (_rl_vimvcxt); + /* Should handle everything, including cleanup, numeric arguments, + and turning off RL_STATE_VIMOTION */ ++ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) ++ _rl_internal_char_cleanup (); ++ + return; + } + #endif +diff --git a/input.c b/input.c +index 7c74c99..b49af88 100644 +--- a/input.c ++++ b/input.c +@@ -409,7 +409,7 @@ rl_clear_pending_input () + int + rl_read_key () + { +- int c; ++ int c, r; + + rl_key_sequence_length++; + +@@ -429,14 +429,18 @@ rl_read_key () + { + while (rl_event_hook) + { +- if (rl_gather_tyi () < 0) /* XXX - EIO */ ++ if (rl_get_char (&c) != 0) ++ break; ++ ++ if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ + { + rl_done = 1; + return ('\n'); + } ++ else if (r == 1) /* read something */ ++ continue; ++ + RL_CHECK_SIGNALS (); +- if (rl_get_char (&c) != 0) +- break; + if (rl_done) /* XXX - experimental */ + return ('\n'); + (*rl_event_hook) (); +diff --git a/patchlevel b/patchlevel +index fdf4740..626a945 100644 +--- a/patchlevel ++++ b/patchlevel +@@ -1,3 +1,3 @@ + # Do not edit -- exists only for use by patch + +-1 ++4 +diff --git a/support/shobj-conf b/support/shobj-conf +index 5a63e80..c61dc78 100644 +--- a/support/shobj-conf ++++ b/support/shobj-conf +@@ -157,7 +157,7 @@ freebsd[4-9]*|freebsdelf*|dragonfly*) + ;; + + # Darwin/MacOS X +-darwin[89]*|darwin10*) ++darwin[89]*|darwin1[012]*) + SHOBJ_STATUS=supported + SHLIB_STATUS=supported + +@@ -186,7 +186,7 @@ darwin*|macosx*) + SHLIB_LIBSUFF='dylib' + + case "${host_os}" in +- darwin[789]*|darwin10*) SHOBJ_LDFLAGS='' ++ darwin[789]*|darwin1[012]*) SHOBJ_LDFLAGS='' + SHLIB_XLDFLAGS='-dynamiclib -arch_only `/usr/bin/arch` -install_name $(libdir)/$@ -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' + ;; + *) SHOBJ_LDFLAGS='-dynamic' +diff --git a/vi_mode.c b/vi_mode.c +index 41e1dbb..4408053 100644 +--- a/vi_mode.c ++++ b/vi_mode.c +@@ -1114,7 +1114,7 @@ rl_domove_read_callback (m) + rl_beg_of_line (1, c); + _rl_vi_last_motion = c; + RL_UNSETSTATE (RL_STATE_VIMOTION); +- return (0); ++ return (vidomove_dispatch (m)); + } + #if defined (READLINE_CALLBACKS) + /* XXX - these need to handle rl_universal_argument bindings */ +@@ -1234,11 +1234,19 @@ rl_vi_delete_to (count, key) + _rl_vimvcxt->motion = '$'; + r = rl_domove_motion_callback (_rl_vimvcxt); + } +- else if (vi_redoing) ++ else if (vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ + { + _rl_vimvcxt->motion = _rl_vi_last_motion; + r = rl_domove_motion_callback (_rl_vimvcxt); + } ++ else if (vi_redoing) /* handle redoing `dd' here */ ++ { ++ _rl_vimvcxt->motion = _rl_vi_last_motion; ++ rl_mark = rl_end; ++ rl_beg_of_line (1, key); ++ RL_UNSETSTATE (RL_STATE_VIMOTION); ++ r = vidomove_dispatch (_rl_vimvcxt); ++ } + #if defined (READLINE_CALLBACKS) + else if (RL_ISSTATE (RL_STATE_CALLBACK)) + { +@@ -1316,11 +1324,19 @@ rl_vi_change_to (count, key) + _rl_vimvcxt->motion = '$'; + r = rl_domove_motion_callback (_rl_vimvcxt); + } +- else if (vi_redoing) ++ else if (vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ + { + _rl_vimvcxt->motion = _rl_vi_last_motion; + r = rl_domove_motion_callback (_rl_vimvcxt); + } ++ else if (vi_redoing) /* handle redoing `cc' here */ ++ { ++ _rl_vimvcxt->motion = _rl_vi_last_motion; ++ rl_mark = rl_end; ++ rl_beg_of_line (1, key); ++ RL_UNSETSTATE (RL_STATE_VIMOTION); ++ r = vidomove_dispatch (_rl_vimvcxt); ++ } + #if defined (READLINE_CALLBACKS) + else if (RL_ISSTATE (RL_STATE_CALLBACK)) + { +@@ -1377,6 +1393,19 @@ rl_vi_yank_to (count, key) + _rl_vimvcxt->motion = '$'; + r = rl_domove_motion_callback (_rl_vimvcxt); + } ++ else if (vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ ++ { ++ _rl_vimvcxt->motion = _rl_vi_last_motion; ++ r = rl_domove_motion_callback (_rl_vimvcxt); ++ } ++ else if (vi_redoing) /* handle redoing `yy' here */ ++ { ++ _rl_vimvcxt->motion = _rl_vi_last_motion; ++ rl_mark = rl_end; ++ rl_beg_of_line (1, key); ++ RL_UNSETSTATE (RL_STATE_VIMOTION); ++ r = vidomove_dispatch (_rl_vimvcxt); ++ } + #if defined (READLINE_CALLBACKS) + else if (RL_ISSTATE (RL_STATE_CALLBACK)) + { -- cgit v1.2.3