[Spice-devel] [spice-common RFC] Introduce SPICE_COMMON_SETUP m4 macro

Christophe Fergeau cfergeau at redhat.com
Fri Nov 8 08:36:54 PST 2013


This macro gathers the various checks/substitutions that spice-common's
configure.ac needs to do. It's meant to be called by users of the
spice-common submodule instead of calling AC_CONFIG_SUBDIRS() which is
much slower and less flexible.
This also removes spice-protocol as a submodule, it's a standalone module
with its own releases, so we can depend on it instead.
---
 Makefile.am        |   1 -
 autogen.sh         |  19 -------
 common/Makefile.am |  82 ++++++++++++++---------------
 configure.ac       | 152 -----------------------------------------------------
 m4/spice-common.m4 |  98 ++++++++++++++++++++++++++++++++++
 spice-protocol     |   1 -
 6 files changed, 138 insertions(+), 215 deletions(-)
 delete mode 100755 autogen.sh
 delete mode 100644 configure.ac
 create mode 100644 m4/spice-common.m4
 delete mode 160000 spice-protocol

diff --git a/Makefile.am b/Makefile.am
index 380bf24..e39273d 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -2,7 +2,6 @@ NULL =
 ACLOCAL_AMFLAGS = -I m4
 
 SUBDIRS = python_modules common
-DIST_SUBDIRS = spice-protocol $(SUBDIRS)
 
 EXTRA_DIST =				\
 	spice_codegen.py		\
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100755
index e4ada55..0000000
--- a/autogen.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-
-set -e # exit on errors
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-olddir=`pwd`
-cd "$srcdir"
-
-git submodule update --init
-
-mkdir -p m4
-autoreconf --verbose --force --install
-
-cd "$olddir"
-if [ -z "$NOCONFIGURE" ]; then
-    "$srcdir"/configure --enable-maintainer-mode ${1+"$@"}
-fi
diff --git a/common/Makefile.am b/common/Makefile.am
index 73703fc..aa71aa6 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -2,19 +2,19 @@ NULL =
 
 # Avoid need for python(pyparsing) by end users
 CLIENT_MARSHALLERS =					\
-	$(srcdir)/generated_client_demarshallers.c	\
-	$(srcdir)/generated_client_demarshallers1.c	\
-	$(srcdir)/generated_client_marshallers.c	\
-	$(srcdir)/generated_client_marshallers1.c	\
+	generated_client_demarshallers.c	\
+	generated_client_demarshallers1.c	\
+	generated_client_marshallers.c	\
+	generated_client_marshallers1.c	\
 	$(NULL)
 
 SERVER_MARSHALLERS =					\
-	$(srcdir)/generated_server_demarshallers.c	\
-	$(srcdir)/generated_server_marshallers.c	\
-	$(srcdir)/generated_server_marshallers.h	\
+	generated_server_demarshallers.c	\
+	generated_server_marshallers.c	\
+	generated_server_marshallers.h	\
 	$(NULL)
 
-BUILT_SOURCES = $(CLIENT_MARSHALLERS) $(SERVER_MARSHALLERS) $(top_srcdir)/spice-protocol/spice/enums.h
+BUILT_SOURCES = $(CLIENT_MARSHALLERS) $(SERVER_MARSHALLERS)
 
 noinst_LTLIBRARIES = libspice-common.la libspice-common-server.la libspice-common-client.la
 libspice_common_la_SOURCES =		\
@@ -80,61 +80,61 @@ libspice_common_la_SOURCES +=		\
 	$(NULL)
 endif
 
+#FIXME: need to make it possible for the toplevel module (spice) to be able
+#to add its own CFLAGS while letting the spice-common module silently adds
+#the flags it needs
+#AM_CPPFLAGS = $(AM_CPPFLAGS) $(xxxxx) ?
+#FIXME: need to remove the hardcoded -std=gnu99 here
 AM_CPPFLAGS =				\
-	$(GL_CFLAGS)			\
-	$(PIXMAN_CFLAGS)		\
-	$(CELT051_CFLAGS)		\
-	$(OPUS_CFLAGS)		        \
-	$(PROTOCOL_CFLAGS)		\
-	$(SMARTCARD_CFLAGS)		\
+	$(SPICE_COMMON_CFLAGS)		\
 	$(VISIBILITY_HIDDEN_CFLAGS)	\
 	$(WARN_CFLAGS)			\
 	-std=gnu99			\
 	$(NULL)
 
-libspice_common_la_LIBADD =				\
-	$(OPUS_LIBS)		                        \
-	$(CELT051_LIBS)
+libspice_common_la_LIBADD =	\
+	$(SPICE_COMMON_LIBS)
 
+topdir=$(abs_srcdir)/..
 MARSHALLERS_DEPS =					\
-	$(top_srcdir)/python_modules/__init__.py	\
-	$(top_srcdir)/python_modules/codegen.py		\
-	$(top_srcdir)/python_modules/demarshal.py	\
-	$(top_srcdir)/python_modules/marshal.py		\
-	$(top_srcdir)/python_modules/ptypes.py		\
-	$(top_srcdir)/python_modules/spice_parser.py	\
-	$(top_srcdir)/spice_codegen.py			\
+	$(topdir)/python_modules/__init__.py	\
+	$(topdir)/python_modules/codegen.py		\
+	$(topdir)/python_modules/demarshal.py	\
+	$(topdir)/python_modules/marshal.py		\
+	$(topdir)/python_modules/ptypes.py		\
+	$(topdir)/python_modules/spice_parser.py	\
+	$(topdir)/spice_codegen.py			\
 	$(NULL)
 
 # Note despite being autogenerated these are not part of CLEANFILES, they are
 # actually a part of EXTRA_DIST, to avoid the need for pyparser by end users
-generated_client_demarshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-demarshallers --client --include messages.h $< $@ >/dev/null
+generated_client_demarshallers.c: $(topdir)/spice.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-demarshallers --client --include messages.h $< $@ >/dev/null
 
-generated_client_demarshallers1.c: $(top_srcdir)/spice1.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-demarshallers --client --include messages.h --prefix 1 --ptrsize 8 $< $@ >/dev/null
+generated_client_demarshallers1.c: $(topdir)/spice1.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-demarshallers --client --include messages.h --prefix 1 --ptrsize 8 $< $@ >/dev/null
 
-generated_client_marshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --include messages.h --include client_marshallers.h --client $< $@ >/dev/null
+generated_client_marshallers.c: $(topdir)/spice.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-marshallers -P --include messages.h --include client_marshallers.h --client $< $@ >/dev/null
 
-generated_client_marshallers1.c: $(top_srcdir)/spice1.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers -P --include messages.h --include client_marshallers.h --client --prefix 1 --ptrsize 8 $< $@ >/dev/null
+generated_client_marshallers1.c: $(topdir)/spice1.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-marshallers -P --include messages.h --include client_marshallers.h --client --prefix 1 --ptrsize 8 $< $@ >/dev/null
 
-generated_server_demarshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-demarshallers --server --include messages.h $< $@ >/dev/null
+generated_server_demarshallers.c: $(topdir)/spice.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-demarshallers --server --include messages.h $< $@ >/dev/null
 
 STRUCTS = -M String -M Rect -M Point -M DisplayBase -M Fill -M Opaque -M Copy -M Blend -M Blackness -M Whiteness -M Invers -M Rop3 -M Stroke -M Text -M Transparent -M AlphaBlend -M Composite
-generated_server_marshallers.c: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers $(STRUCTS) --server --include messages.h $< $@ >/dev/null
+generated_server_marshallers.c: $(topdir)/spice.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-marshallers $(STRUCTS) --server --include messages.h $< $@ >/dev/null
 
-generated_server_marshallers.h: $(top_srcdir)/spice.proto $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-marshallers $(STRUCTS) --server --include messages.h -H $< $@ >/dev/null
+generated_server_marshallers.h: $(topdir)/spice.proto $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-marshallers $(STRUCTS) --server --include messages.h -H $< $@ >/dev/null
 
 # this is going to upset automake distcheck, since we try to write to
 # readonly srcdir. To limit the fail chances, rebuild automatically
 # enums.h only if the spice.proto has changed.
-$(top_srcdir)/spice-protocol/spice/enums.h: $(top_srcdir)/spice.proto # $(MARSHALLERS_DEPS)
-	$(AM_V_GEN)$(PYTHON) $(top_srcdir)/spice_codegen.py --generate-enums $< $@ >/dev/null
+$(top_srcdir)/spice-protocol/spice/enums.h: $(topdir)/spice.proto # $(MARSHALLERS_DEPS)
+	$(AM_V_GEN)$(PYTHON) $(topdir)/spice_codegen.py --generate-enums $< $@ >/dev/null
 
 EXTRA_DIST =				\
 	$(CLIENT_MARSHALLERS)		\
@@ -154,5 +154,3 @@ EXTRA_DIST =				\
 	sw_canvas.c			\
 	sw_canvas.h			\
 	$(NULL)
-
--include $(top_srcdir)/git.mk
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index bb469c6..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,152 +0,0 @@
-AC_PREREQ([2.63])
-
-AC_INIT([spice-common],
-        [noversion],
-        [spice-devel at lists.freedesktop.org])
-
-AC_CONFIG_SRCDIR([common/bitops.h])
-AC_CONFIG_MACRO_DIR([m4])
-AM_CONFIG_HEADER([config.h])
-AC_CONFIG_AUX_DIR([build-aux])
-
-# For automake >= 1.12
-m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
-
-# Checks for programs
-AM_INIT_AUTOMAKE([1.11 dist-xz no-dist-gzip tar-ustar foreign -Wall -Werror])
-AM_MAINTAINER_MODE
-AM_SILENT_RULES([yes])
-LT_INIT
-
-AC_PROG_CC
-AC_PROG_CC_C99
-if test "x$ac_cv_prog_cc_c99" = xno; then
-    AC_MSG_ERROR([C99 compiler is required.])
-fi
-AM_PROG_CC_C_O
-
-# Checks for libraries
-AC_CONFIG_SUBDIRS([spice-protocol])
-PROTOCOL_CFLAGS='-I ${top_srcdir}/spice-protocol'
-AC_SUBST(PROTOCOL_CFLAGS)
-
-PKG_CHECK_MODULES(PIXMAN, pixman-1 >= 0.17.7)
-AC_SUBST(PIXMAN_CFLAGS)
-
-AC_ARG_ENABLE([smartcard],
-  AS_HELP_STRING([--enable-smartcard=@<:@yes/no/auto@:>@],
-                 [Enable smartcard support @<:@default=auto@:>@]),
-  [],
-  [enable_smartcard="auto"])
-
-have_smartcard=no
-if test "x$enable_smartcard" != "xno"; then
-  PKG_CHECK_MODULES(SMARTCARD, libcacard >= 0.1.2, [have_smartcard=yes], [have_smartcard=no])
-  if test "x$enable_smartcard" != "xauto" && test "x$have_smartcard" = "xno"; then
-    AC_MSG_ERROR("Smartcard support requested but libcacard could not be found")
-  fi
-  if test "x$have_smartcard" = "xyes"; then
-    AC_DEFINE(USE_SMARTCARD, [1], [Define if supporting smartcard proxying])
-  fi
-fi
-AM_CONDITIONAL([WITH_SMARTCARD], [test "x$have_smartcard" = "xyes"])
-
-AC_ARG_ENABLE(celt051,
-[  --disable-celt051       Disable celt051 audio codec (enabled by default)],,
-[enable_celt051="yes"])
-
-if test "x$enable_celt051" = "xyes"; then
-    PKG_CHECK_MODULES(CELT051, celt051 >= 0.5.1.1, have_celt051=yes, have_celt051=no)
-    AC_SUBST(CELT051_CFLAGS)
-    AC_SUBST(CELT051_LIBS)
-    AC_SUBST(CELT051_LIBDIR)
-else
-    have_celt051=no
-fi
-
-AM_CONDITIONAL([HAVE_CELT051], [test "x$have_celt051" = "xyes"])
-AM_COND_IF([HAVE_CELT051], AC_DEFINE([HAVE_CELT051], 1, [Define if we have celt051 codec]))
-
-PKG_CHECK_MODULES([OPUS], [opus >= 0.9.14], have_opus=yes, have_opus=no)
-
-AM_CONDITIONAL([HAVE_OPUS], [test "x$have_opus" = "xyes"])
-if test "x$have_opus" = "xyes" ; then
-  AC_DEFINE([HAVE_OPUS], [1], [Define if we have OPUS])
-  SPICE_REQUIRES+=" opus >= 0.9.14"
-  opus_version=`pkg-config --modversion opus`
-fi
-
-AC_ARG_ENABLE([opengl],
-  AS_HELP_STRING([--enable-opengl=@<:@yes/no@:>@],
-                 [Enable opengl support (not recommended) @<:@default=no@:>@]),
-  [],
-  [enable_opengl="no"])
-AM_CONDITIONAL(SUPPORT_GL, test "x$enable_opengl" = "xyes")
-
-if test "x$enable_opengl" = "xyes"; then
-   AC_CHECK_LIB(GL, glBlendFunc, GL_LIBS="$GL_LIBS -lGL", enable_opengl=no)
-   AC_CHECK_LIB(GLU, gluSphere, GL_LIBS="$GL_LIBS -lGLU", enable_opengl=no)
-   AC_DEFINE([USE_OPENGL], [1], [Define to build with OpenGL support])
-   AC_DEFINE([GL_GLEXT_PROTOTYPES], [], [Enable GLExt prototypes])
-
-   if test "x$enable_opengl" = "xno"; then
-      AC_MSG_ERROR([GL libraries not available])
-   fi
-fi
-AC_SUBST(GL_CFLAGS)
-AC_SUBST(GL_LIBS)
-
-# Checks for header files
-AC_PATH_X
-AC_FUNC_ALLOCA
-AC_CHECK_HEADERS([arpa/inet.h malloc.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/socket.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics
-AC_C_INLINE
-AC_TYPE_INT16_T
-AC_TYPE_INT32_T
-AC_TYPE_INT64_T
-AC_TYPE_INT8_T
-AC_TYPE_PID_T
-AC_TYPE_SIZE_T
-AC_TYPE_UINT16_T
-AC_TYPE_UINT32_T
-AC_TYPE_UINT64_T
-AC_TYPE_UINT8_T
-
-# Checks for library functions
-# do not check malloc or realloc, since that cannot be cross-compiled checked
-AC_FUNC_ERROR_AT_LINE
-AC_FUNC_FORK
-AC_CHECK_FUNCS([dup2 floor inet_ntoa memmove memset pow sqrt])
-
-# Others
-AC_CANONICAL_HOST
-
-AC_MSG_CHECKING([for native Win32])
-case "$host_os" in
-     *mingw*|*cygwin*)
-        os_win32=yes
-        ;;
-     *)
-        os_win32=no
-        ;;
-esac
-AC_MSG_RESULT([$os_win32])
-AM_CONDITIONAL([OS_WIN32],[test "$os_win32" = "yes"])
-
-# The End!
-AC_CONFIG_FILES([
-  Makefile
-  common/Makefile
-  python_modules/Makefile
-])
-
-AH_BOTTOM([
-/* argh.. this is evil */
-#if defined(FIXME_SERVER_SMARTCARD) && defined(USE_SMARTCARD)
-%:undef USE_SMARTCARD
-#endif
-])
-
-AC_OUTPUT
diff --git a/m4/spice-common.m4 b/m4/spice-common.m4
new file mode 100644
index 0000000..ab34f09
--- /dev/null
+++ b/m4/spice-common.m4
@@ -0,0 +1,98 @@
+dnl Input: relative path to the spice-common dir from $top_srcdir
+dnl SPICE_COMMON_CFLAGS
+dnl SPICE_COMMON_LIBS
+dnl SPICE_COMMON_REQUIRES
+dnl AC_DEFINE(USE_SMARTCARD)
+dnl AM_CONDITIONAL(WITH_SMARTCARD)
+dnl AC_DEFINE(HAVE_CELT051)
+dnl AM_CONDITIONAL(HAVE_CELT051)
+dnl AC_DEFINE(HAVE_OPUS)
+dnl AM_CONDITIONAL(HAVE_OPUS)
+AC_DEFUN([SPICE_COMMON_SETUP], [
+    SPICE_COMMON_CFLAGS="-I\${top_srcdir}/$1/"
+    SPICE_COMMON_LIBS=
+    SPICE_COMMON_REQUIRES=
+
+
+    PKG_CHECK_MODULES(ac_spice_PROTOCOL, spice-protocol >= 0.12.0)
+    SPICE_COMMON_CFLAGS+=" $ac_spice_PROTOCOL_CFLAGS"
+    SPICE_COMMON_LIBS+=" $ac_spice_PROTOCOL_LIBS"
+
+
+    PKG_CHECK_MODULES(ac_spice_PIXMAN, pixman-1 >= 0.17.7)
+    SPICE_COMMON_CFLAGS+=" $ac_spice_PIXMAN_CFLAGS"
+    SPICE_COMMON_LIBS+=" $ac_spice_PIXMAN_LIBS"
+    SPICE_COMMON_REQUIRES+=" pixman-1 >= 0.17.7"
+
+
+    AC_ARG_ENABLE([smartcard],
+      AS_HELP_STRING([--enable-smartcard=@<:@yes/no/auto@:>@],
+                     [Enable smartcard support @<:@default=auto@:>@]),
+      [],
+      [ac_spice_enable_smartcard="auto"])
+
+
+    ac_spice_have_smartcard=no
+    if test "x$ac_spice_enable_smartcard" != "xno"; then
+      PKG_CHECK_MODULES(ac_spice_SMARTCARD, libcacard >= 0.1.2,
+                        [ac_spice_have_smartcard=yes],
+                        [ac_spice_have_smartcard=no])
+      if test "x$ac_spice_enable_smartcard" != "xauto" && test "x$ac_spice_have_smartcard" = "xno"; then
+        AC_MSG_ERROR("Smartcard support requested but libcacard could not be found")
+      fi
+      if test "x$ac_spice_have_smartcard" = "xyes"; then
+        AC_DEFINE(USE_SMARTCARD, [1], [Define if supporting smartcard proxying])
+        SPICE_COMMON_REQUIRES+=" libcacard >= 0.1.2"
+      fi
+    fi
+    AM_CONDITIONAL([WITH_SMARTCARD], [test "x$ac_spice_have_smartcard" = "xyes"])
+    SPICE_COMMON_CFLAGS+=" $ac_spice_SMARTCARD_CFLAGS"
+    SPICE_COMMON_LIBS+=" $ac_spice_SMARTCARD_LIBS"
+
+
+    AC_ARG_ENABLE(celt051,
+                  [  --disable-celt051       Disable celt051 audio codec (enabled by default)],,
+                  [ac_spice_enable_celt051="yes"])
+
+    if test "x$ac_spice_enable_celt051" = "xyes"; then
+        PKG_CHECK_MODULES(ac_spice_CELT051, celt051 >= 0.5.1.1, ac_spice_have_celt051=yes, ac_spice_have_celt051=no)
+    else
+        ac_spice_have_celt051=no
+    fi
+
+    AM_CONDITIONAL([HAVE_CELT051], [test "x$ac_spice_have_celt051" = "xyes"])
+    AM_COND_IF([HAVE_CELT051],
+                SPICE_COMMON_REQUIRES+=" celt051 >= 0.5.1.1"
+                AC_DEFINE([HAVE_CELT051], 1, [Define if we have celt051 codec]))
+    SPICE_COMMON_CFLAGS+=" $ac_spice_CELT051_CFLAGS"
+    SPICE_COMMON_LIBS+=" $ac_spice_CELT051_LIBS"
+
+
+    PKG_CHECK_MODULES([ac_spice_OPUS], [opus >= 0.9.14], ac_spice_have_opus=yes, ac_spice_have_opus=no)
+
+    AM_CONDITIONAL([HAVE_OPUS], [test "x$ac_spice_have_opus" = "xyes"])
+    if test "x$ac_spice_have_opus" = "xyes" ; then
+      AC_DEFINE([HAVE_OPUS], [1], [Define if we have OPUS])
+      SPICE_COMMON_REQUIRES+=" opus >= 0.9.14"
+    fi
+    SPICE_COMMON_CFLAGS+=" $ac_spice_OPUS_CFLAGS"
+    SPICE_COMMON_LIBS+=" $ac_spice_OPUS_LIBS"
+    echo "SPICE_COMMON CFLAGS: $SPICE_COMMON_CFLAGS"
+    echo "SPICE_COMMON_REQUIRES: $SPICE_COMMON_REQUIRES"
+
+    AC_CONFIG_FILES([
+      $1/Makefile
+      $1/common/Makefile
+      $1/python_modules/Makefile
+    ])
+
+
+    dnl needed because the generated server-side demarshalling smartcard
+    dnl code does not compile for some reason
+    AH_BOTTOM([/* argh.. this is evil */
+               #if defined(FIXME_SERVER_SMARTCARD) && defined(USE_SMARTCARD)
+                   %:undef USE_SMARTCARD
+               #endif
+    ])
+])
+
diff --git a/spice-protocol b/spice-protocol
deleted file mode 160000
index a3de8dd..0000000
--- a/spice-protocol
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit a3de8dd8d250d6e3895c0167009cb58540c7ed19
-- 
1.8.4.2



More information about the Spice-devel mailing list