Der schon etwas in die Jahre gekommene, aber für Webanwendungen
immer noch hervorragende persistente Perl-Interpreter
speedy
kompiliert unter neueren Perl-Versionen nicht mehr.
Der Versuch endet mit dem Fehler:
speedy_perl.c: In function ?find_scr?:
speedy_perl.c:258:24: error: expected expression before ?SpeedyScript?
speedy_new(retval, 1, SpeedyScript);
^
../src/speedy_backend_main.h:41:39: note: in definition of macro ?speedy_new?
#define speedy_new(s,n,t) New(123,s,n,t)
Ursache ist, dass das C-Makro New() aus dem Perl-CORE (CORE/handy.h),
nicht mehr existiert. Dies ist offenbar seit Perl 5.10 der Fall.
Die Lösung ist, anstelle des Makros New() das Makro Newx() zu
benutzen. Hierzu muss in src/speedy_backend_main.h
#define speedy_new(s,n,t) New(123,s,n,t)
durch
#define speedy_new(s,n,t) Newx(s,n,t)
ersetzt werden.
Dann kompilieren die Quellen fehlerfrei. Getestet unter Perl 5.20.2.
Ein weiteres Problem tritt bei Perl 5.22.1 (mit gcc 5.3.1) auf:
In file included from ../src/speedy_inc.h:90:0,
from speedy.h:2,
from speedy_backend_main.c:24:
../src/speedy_file.h:54:19: warning: inline function
?speedy_file_set_state? declared but never defined
SPEEDY_INLINE int speedy_file_set_state(int new_state);
^
Dies lässt sich dadurch beheben, dass in src/speedy_inc.h
die Macro-Definition SPEEDY_INLINE geändert wird zu
#ifdef __GNUC__
#define SPEEDY_INLINE /* __inline__ */
#else
#define SPEEDY_INLINE
#endif
Zum Testen (Perl 5.28.1) muss entgegen dem üblichen make test im
Wurzelverzeichnis erst in das Unterverzeichnis speedy gewechselt
werden: