[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