1 Sat Apr 15 23:07:30 2000 George Lebl <jirka@5z.com>
5 Sat Apr 15 22:42:20 2000 George Lebl <jirka@5z.com>
7 * src/main.c: fixes for ANSI C and C++. Just use GTK_VALUE_POINTER
8 instead of GTK_VALUE_OBJECT so that we don't have to cast and don't
11 Sat Apr 15 22:09:49 2000 George Lebl <jirka@5z.com>
13 * src/main.c: use the generic return type in signal marshallers
14 rather then the specific one as the marshallers are truly generic
16 Sat Apr 15 21:52:52 2000 George Lebl <jirka@5z.com>
18 * src/main.c: fix some typesafety braindamages with OBJECT types
19 in arguments by casting GTK_VALUE_OBJECT to gpointer. Also
20 for seting arguments cast the ARG to atype if it exists
22 Wed Apr 05 13:42:28 2000 George Lebl <jirka@5z.com>
24 * src/parse.y: never allow NONE to be used as one of many arguments,
25 always only by itself in the argument list
27 * src/main.c: When printing out the signal marshaller prototype,
28 don't print out the NONE (void) into the argument list, thanks
29 to Soeren Sandmann <sandmann@daimi.au.dk> for reporting that
31 Mon Apr 03 13:07:33 2000 George Lebl <jirka@5z.com>
33 * examples/Makefile.am: add my-person2.gob to EXTRA_DIST
35 Sun Apr 02 18:09:40 2000 George Lebl <jirka@5z.com>
39 Sun Apr 02 17:38:12 2000 George Lebl <jirka@5z.com>
41 * src/Makefile.am: ass the .pl and .def file to EXTRA_DIST
43 Sun Apr 2 14:37:49 PDT 2000 Manish Singh <yosh@gimp.org>
45 * configure.in: check for treefuncs.h instead of tree.h, since
46 the latter has gone bye-bye
48 Sat Apr 01 23:27:47 2000 George Lebl <jirka@5z.com>
50 * doc/gob.1.in: add documentation for defreturn
52 Sat Apr 01 18:03:31 2000 George Lebl <jirka@5z.com>
54 * src/{treefuncs.(def|c|h),generate_treefuncs.pl}: What would gob
55 be without some automatically generated code. The tree.[ch] was
56 hard to keep up and didn't have free/copy so these do, otherwise
57 it is the same. Also added a defreturn field to methods
59 * src/*.[cyl]: include treefuncs.h rather then tree.h
61 * src/{parse.y,lexer.l,main.c}: use the defreturn as the default for
62 return values of signals and virtual methods. If this is not
63 defined use the onerror or failing that '0'. onerror is also not
64 a reserved keyword anymore
66 * configure.in: raise version
68 Mon Mar 27 13:08:01 2000 George Lebl <jirka@5z.com>
72 Mon Mar 27 12:04:22 2000 George Lebl <jirka@5z.com>
74 * src/util.[ch], src/main.c: figure out if we really need the special
75 types, also make a hash for the gtk types instead of linear
76 searching it all the time.
78 * src/{lexer.c,checks.c,main.c}: minor fixes and cleanups
80 2000-03-21 Eskil Heyn Olsen <deity@eskil.dk>
82 * gob.m4: do not default GOB to no when not found (did that make
84 And better error message.
86 Mon Mar 20 14:35:35 2000 George Lebl <jirka@5z.com>
88 * src/lexer.l: handle single word typenames with an empty namespace
90 Sun Mar 05 02:23:04 2000 George Lebl <jirka@5z.com>
92 * src/main.c: add #lines around setting default handlers
94 * src/parse.y: fix line number for 'destroywith' destructors
96 Sat Mar 04 15:33:18 2000 George Lebl <jirka@5z.com>
98 * src/checks.c: duplicate name test for arguments and signals is
99 case insensitive now as those could cause trouble
101 Mon Feb 28 02:45:27 2000 George Lebl <jirka@5z.com>
105 Sun Feb 27 20:59:45 2000 George Lebl <jirka@5z.com>
107 * src/parse.y,doc/gob.1.in: For stringlink, just return a pointer on
108 get rather then strduping as that is 1) consistent with objectlink
109 and 2) more flexible.
111 Sun Feb 27 20:38:19 2000 George Lebl <jirka@5z.com>
113 * src/{main.c,tree.[ch],parse.y}: add the arbitrary destruction handler
116 * doc/gob.1.in: updated and fixed up
118 * configure.in,NEWS,examples/{README,my-person2.gob}: change version
121 Sun Feb 27 18:37:57 2000 George Lebl <jirka@5z.com>
123 * NEWS,doc/gob.1.in,examples/{README,my-person.gob,my-person2.gob}:
124 update of docs and examples to include the new features and minor
127 Sun Feb 27 04:41:41 2000 George Lebl <jirka@5z.com>
129 * src/main.c: make the output nicer for classes with no methods
130 better typechecking in get/set_arg, fix a couple of C++ issues,
132 * src/{main.c,parse.y,tree.[ch]}: automatic linking of arguments to
133 data members. Also alow empty statements inside a class. Also
134 add automatic data member destruction for pointer data, and
135 automatic initialization for any data member.
137 * src/main.[ch],src/out.c: add --no-lines which inhibits printing
138 of #line things to output files
140 * doc/gob.1.in: update for the above
142 Fri Feb 25 15:21:47 2000 George Lebl <jirka@5z.com>
146 Fri Feb 25 14:46:51 2000 George Lebl <jirka@5z.com>
148 * src/main.c: add SELF casting macros
150 * doc/gob.1.in: document the above
152 Fri Feb 25 02:29:26 2000 George Lebl <jirka@5z.com>
154 * src/main.c,src/tree.[ch],src/parse.y: public signals get
155 GTK_RUN_ACTION added. Plus an interface for adding additional
158 * doc/gob.1.in: add docs for the above
160 Fri Feb 25 01:37:20 2000 George Lebl <jirka@5z.com>
162 * src/main.c: fix trailing comma on the end of the argument enum
164 Sun Feb 13 23:54:53 2000 George Lebl <jirka@5z.com>
166 * doc/gob.1.in: add doc patch from Dave Dunkin <dunkind@letu.edu>
168 * doc/gob.1.in,examples/*.gob: use init(self) to be more consistent
171 Sat Feb 12 14:42:15 2000 George Lebl <jirka@5z.com>
173 * src/main.c,src/lexer.l: apply patches from Dave Dunkin
174 <dunkind@letu.edu> to add all and alltop ccode sections
175 and to add a --no-write,-n option to not actually write
176 any files. Also did some very cosmetic changes to code
178 Mon Feb 07 23:45:04 2000 George Lebl <jirka@5z.com>
180 * src/main.c: use the magic /*< private >*/ and /*< public >*/
181 comments to distinguish public and protected data members
183 Mon Feb 07 03:02:48 2000 George Lebl <jirka@5z.com>
187 Mon Feb 07 02:50:11 2000 George Lebl <jirka@5z.com>
189 * src/lexer.l: error on multiple classes
191 * src/main.c: nicer header output
193 * src/{lexer.l,main.c}: Eat out gtk-doc like inline doc entries
194 and stuff them into the output files where appropriate
196 * doc/gob.1.in: added docs for gtk-doc like inline doc stuff
198 * examples/{README, gtk-button-count.gob}: added inline docs
200 Fri Feb 04 01:07:54 2000 George Lebl <jirka@5z.com>
202 * src/main.c: use G_GNUC_UNUSED rather then our own macro for a
203 very slightly cleaner looking output file
205 2000-01-31 Eskil Heyn Olsen <deity@eskil.dk>
207 * gob.m4: checks for gob binary, GOB_CHECK([version [,
208 action_if_found[, action_if_not_found]]]).
210 * Makefile.am: Install gob in $prefix/share/aclocal
212 Thu Jan 27 17:50:11 2000 George Lebl <jirka@5z.com>
214 * src/main.c: add #include <stdlib.h>
216 Mon Jan 24 22:52:47 2000 George Lebl <jirka@5z.com>
220 Mon Jan 24 22:23:47 2000 George Lebl <jirka@5z.com>
222 * src/main.c: add a protecting define before the object typedef
224 * doc/gob.1.in: add docs for the new stuff
226 Sun Jan 23 16:19:54 2000 George Lebl <jirka@5z.com>
228 * src/{lexer.l,parse.y,tree.[ch],main.c}: make more types of header
229 %{ %} blocks, "headertop" and "privateheader" and made short as
230 well as long names possible.
232 * src/main.c: add an --no-extern-c option to not put entern "C" into
233 the output, which is now put in by default even if --for-cpp is
234 on so that it is possible to call those from C by default
236 Thu Jan 20 01:50:45 2000 George Lebl <jirka@5z.com>
238 * src/main.c: put the _real_ functions in our normal private
239 namespace of ___* to be more consistent.
241 Mon Jan 10 00:16:43 2000 George Lebl <jirka@5z.com>
243 * src/{main.[ch],util.[ch],checks.[ch]}: offload some functionality to
246 * src/main.c: cleanup the generation routine by spliting it up into
249 * src/{main.h,lexer.l,parse.y,out.c}: put some needed externs into the
250 main.h file and include that rather then doing it in the .c files
252 Thu Jan 06 18:33:44 2000 George Lebl <jirka@5z.com>
254 * src/main.c: use ___ for the signal marshalling typedefs as well
256 Thu Jan 06 17:32:46 2000 George Lebl <jirka@5z.com>
260 Thu Jan 06 17:13:22 2000 George Lebl <jirka@5z.com>
262 * src/main.c: be consistent with the use of "namespacing", we
263 prefix ALL internal gob stuff with "___". This should make it
264 easier to avoid name conflicts with user code and glibc/gcc (Which
265 seems to use __ prefix)
267 * src/main.c: check for init and class_init names for non-constructor
268 methods and give an error if found.
270 * src/main.c: check argument types and flags for correctness, error
271 on unknown type, but just a warning on unknown flag
273 * doc/gob.1.in: add a section for name conflicts
275 Wed Jan 05 02:23:21 2000 George Lebl <jirka@5z.com>
277 * src/main.c: doh! the symbols for the aliases need to be declared as
280 Wed Jan 05 02:13:59 2000 George Lebl <jirka@5z.com>
282 * src/main.c: just realized that args... for macros is a GNU
283 extention and so the PARENT_HANDLER no longer uses it, but prints
284 the argument names with __ prefixed into the argument list.
286 Wed Jan 05 01:58:32 2000 George Lebl <jirka@5z.com>
288 * src/main.c: if using gnu c, also define macros using varargs for
289 function aliases. This should allow the compiler to optimize
290 further and if we have arguments for the defines there are
291 no adverse side effects as there are for straight defines.
293 Wed Jan 05 01:48:12 2000 George Lebl <jirka@5z.com>
295 * src/main.c: fixup the aliases. They didn't actually work right.
296 now we set it up as a const pointer to a function using typeof.
298 Tue Jan 04 17:57:55 2000 George Lebl <jirka@5z.com>
300 * src/lexer.l: add support for 'requires x.y.z' line. This is
301 so that a .gob file can require at least version x.y.z of gob
303 * src/test.gob: update
305 * doc/gob.1.in: update for requires and run trhough ispell
307 Tue Jan 04 17:10:54 2000 George Lebl <jirka@5z.com>
309 * src/main.c: fix the non-gnu aliases
311 Tue Jan 04 16:46:16 2000 George Lebl <jirka@5z.com>
313 * src/{main.c,parser.y,tree.[ch]}: add optional C type specification
314 to arguments for full type safety
316 * doc/gob.1.in: updated
318 Tue Jan 04 15:34:16 2000 George Lebl <jirka@5z.com>
320 * src/main.c: --no-gnu option to completely disable any use
321 of GNU C extentions. This is for those weird people that don't
322 wish to use those extentions even with GNU C.
324 Tue Jan 04 14:43:49 2000 George Lebl <jirka@5z.com>
326 * src/main.c: use some GNU extentions (guarded with #ifdef __GNUC__)
327 to make arguments fully typesafe, and to make it easier for
328 GNU to optimize the aliases, as well as to avoid the ugly
331 * src/main.c: don't put #line 0 for the .gob file for method prototypes
333 * src/main.c: move the _priv structure freeing into finalize to enable
334 people to work with the private stuff inside the destroy handler
336 * src/main.c: use #line before every precondition check so that failed
337 checks should point to the function prototype rather then into
340 * src/main.c: remove the _END_ARG macro
342 * src/main.c: add GOB_VERSION_MAJOR, GOB_VERSION_MINOR and
343 GOB_VERSION_PATCHLEVEL defines into the generated C file
345 * src/out.c: don't redundantly put #line for outfile if we're already
348 * configure.in: raise version number
350 Tue Jan 04 02:22:33 2000 George Lebl <jirka@5z.com>
352 * src/main.c: add argument wrapper macros to make the argument system
353 a little more type safe.
355 Fri Dec 31 17:39:22 1999 George Lebl <jirka@5z.com>
359 Thu Dec 30 20:20:36 1999 George Lebl <jirka@5z.com>
361 * src/main.c: correctly handle the complex fundemental types,
362 so that we can handle ALL the fundemental types for signals
364 Thu Dec 30 19:29:56 1999 George Lebl <jirka@5z.com>
366 * src/main.c: don't use function types for casts in marshallers,
367 but default types we get from our GTK_TYPE_* -> C type translation,
368 and use this fact to check for same function types and combine
369 signal prototypes. This doesn't yet handle well complex types,
370 but I have an idea how to make complex types work. Though
371 I dunno if it's actually worth it.
373 Thu Dec 30 17:18:27 1999 George Lebl <jirka@5z.com>
375 * src/main.c: figure out some types from GTK types and cast properly
376 when emitting a signal. This catches some inconsistencies in
377 signal func argument lists and the GTK types of the arguments.
379 Wed Dec 29 18:04:13 1999 George Lebl <jirka@5z.com>
381 * src/parse.y: allow scope, public/private/protected, to come before
382 the signal or virtual keyword for consistency's sake.
384 Wed Dec 29 01:39:30 1999 George Lebl <jirka@5z.com>
386 * src/{tree.[ch],parser.y}: cleanup scope stuff
388 * src/{lexer.l,parser.y,tree.h,main.c}: add protected keyword and
389 methods. protected methods are put into the -private files and
390 are real exported functions just like public. protected data
391 members act like pre-0.91.x private datamembers, that is they
392 get stuck into the public header, but marked /* protected */.
394 * src/main.c: change the method body printing function so that we
395 can catch the no return warning properly and send us to the .gob
396 file instead of the .c file.
398 * src/{parse.y,main.c}: handle empty publics/privates/overrides
399 and handle the body being set to ';' rather then '{}'
401 * src/main.c: check for empty nonvoid regular methods, and error out
402 on finding them as that would produce warnings which we can't catch
403 and it is generally bad to do anyway
405 * src/{parse.y,tree.[ch],main.c}: use char pointers for C buffers,
406 and kill leading/trailing whitespace from them to make the C files
407 nicer and easier to recognize empty functions.
409 * src/main.c: add a --version switch
411 * doc/gob.1.in: Update with the above changes
413 * configure.in: raise version
415 Tue Dec 28 20:49:56 1999 George Lebl <jirka@5z.com>
417 * src/main.c: apply patch from ChiDeok Hwang <cdhwang@sr.hei.co.kr>
418 to make the hack function static so that we don't pollute namespace
420 Mon Dec 27 19:56:24 1999 George Lebl <jirka@5z.com>
424 Mon Dec 27 03:00:25 1999 George Lebl <jirka@5z.com>
426 * src/main.c: fixup PARENT_HANDLER to work well with non-void
427 functions, the macro becomes an expression if the function is
428 not void and returns the return of the parent or the onerror
429 expression if the function pointer was NULL.
431 Mon Dec 27 02:25:32 1999 George Lebl <jirka@5z.com>
433 * src/parse.y: allow completely empty classes
435 * src/main.c: don't add the ugly hack function if there are no
438 Mon Dec 27 01:26:26 1999 George Lebl <jirka@5z.com>
440 * src/parse.y: fixup the virtual rule as I forgot to shift the
441 argument numbers when adding to the expression
443 Mon Dec 27 01:07:14 1999 George Lebl <jirka@5z.com>
445 * src/parse.y: add optional public keyword to virtuals and signals,
446 (which doesn't do anything, only consistency). I should perhaps
447 rewrite and simplify this part of the parser
449 * src/lexer.l: fix a bug with empty braces producing a segfault
450 on public and private methods
452 * doc/gob.1.in: add a section about Constructor methods (init
453 class_init) and fix init_class -> class_init
455 * configure.in: raise version to 0.91.2
457 Tue Dec 14 00:06:00 1999 George Lebl <jirka@5z.com>
461 Mon Dec 13 23:25:06 1999 George Lebl <jirka@5z.com>
463 * src/{main.c,out.c}: create a private header file and stick
464 the private structure definition inside it. Add option
465 --no-private-header for 0.91.0 behaviour and
466 --always-private-header to force private header creation
468 * doc/gob.1.in: update WRT above changes
470 * examples/my-person.gob: include the private header
474 Mon Dec 13 18:30:09 1999 George Lebl <jirka@5z.com>
476 * src/main.c: don't print spurious #line's into the private
479 * src/{main.c,tree.[ch],lexer.l,parse.y}: implement support for
480 array types for data members and function arguments
482 Mon Dec 13 00:48:47 1999 George Lebl <jirka@5z.com>
486 Sun Dec 12 22:55:12 1999 George Lebl <jirka@5z.com>
488 * doc/gob.1.in: added paragraph noting that private data members
489 cannot be accessed above the class definition in the .gob file
491 Sun Dec 12 22:08:31 1999 George Lebl <jirka@5z.com>
493 * src/main.c: implement real private data members as promised in
494 the documentation, this however breaks some compatiblity with
495 things that already used the 'private' keyword for data members
497 * doc/gob.1.in: document private data member stuff
501 * src/main.c: a couple of sanity checks of the code to prevent weird
502 errors on some broken .gob code
504 * configure.in: update version to 0.91.0
506 Sun Dec 05 14:20:26 1999 George Lebl <jirka@5z.com>
508 * src/{lexer.l,main.c}: if we find the class header #include
509 statement in a %{ %} section above class definition, don't
510 include it ourselves.
512 * doc/gob.1.in: remove the note about the include always first from
513 BUGS, and make a new section for the include file.
515 Thu Nov 25 13:09:08 1999 George Lebl <jirka@5z.com>
519 Thu Nov 25 13:00:52 1999 George Lebl <jirka@5z.com>
521 * src/main.c: don't error out on a symbol conflict if the types of
522 the symbol node don't match (variable,method)
524 Sat Nov 20 16:15:42 1999 George Lebl <jirka@5z.com>
526 * src/main.c: add PARENT_HANDLER macro to make calling parent
527 handlers in override functions easier
529 Fri Nov 19 16:41:09 1999 George Lebl <jirka@5z.com>
531 * src/main.c: add a type macro
533 Thu Nov 18 22:56:09 1999 George Lebl <jirka@5z.com>
535 * src/parse.y: add a warning check if the number of GTK types of
536 a signal doesn't seem to be correct for the given number of
539 Tue Nov 16 01:23:45 1999 George Lebl <jirka@5z.com>
541 * src/main.c: support a "no-touch-headers" mode in which the
542 headers are not touched unless they actually really changed,
543 not on by default as it confuses automake
545 Tue Nov 16 00:36:42 1999 George Lebl <jirka@5z.com>
547 * src/{main.c,lexer.l,parser.y,out.c}: Implement a C++ mode, get
548 rid of C++ errors/warnings when in C++ mode, and get rid of
549 the 'this' pointer finally (it's been deprecated long enough)
551 Mon Nov 15 23:45:37 1999 George Lebl <jirka@5z.com>
553 * src/main.c: add prototype for the really bad hack function to
556 Mon Nov 15 23:42:06 1999 George Lebl <jirka@5z.com>
558 * src/main.c: generate correct function pointers in the structure
559 for signals and virtuals. Also use a much nicer system instead
560 of the method name defines, we now just set a bunch of static
561 pointers, this removes a whole lot of headaches actually
563 * doc/gob.1.in: repair to reflect the above (I removed the define
566 Sun Nov 14 17:57:34 1999 George Lebl <jirka@5z.com>
568 * doc/gob.1.in: repair some things that confused troff and add
569 a C preprocessor warning to BUGS
571 Sat Nov 13 17:22:49 1999 George Lebl <jirka@5z.com>
573 * **/Makefile.am, configure.in: fix the conditional installation
574 stuff, don't even go into the doc directory if we aren't installing
576 Sat Nov 13 16:53:20 1999 George Lebl <jirka@5z.com>
578 * doc/gob.1.in: describe BUGS better
580 Sat Nov 13 16:20:41 1999 George Lebl <jirka@5z.com>
582 * src/lexer.l: don't kill C++ style comments from C blocks
584 Sat Nov 13 16:16:59 1999 George Lebl <jirka@5z.com>
586 * src/{lexer.l,main.c,out.c}: fixed spurious newline printing, don't
587 kill comments from C blocks so that line counts are right, accept
588 newlines in strings, and don't take \'\"\' as a string delimiter
590 Sat Nov 13 14:53:26 1999 George Lebl <jirka@5z.com>
592 * src/main.c: don't add gtk_object_class to class_init if we only
593 have non-GtkObject overrides to avoid warning
595 Sat Nov 13 14:31:25 1999 George Lebl <jirka@5z.com>
597 * configure.in,src/Makefile.am,doc/Makefile.am: check for
598 ../NOINST_GOB and in case it's found don't install self
600 Fri Nov 12 16:25:35 1999 George Lebl <jirka@5z.com>
602 * configure.in,Makefile.am,src/main.c: don't use popt, our arguments
603 are simple enough and popt doesn't seem to be widely used yet
605 Sun Sep 05 22:08:40 1999 George Lebl <jirka@5z.com>
609 Sun Sep 05 22:08:33 1999 George Lebl <jirka@5z.com>
611 * doc/gob.1.in: updated for private virtual and signal wrappers
613 Sun Sep 05 21:50:19 1999 George Lebl <jirka@5z.com>
615 * configure.in: raise version and actually set POPT_LIB correctly
617 * src/Makefile.am: use POPT_LIB
619 Sun Sep 05 21:45:54 1999 George Lebl <jirka@5z.com>
621 * src/tree.h,src/main.c,src/parse.y: add support for private signals
624 * src/parse.y: fix bug with bogus vararg methods
626 Sun Sep 04 17:44:37 1999 George Lebl <jirka@5z.com>
630 Sat Sep 04 17:18:22 1999 George Lebl <jirka@5z.com>
632 * src/lexer.l,src/parse.y,src/main.c,src/tree.[ch]: support
633 variable arguments for public and private methods
635 Sat Sep 04 16:51:11 1999 George Lebl <jirka@5z.com>
637 * lexer.l,parse.y: accept const in parameter lists
639 Sun Aug 29 13:46:33 1999 George Lebl <jirka@5z.com>
643 Sat Aug 28 23:36:48 1999 George Lebl <jirka@5z.com>
645 * src/main.[ch],parse.y: make error/warning reporting public
646 and use it to report depreciated use of 'this'
648 Sat Aug 28 22:41:52 1999 George Lebl <jirka@5z.com>
650 * src/tree.[ch],parse.y,main.c: check for duplicate variables and
651 signals and arguments as well.
653 Sat Aug 28 22:00:19 1999 George Lebl <jirka@5z.com>
655 * src/parse.y,src/main.c: change "this" to "self", but accept "this"
658 * src/main.c: check for duplicate methods, and warn on non-public
661 * configure.in: change to version 0.90.0
663 * doc/gob.1.in: change this to self
665 Tue Aug 24 20:37:26 1999 George Lebl <jirka@5z.com>
669 Thu Aug 19 03:18:03 1999 George Lebl <jirka@5z.com>
671 * src/main.c: also count overrides to avoid an unused variable on
674 Thu Aug 19 03:08:49 1999 George Lebl <jirka@5z.com>
676 * src/parse.y: in a check, we can check not only about numbers
677 but for tokens as well
679 Wed Aug 18 12:54:17 1999 George Lebl <jirka@5z.com>
683 Tue Aug 17 22:24:47 1999 George Lebl <jirka@5z.com>
685 * src/lexer.l,src/parse.y: don't use reserved words for check type
688 * src/{lexer.l,parse.y,tree.[ch],main.c}: add #line's to output
691 * src/out.[ch]: new functions for output so that we can easily add
694 * src/main.c: fix get/set arguments
696 * doc/gob.1.in: updated for newer version and spellchecked, also
697 gob.1 is generated by configure now to get versions correct
699 * gob.spec.in: added a spec file
701 Fri Jul 30 02:19:05 1999 George Lebl <jirka@5z.com>
703 * src/parse.y: accept simple char types
705 * src/main.c: make prototypes look better, and don't output arg stuff
706 when it won't be used
708 * Makefile,src/Makefile: add test make target