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.tur...@dronecode.org.uk> Reviewed-by: Julien Cristau <jcris...@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@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel > _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel