[Qemu-devel] Re: [PATCH] Make VNC support optional
On 03/11/2011 06:38 AM, jes.soren...@redhat.com wrote: From: Jes Sorensenjes.soren...@redhat.com Per default VNC is enabled. Signed-off-by: Jes Sorensenjes.soren...@redhat.com --- Makefile.objs | 19 ++- configure | 37 + monitor.c | 16 vl.c | 10 +- 4 files changed, 60 insertions(+), 22 deletions(-) diff --git a/Makefile.objs b/Makefile.objs index 9e98a66..58388e2 100644 --- a/Makefile.objs +++ b/Makefile.objs @@ -127,19 +127,20 @@ common-obj-y += $(addprefix audio/, $(audio-obj-y)) ui-obj-y += keymaps.o ui-obj-$(CONFIG_SDL) += sdl.o sdl_zoom.o x_keymap.o ui-obj-$(CONFIG_CURSES) += curses.o -ui-obj-y += vnc.o d3des.o -ui-obj-y += vnc-enc-zlib.o vnc-enc-hextile.o -ui-obj-y += vnc-enc-tight.o vnc-palette.o -ui-obj-y += vnc-enc-zrle.o -ui-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o -ui-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o -ui-obj-$(CONFIG_COCOA) += cocoa.o +vnc-obj-y += vnc.o d3des.o +vnc-obj-y += vnc-enc-zlib.o vnc-enc-hextile.o +vnc-obj-y += vnc-enc-tight.o vnc-palette.o +vnc-obj-y += vnc-enc-zrle.o +vnc-obj-$(CONFIG_VNC_TLS) += vnc-tls.o vnc-auth-vencrypt.o +vnc-obj-$(CONFIG_VNC_SASL) += vnc-auth-sasl.o +vnc-obj-$(CONFIG_COCOA) += cocoa.o ifdef CONFIG_VNC_THREAD -ui-obj-y += vnc-jobs-async.o +vnc-obj-y += vnc-jobs-async.o else -ui-obj-y += vnc-jobs-sync.o +vnc-obj-y += vnc-jobs-sync.o endif common-obj-y += $(addprefix ui/, $(ui-obj-y)) +common-obj-$(CONFIG_VNC) += $(addprefix ui/, $(vnc-obj-y)) common-obj-y += iov.o acl.o common-obj-$(CONFIG_THREAD) += qemu-thread.o diff --git a/configure b/configure index 39cdf2b..a64b750 100755 --- a/configure +++ b/configure @@ -117,6 +117,7 @@ kvm= kvm_para= nptl= sdl= +vnc=yes sparse=no uuid= vde= @@ -539,6 +540,10 @@ for opt do ;; --enable-sdl) sdl=yes ;; + --disable-vnc) vnc=no + ;; + --enable-vnc) vnc=yes + ;; --fmod-lib=*) fmod_lib=$optarg ;; --fmod-inc=*) fmod_inc=$optarg @@ -836,6 +841,8 @@ echo --disable-strip disable stripping binaries echo --disable-werror disable compilation abort on warning echo --disable-sdldisable SDL echo --enable-sdl enable SDL +echo --disable-vncdisable VNC +echo --enable-vnc enable VNC echo --enable-cocoa enable COCOA (Mac OS X only) echo --audio-drv-list=LISTset audio drivers list: echoAvailable drivers: $audio_possible_drivers @@ -1273,7 +1280,7 @@ fi ## # VNC TLS detection -if test $vnc_tls != no ; then +if test $vnc = yes -a $vnc_tls != no ; then cat $TMPCEOF #includegnutls/gnutls.h int main(void) { gnutls_session_t s; gnutls_init(s, GNUTLS_SERVER); return 0; } @@ -1293,7 +1300,7 @@ fi ## # VNC SASL detection -if test $vnc_sasl != no ; then +if test $vnc = yes -a $vnc_sasl != no ; then cat $TMPCEOF #includesasl/sasl.h #includestdio.h @@ -1315,7 +1322,7 @@ fi ## # VNC JPEG detection -if test $vnc_jpeg != no ; then +if test $vnc = yes -a $vnc_jpeg != no ; then cat $TMPCEOF #includestdio.h #includejpeglib.h @@ -1336,7 +1343,7 @@ fi ## # VNC PNG detection -if test $vnc_png != no ; then +if test $vnc = yes -a $vnc_png != no ; then cat $TMPCEOF //#includestdio.h #includepng.h @@ -2495,11 +2502,14 @@ echo Audio drivers $audio_drv_list echo Extra audio cards $audio_card_list echo Block whitelist $block_drv_whitelist echo Mixer emulation $mixemu -echo VNC TLS support $vnc_tls -echo VNC SASL support $vnc_sasl -echo VNC JPEG support $vnc_jpeg -echo VNC PNG support $vnc_png -echo VNC thread$vnc_thread +echo VNC support $vnc +if test $vnc = yes ; then +echo VNC TLS support $vnc_tls +echo VNC SASL support $vnc_sasl +echo VNC JPEG support $vnc_jpeg +echo VNC PNG support $vnc_png +echo VNC thread$vnc_thread +fi if test -n $sparc_cpu; then echo Target Sparc Arch $sparc_cpu fi @@ -2649,6 +2659,9 @@ echo CONFIG_BDRV_WHITELIST=$block_drv_whitelist $config_host_mak if test $mixemu = yes ; then echo CONFIG_MIXEMU=y $config_host_mak fi +if test $vnc = yes ; then + echo CONFIG_VNC=y $config_host_mak +fi if test $vnc_tls = yes ; then echo CONFIG_VNC_TLS=y $config_host_mak echo VNC_TLS_CFLAGS=$vnc_tls_cflags $config_host_mak @@ -2657,15 +2670,15 @@ if test $vnc_sasl = yes ; then echo CONFIG_VNC_SASL=y $config_host_mak echo VNC_SASL_CFLAGS=$vnc_sasl_cflags $config_host_mak fi -if test $vnc_jpeg != no ; then +if test $vnc_jpeg = yes ; then echo CONFIG_VNC_JPEG=y $config_host_mak echo VNC_JPEG_CFLAGS=$vnc_jpeg_cflags $config_host_mak fi -if test $vnc_png != no ; then +if test $vnc_png = yes ; then echo
[Qemu-devel] Re: [PATCH] Make VNC support optional
On 03/11/11 14:36, Anthony Liguori wrote: diff --git a/monitor.c b/monitor.c index 22ae3bb..4425315 100644 --- a/monitor.c +++ b/monitor.c @@ -441,6 +441,7 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) case QEVENT_RESUME: event_name = RESUME; break; +#ifdef CONFIG_VNC case QEVENT_VNC_CONNECTED: event_name = VNC_CONNECTED; break; @@ -450,6 +451,7 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) case QEVENT_VNC_DISCONNECTED: event_name = VNC_DISCONNECTED; break; +#endif No need to if this out. I realized that, but I figured it would reduce the code a bit more. I'll leave it in. @@ -1073,11 +1077,15 @@ static int do_change(Monitor *mon, const QDict *qdict, QObject **ret_data) const char *arg = qdict_get_try_str(qdict, arg); int ret; +#ifdef CONFIG_VNC if (strcmp(device, vnc) == 0) { ret = do_change_vnc(mon, target, arg); } else { +#endif ret = do_change_block(mon, device, target, arg); +#ifdef CONFIG_VNC } +#endif return ret; } Or this stuff. Provide a stub function for changing the VNC password and have it return a failure. Then this function can check that failure and throw a proper QError indicating that VNC is not present. Ok, I can do that. @@ -3002,6 +3014,7 @@ static const mon_cmd_t info_cmds[] = { .user_print = do_info_mice_print, .mhandler.info_new = do_info_mice, }, +#ifdef CONFIG_VNC { .name = vnc, .args_type = , @@ -3010,6 +3023,7 @@ static const mon_cmd_t info_cmds[] = { .user_print = do_info_vnc_print, .mhandler.info_new = do_info_vnc, }, +#endif We don't want to hide commands based on compile settings. Otherwise, looks good. I am not sure I follow you here, you prefer to have the commands visible even though they are disabled? There are other commands which get disabled like this as well. Cheers, Jes
Re: [Qemu-devel] Re: [PATCH] Make VNC support optional
On 03/11/2011 07:43 AM, Jes Sorensen wrote: On 03/11/11 14:36, Anthony Liguori wrote: diff --git a/monitor.c b/monitor.c index 22ae3bb..4425315 100644 --- a/monitor.c +++ b/monitor.c @@ -441,6 +441,7 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) case QEVENT_RESUME: event_name = RESUME; break; +#ifdef CONFIG_VNC case QEVENT_VNC_CONNECTED: event_name = VNC_CONNECTED; break; @@ -450,6 +451,7 @@ void monitor_protocol_event(MonitorEvent event, QObject *data) case QEVENT_VNC_DISCONNECTED: event_name = VNC_DISCONNECTED; break; +#endif No need to if this out. I realized that, but I figured it would reduce the code a bit more. I'll leave it in. fwiw, it's all gone in my tree so you don't need to worry about it sticking around :-) @@ -3002,6 +3014,7 @@ static const mon_cmd_t info_cmds[] = { .user_print = do_info_mice_print, .mhandler.info_new = do_info_mice, }, +#ifdef CONFIG_VNC { .name = vnc, .args_type = , @@ -3010,6 +3023,7 @@ static const mon_cmd_t info_cmds[] = { .user_print = do_info_vnc_print, .mhandler.info_new = do_info_vnc, }, +#endif We don't want to hide commands based on compile settings. Otherwise, looks good. I am not sure I follow you here, you prefer to have the commands visible even though they are disabled? There are other commands which get disabled like this as well. Yeah and that's wrong and I've fixed that in my QAPI branch. If a command is #if 0'd out, then it doesn't show up in query-commands and if you try to use it, it returns a CommandNotFound which is the same error as any garbage command would produce. But query-commands is not just useful for feature checking, but also for getting the schema to generate bindings. We have this problem with command line options today, there's no good way to ask QEMU for every possible command line option if you're trying to build tooling around it because it depends on how QEMU is configured. Having the command and returning FeatureDisabled means that QEMU still can advertise the command's schema and a user can differentiate between a feature that's explicitly disabled, for instance, in RHEL for support concerns, and a command that this QEMU just knows nothing about. This is nice for a GUI because you can expose a different error message to the user. For CommandNotFound, you might say, This version of QEMU is too old for this feature whereas for FeatureDisabled, you would say, This version of QEMU disables this feature, contact your vendor. Regards, Anthony Liguori Cheers, Jes