[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-trivial] [PATCH v2] Discover openpty(3) dynamically in configu
From: |
Peter Maydell |
Subject: |
Re: [Qemu-trivial] [PATCH v2] Discover openpty(3) dynamically in configure |
Date: |
Thu, 14 Sep 2017 14:52:23 +0100 |
On 11 September 2017 at 18:16, Kamil Rytarowski <address@hidden> 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