On 11 September 2017 at 18:16, Kamil Rytarowski <n...@gmx.com> wrote: > openpty(3) might: > - exists in libc (OSX) > - exists in libutil (GNU, BSD) > - does not exist (SmartOS) > > Add a function to discover this function in the ./configure script. > Add new config types: CONFIG_OPENPTY_LIBC and CONFIG_OPENPTY_LIBUTIL, > respectively defined when openpts(3) links with -lc or -lutil. > > Replace the condition adding -lutil in tests (for openpty(3)) from > CONFIG_POSIX to CONFIG_OPENPTY_LIBUTIL. > > Replace the fallback openpty(3) impelementation comment from Solaris > to SmartOS. Solaris is EOL'ed and it's confirmed that it does not work > on Oracle Solaris. > --- > configure | 25 +++++++++++++++++++++++++ > tests/Makefile.include | 2 +- > util/qemu-openpty.c | 4 ++-- > 3 files changed, 28 insertions(+), 3 deletions(-) > > diff --git a/configure b/configure > index fd7e3a5e81..a614adcd29 100755 > --- a/configure > +++ b/configure > @@ -3819,6 +3819,25 @@ EOF > fi > fi > > +########################################## > +# openpty probe > +openpty_libc=no > +openpty_libutil=no > +cat > $TMPC << EOF > +extern int openpty(int *amaster, int *aslave, char *name, void *termp, void > *winp);
I think the need to provide a prototype here rather than using the system header to define it is revealing that we also need a configure test for * openpty() in <pty.h> * openpty() in <libutil.h> * openpty() in <util.h> Something like this untested code ought to do: cat > $TMPC << EOF #if defined(CONFIG_OPENPTY_IN_PTY_H) #include <pty.h> #elif defined(CONFIG_OPENPTY_IN_LIBUTIL_H) #include <libutil.h> #elif defined(CONFIG_OPENPTY_IN_UTIL_H) #include <util.h> #endif int main(void) { return openpty(0, 0, 0, 0, 0); } EOF # Different platforms put openpty() in different headers, # and may or may not need us to link against -lutil if compile_prog -DCONFIG_OPENPTY_IN_PTY_H ""; then openpty_in_pty_h=yes elif compile_prog -D_CONFIG_OPENPTY_IN_PTY_H -lutil; then openpty_in_pty_h=yes openpty_libutil=yes elif compile_object -DCONFIG_OPENPTY_IN_LIBUTIL_H; then openpty_in_libutil_h=yes elif compile_prog -D_CONFIG_OPENPTY_IN_LIBUTIL_H -lutil; then openpty_in_libutil_h=yes openpty_libutil=yes elif compile_object -DCONFIG_OPENPTY_IN_UTIL_H; then openpty_in_util_h=yes elif compile_prog -D_CONFIG_OPENPTY_IN_UTIL_H -lutil; then openpty_in_util_h=yes openpty_libutil=yes fi Then in qemu-openpty.c we can do #include <termios.h> #if defined(CONFIG_OPENPTY_IN_PTY_H) #include <pty.h> #elif defined(CONFIG_OPENPTY_IN_LIBUTIL_H) #include <libutil.h> #elif defined(CONFIG_OPENPTY_IN_UTIL_H) #include <util.h> #else /* sunos fallback code */ #endif > +if test "$openpty_libc" = "yes" ; then > + echo "CONFIG_OPENPTY_LIBC=y" >> $config_host_mak > +fi If we use the CONFIG_OPENPTY_IN_*_H constants as above we don't need CONFIG_OPENPTY_LIBC any more. thanks -- PMM