29.05.2017, 05:42, "Luís Oliveira" luismbo@gmail.com:
foreign-symbol-pointer should work on Corman, yes.
If so, maybe this is the best solution?
(if (cffi:foreign-symbol-pointer "OpenSSL_version_num") (cffi:defcfun ("OpenSSL_version_num" ssleay) :long) (cffi:defcfun ("SSLeay" ssleay) :long))
Hopefully defcfun-ing an unexisting function won't yield an error.
Some alternative ideas, if that doesn't work:
- Handle/ignore the defcfun error.
At what time? (compile, load time, invocation time?) I was thinking about handling defcfun error but can't understand how to do that correctly?
- Implement foreign-funcall on Corman Lisp (src/cffi-corman.lisp has some suggestions on how to do that)
- Ask the Corman Lisp developers to implement foreign-funcall(-pointer).
- Ignore the problem until #2 or #3 are implemented. (Possibly not a big issue since Corman Lisp is not as widely used as other Lisps.)
Cheers, Luís
On Mon, May 29, 2017, 03:25 Anton Vodonosov avodonosov@yandex.ru wrote:
Luis, thanks for the response
29.05.2017, 05:18, "Luís Oliveira" luismbo@gmail.com:
You can look up both functions using foreign-symbol-pointer to decide which one to call. You'd usually call the right one using foreign-funcall-pointer, but perhaps you can defcfun both and call the right one based on the lookup.
Will that work on Corman?
defcfun-ing non-existent functions will yield runtime warnings on some implementations (notably SBCL) so perhaps you might want to implement both the foreign-funcall-pointer and defcfun approaches and conditionalise them accordingly.
BTW, CMUCL fails with error in this case.
HTH, Luís
On Mon, May 29, 2017, 02:56 Anton Vodonosov avodonosov@yandex.ru wrote:
Hello,
OpenSSL renamed function SSLeay to OpenSSL_version_num. So, so depending on what version of library we work with we need to call either SSLeay or OpenSSL_version_num.
What is the best way to do it?
The following is one approach:
(or (ignore-errors (cffi:foreign-funcall "OpenSSL_version_num" :long)) (ignore-errors (cffi:foreign-funcall "SSLeay" :long)))
but it won't work on Corman Lisp because it doesn't support cffi:foreign-funcall.
I would like to be fully portable. Is there a better way?
Best regards,
- Anton