1require "mkmf" 2 3readline = Struct.new(:headers, :extra_check).new(["stdio.h"]) 4 5def readline.have_header(header) 6 if super(header, &extra_check) 7 headers.push(header) 8 return true 9 else 10 return false 11 end 12end 13 14def readline.have_var(var) 15 return super(var, headers) 16end 17 18def readline.have_func(func) 19 return super(func, headers) 20end 21 22def readline.have_type(type) 23 return super(type, headers) 24end 25 26dir_config('curses') 27dir_config('ncurses') 28dir_config('termcap') 29dir_config("readline") 30enable_libedit = enable_config("libedit") 31 32have_library("user32", nil) if /cygwin/ === RUBY_PLATFORM 33have_library("ncurses", "tgetnum") || 34 have_library("termcap", "tgetnum") || 35 have_library("curses", "tgetnum") 36 37case enable_libedit 38when true 39 # --enable-libedit 40 unless (readline.have_header("editline/readline.h") || 41 readline.have_header("readline/readline.h")) && 42 have_library("edit", "readline") 43 raise "libedit not found" 44 end 45when false 46 # --disable-libedit 47 unless ((readline.have_header("readline/readline.h") && 48 readline.have_header("readline/history.h")) && 49 have_library("readline", "readline")) 50 raise "readline not found" 51 end 52else 53 # does not specify 54 unless ((readline.have_header("readline/readline.h") && 55 readline.have_header("readline/history.h")) && 56 (have_library("readline", "readline") || 57 have_library("edit", "readline"))) || 58 (readline.have_header("editline/readline.h") && 59 have_library("edit", "readline")) 60 raise "readline nor libedit not found" 61 end 62end 63 64readline.have_func("rl_getc") 65readline.have_func("rl_getc_function") 66readline.have_func("rl_filename_completion_function") 67readline.have_func("rl_username_completion_function") 68readline.have_func("rl_completion_matches") 69readline.have_func("rl_refresh_line") 70readline.have_var("rl_deprep_term_function") 71readline.have_var("rl_completion_append_character") 72readline.have_var("rl_basic_word_break_characters") 73readline.have_var("rl_completer_word_break_characters") 74readline.have_var("rl_basic_quote_characters") 75readline.have_var("rl_completer_quote_characters") 76readline.have_var("rl_filename_quote_characters") 77readline.have_var("rl_attempted_completion_over") 78readline.have_var("rl_library_version") 79readline.have_var("rl_editing_mode") 80readline.have_var("rl_line_buffer") 81readline.have_var("rl_point") 82# workaround for native windows. 83/mswin|bccwin|mingw/ !~ RUBY_PLATFORM && readline.have_var("rl_event_hook") 84/mswin|bccwin|mingw/ !~ RUBY_PLATFORM && readline.have_var("rl_catch_sigwinch") 85/mswin|bccwin|mingw/ !~ RUBY_PLATFORM && readline.have_var("rl_catch_signals") 86readline.have_var("rl_pre_input_hook") 87readline.have_var("rl_special_prefixes") 88readline.have_func("rl_cleanup_after_signal") 89readline.have_func("rl_free_line_state") 90readline.have_func("rl_clear_signals") 91readline.have_func("rl_set_screen_size") 92readline.have_func("rl_get_screen_size") 93readline.have_func("rl_vi_editing_mode") 94readline.have_func("rl_emacs_editing_mode") 95readline.have_func("replace_history_entry") 96readline.have_func("remove_history") 97readline.have_func("clear_history") 98readline.have_func("rl_redisplay") 99readline.have_func("rl_insert_text") 100unless readline.have_type("rl_hook_func_t*") 101 $defs << "-Drl_hook_func_t=Function" 102end 103 104create_makefile("readline") 105