[PATCH 2/7] Allow DDX to provide a main()

Julien Cristau jcristau at debian.org
Fri Nov 30 15:50:05 PST 2012


On Thu, Nov  8, 2012 at 13:41:14 +0000, Jon TURNEY wrote:

> XQuartz already conditionally renames main() as dix_main() so it can provide
> it's own main().  This isn't ideal as it prevents libdix built this way from
> being useful with any other DDX.
> 
> So instead, always name that function dix_main(), and provide a stub main()
> which just calls it where needed.
> 
> Add a main() to XWin.
> It's no longer neccessary to link XWin and XQuartz with libmain.
> 
> Future work: prototype dix_main() somewhere, without it ending up in sdksyms...
> 
Doesn't that mean adding the declaration in a file not listed by
sdksyms.sh?

> Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>

Reviewed-by: Julien Cristau <jcristau at debian.org>

with a minor comment and small question below...

> ---
>  configure.ac         |    2 +-
>  dix/Makefile.am      |    3 ++-
>  dix/main.c           |    6 +-----
>  dix/stubmain.c       |   33 +++++++++++++++++++++++++++++++++
>  hw/xwin/InitOutput.c |    6 ++++++
>  hw/xwin/Makefile.am  |    4 ++--
>  6 files changed, 45 insertions(+), 9 deletions(-)
>  create mode 100644 dix/stubmain.c
> 
> diff --git a/configure.ac b/configure.ac
> index 38ac240..e6f9cb7 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1960,7 +1960,7 @@ if test "x$XQUARTZ" = xyes; then
>  	AC_DEFINE(XQUARTZ,1,[Have Quartz])
>  	AC_DEFINE(ROOTLESS,1,[Build Rootless code])
>  
> -	XQUARTZ_LIBS="$MAIN_LIB $FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB"
> +	XQUARTZ_LIBS="$FB_LIB $FIXES_LIB $XEXT_LIB $DBE_LIB $RECORD_LIB $RANDR_LIB $RENDER_LIB $DAMAGE_LIB $MIEXT_SYNC_LIB $MIEXT_DAMAGE_LIB $MIEXT_SHADOW_LIB $XI_LIB $XKB_LIB $XKB_STUB_LIB $XPSTUBS_LIB"
>  	AC_SUBST([XQUARTZ_LIBS])
>  
>  	AC_CHECK_LIB([Xplugin],[xp_init],[:])
> diff --git a/dix/Makefile.am b/dix/Makefile.am
> index b7358aa..e7ca236 100644
> --- a/dix/Makefile.am
> +++ b/dix/Makefile.am
> @@ -4,7 +4,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/include
>  AM_CFLAGS = $(DIX_CFLAGS)
>  
>  libmain_la_SOURCES =    \
> -	main.c
> +	stubmain.c
>  
>  libdix_la_SOURCES = 	\
>  	atom.c		\
> @@ -14,6 +14,7 @@ libdix_la_SOURCES = 	\
>  	dispatch.c	\
>  	dispatch.h	\
>  	dixfonts.c	\
> +	main.c		\
>  	dixutils.c	\
>  	enterleave.c	\
>  	enterleave.h	\
> diff --git a/dix/main.c b/dix/main.c
> index fb935c9..82b5ee7 100644
> --- a/dix/main.c
> +++ b/dix/main.c
> @@ -125,14 +125,10 @@ BOOL serverRunning = FALSE;
>  pthread_mutex_t serverRunningMutex = PTHREAD_MUTEX_INITIALIZER;
>  pthread_cond_t serverRunningCond = PTHREAD_COND_INITIALIZER;
>  
> -int dix_main(int argc, char *argv[], char *envp[]);
> +#endif
>  
>  int
>  dix_main(int argc, char *argv[], char *envp[])
> -#else
> -int
> -main(int argc, char *argv[], char *envp[])
> -#endif
>  {
>      int i;
>      HWEventQueueType alwaysCheckForInput[2];
> diff --git a/dix/stubmain.c b/dix/stubmain.c
> new file mode 100644
> index 0000000..25ef50d
> --- /dev/null
> +++ b/dix/stubmain.c
> @@ -0,0 +1,33 @@
> +/***********************************************************
> +
> +Permission is hereby granted, free of charge, to any person obtaining a
> +copy of this software and associated documentation files (the "Software"),
> +to deal in the Software without restriction, including without limitation
> +the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +and/or sell copies of the Software, and to permit persons to whom the
> +Software is furnished to do so, subject to the following conditions:
> +
> +The above copyright notice and this permission notice (including the next
> +paragraph) shall be included in all copies or substantial portions of the
> +Software.
> +

There's no above copyright notice.  Problably doesn't matter because
this file is so trivial it's not copyrightable, but might as well...

> +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> +THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> +DEALINGS IN THE SOFTWARE.
> +
> +******************************************************************/
> +
> +int dix_main(int argc, char *argv[], char *envp[]);
> +
> +/*
> +  A default implementation of main, which can be overridden by the DDX
> + */
> +int
> +main(int argc, char *argv[], char *envp[])
> +{
> +    return dix_main(argc, argv, envp);
> +}
> diff --git a/hw/xwin/InitOutput.c b/hw/xwin/InitOutput.c
> index 4bcd3a0..fe8dcd4 100644
> --- a/hw/xwin/InitOutput.c
> +++ b/hw/xwin/InitOutput.c
> @@ -186,6 +186,12 @@ ddxBeforeReset(void)
>  }
>  #endif
>  
> +int
> +main(int argc, char *argv[], char *envp[])
> +{
> +    return dix_main(argc, argv, envp);
> +}
> +

I guess a later patch changes this to be different from the stub?

Cheers,
Julien

>  /* See Porting Layer Definition - p. 57 */
>  void
>  ddxGiveUp(enum ExitCode error)
> diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
> index 3fcaf9d..6aac6a9 100644
> --- a/hw/xwin/Makefile.am
> +++ b/hw/xwin/Makefile.am
> @@ -149,8 +149,8 @@ INCLUDES = -I$(top_srcdir)/miext/rootless
>  
>  XWIN_SYS_LIBS += -ldxguid
>  
> -XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS)
> -XWin_LDADD = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_GLX_LINK_FLAGS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS)
> +XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(XSERVER_LIBS)
> +XWin_LDADD = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_GLX_LINK_FLAGS) $(XWIN_LIBS) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS)
>  XWin_LDFLAGS = -mwindows -static
>  
>  .rc.o:
> -- 
> 1.7.9
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list