[PATCH] Allow DDX to provide a main()
Jon TURNEY
jon.turney at dronecode.org.uk
Mon Dec 3 09:54:58 PST 2012
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...
Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
Reviewed-by: Julien Cristau <jcristau at debian.org>
---
configure.ac | 2 +-
dix/Makefile.am | 3 ++-
dix/main.c | 6 +-----
dix/stubmain.c | 35 +++++++++++++++++++++++++++++++++++
hw/xwin/InitOutput.c | 6 ++++++
hw/xwin/Makefile.am | 2 +-
6 files changed, 46 insertions(+), 8 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..7efb4b8
--- /dev/null
+++ b/dix/stubmain.c
@@ -0,0 +1,35 @@
+/***********************************************************
+
+Copyright 2012 Jon TURNEY
+
+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.
+
+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 78ff74f..a8f349e 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);
+}
+
/* See Porting Layer Definition - p. 57 */
void
ddxGiveUp(enum ExitCode error)
diff --git a/hw/xwin/Makefile.am b/hw/xwin/Makefile.am
index 93ce570..e390aa7 100644
--- a/hw/xwin/Makefile.am
+++ b/hw/xwin/Makefile.am
@@ -153,7 +153,7 @@ INCLUDES = -I$(top_srcdir)/miext/rootless
XWIN_SYS_LIBS += -ldxguid
-XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS)
+XWin_DEPENDENCIES = $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_LIBS) $(XSERVER_LIBS)
XWin_LDADD = $(MULTIWINDOW_LIBS) $(MULTIWINDOWEXTWM_LIBS) $(XWIN_GLX_LIBS) $(XWIN_GLX_LINK_FLAGS) $(XWIN_LIBS) $(MAIN_LIB) $(XSERVER_LIBS) $(XSERVER_SYS_LIBS) $(XWIN_SYS_LIBS)
XWin_LDFLAGS = -mwindows -static
--
1.7.9
More information about the xorg-devel
mailing list