Updating CPPFunction in old readline consumers
One of my favourite open source utilities is tdl, a
command-line to-do list manager. I was recently updating a SmartOS VM
for development work, and noticed that I lacked a working tdl
binary.
An attempt to build it resulted in a failure like
gcc -O2 -Wall -DUSE_DOTLOCK=1 -DUSE_READLINE=1 -DBARE_READLINE_H=0 -DUSE_RL_COMPLETION_MATCHES=1 -c inter.c
inter.c: In function 'interactive_text_readline':
inter.c:559:3: error: unknown type name 'Function'
inter.c:562:25: warning: assignment from incompatible pointer type [enabled by default]
inter.c:568:21: warning: assignment from incompatible pointer type [enabled by default]
inter.c: In function 'interactive_text':
inter.c:636:41: error: 'CPPFunction' undeclared (first use in this function)
inter.c:636:41: note: each undeclared identifier is reported only once for each function it appears in
inter.c:636:54: error: expected expression before ')' token
inter.c:638:54: error: expected expression before ')' token
inter.c: In function 'interactive':
inter.c:656:41: error: 'CPPFunction' undeclared (first use in this function)
inter.c:656:54: error: expected expression before ')' token
inter.c: At top level:
inter.c:320:15: warning: 'tdl_completion' defined but not used [-Wunused-function]
inter.c:343:15: warning: 'null_tdl_completion' defined but not used [-Wunused-function]
inter.c: In function 'get_line_stdio':
inter.c:605:1: warning: control reaches end of non-void function [-Wreturn-type]
Makefile:61: recipe for target 'inter.o' failed
make: *** [inter.o] Error 1
Version 1.5.2 of tdl
was released on 02004-02-03. The contemporary version
of GNU readline
would have been 4.3; today, pkgsrc
on SmartOS delivers
readline
6.3, which was released 02014-02-26. I know I’ve built tdl
much
more recently than 02004, so I decided to spend some time to determine what’s
changed between these two components.
With 6.3, the compatibility type definitions for Function
, CPFunction
,
CPPFunction
, and VFunction
were finally removed. Each of these “old style”
readline function types can typically be replaced with the “new style” types as
follows
Function
becomesrl_hook_func_t
in hook assignments.Function
may map to other function types inrltypedefs.h
if a non-void argument list is given.VFunction
becomesrl_voidfunc_t
.VCPFunction
becomesrl_vcpfunc_t
.CPFunction
becomesrl_compentry_func_t
.CPPFunction
becomesrl_completion_func_t
.
The patch for tdl-1.5.2:inter.c
resolves all but the final
warning above, and should lead to happy task tracking with tdl
.
(If you are on MacOS X (and potentially on other systems that deliver
editline
), then the editline
include files that provide readline.h
declarations still provide the old style definitions.)