[Compcomm] [Patch] Schema build system for beryl-premerge, fix bcop with non-standard prefixes.

Christopher Halse Rogers chalserogers at gmail.com
Sun May 6 00:52:10 EDT 2007


As $SUBJECT.

Building plugins using bcop sometimes fails for me, because the bcop
script gets the xslt directory from pkg-config, and I have everything
installed to a non-standard prefix (~/Compiz) which pkg-config doesn't
know about unless I set PKG_CONFIG_PATH.  The attached patch hardcodes
the xslt directory based upon the --prefix given to configure.

Second patch is to get beryl-premerge to build and install gconf
schemas.  Basically imported wholesale from the new Compiz
metadata->schema builds.  Requires that you pass --enable-schemas to
configure.

Chris
-------------- next part --------------
From 526d2dbd5f6e80e9559abff53045986a1f7e53a0 Mon Sep 17 00:00:00 2001
From: Christopher James Halse Rogers <chris at Burninator.(none)>
Date: Sat, 5 May 2007 14:02:51 +1000
Subject: [PATCH] Hardcode xsltdir variable based on ./configure input.

Fixes using non-standard install prefix, where pkgconfig won't know about
bcop.pc
---
 configure.ac    |    1 -
 src/Makefile.am |    3 +++
 src/bcop.in     |    2 +-
 3 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index b7477b9..61d922d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -25,5 +25,4 @@ AC_OUTPUT([
 bcop.pc
 Makefile
 src/Makefile
-src/bcop
 ])
diff --git a/src/Makefile.am b/src/Makefile.am
index d8dfa19..e479d1e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -7,3 +7,6 @@ bin_SCRIPTS = bcop
 DISTCLEANFILES=$(bin_SCRIPTS)
 
 EXTRA_DIST=$(bin_SCRIPTS) $(xml_files)
+
+bcop : $(srcdir)/bcop.in
+	sed s\|@datapath@\|@xsltdir@\| $(srcdir)/bcop.in > $(srcdir)/bcop
diff --git a/src/bcop.in b/src/bcop.in
index b4f982a..10cd65a 100755
--- a/src/bcop.in
+++ b/src/bcop.in
@@ -18,7 +18,7 @@
 #  GNU General Public License for more details.
 #
 
-xsltdir=`pkg-config --variable xsltpath bcop`
+xsltdir=@datapath@
 
 function usage
 {
-- 
1.4.4.2
-------------- next part --------------
From 8a49b60ab188934d2b8d39308656c4dfddf75c98 Mon Sep 17 00:00:00 2001
From: Christopher James Halse Rogers <chris at Burninator.(none)>
Date: Sat, 5 May 2007 17:30:05 +1000
Subject: [PATCH] Import part of FD.O's Compiz build system to add a make target to build gconf
schemas for plugins
---
 configure.ac          |   23 +++
 metadata/Makefile.am  |   18 ++
 metadata/schemas.xslt |  449 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 490 insertions(+), 0 deletions(-)

diff --git a/configure.ac b/configure.ac
index 4c17a52..6d40a3e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -170,6 +170,29 @@ if test "$use_jpeg" = yes; then
   AC_DEFINE(USE_JPEG, 1, [Build jpeg plugin])
 fi
 
+AC_ARG_ENABLE(gconf,
+  [  --enable-schemas         Build gconf schemas],
+  [use_gconf=$enableval], [use_gconf=no])
+
+if test "x$use_gconf" = "xyes"; then
+  AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
+  if test x"$GCONFTOOL" = xno; then
+    AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
+  fi
+fi
+
+AM_GCONF_SOURCE_2
+
+
+AM_CONDITIONAL(USE_GCONF, test "x$use_gconf" = "xyes")
+if test "$use_gconf" = yes; then
+  AC_DEFINE(USE_GCONF, 1, [Build gconf schemas])
+fi
+
+stylesheetdir=$datadir/compiz
+AC_SUBST(stylesheetdir)
+
+
 AC_OUTPUT([
 Makefile
 metadata/Makefile
diff --git a/metadata/Makefile.am b/metadata/Makefile.am
index d26f323..b1fe5a5 100644
--- a/metadata/Makefile.am
+++ b/metadata/Makefile.am
@@ -24,3 +24,21 @@ meta_DATA =	         \
 	wall.xml
 
 EXTRA_DIST = $(meta_DATA)
+
+if USE_GCONF
+schemadir   = $(GCONF_SCHEMA_FILE_DIR)
+schema_DATA = $(patsubst %.xml,compiz-%.schemas,$(meta_DATA))
+
+%.schemas: $(meta_DATA)
+       xsltproc -o $@ schemas.xslt $(subst compiz-,,$*).xml;
+
+xsltdir   = $(stylesheetdir)
+xslt_DATA = schemas.xslt
+
+if GCONF_SCHEMAS_INSTALL
+install-data-local:
+       if test -z "$(DESTDIR)" ; then \
+               GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) $(GCONFTOOL) --makefile-install-rule $(schema_DATA); \
+        fi
+endif
+endif
diff --git a/metadata/schemas.xslt b/metadata/schemas.xslt
new file mode 100644
index 0000000..0b94014
--- /dev/null
+++ b/metadata/schemas.xslt
@@ -0,0 +1,449 @@
+<!--
+  Copyright ?? 2007 Dennis Kasprzyk
+
+  Permission to use, copy, modify, distribute, and sell this software
+  and its documentation for any purpose is hereby granted without
+  fee, provided that the above copyright notice appear in all copies
+  and that both that copyright notice and this permission notice
+  appear in supporting documentation, and that the name of
+  Dennis Kasprzyk not be used in advertising or publicity pertaining to
+  distribution of the software without specific, written prior permission.
+  Dennis Kasprzyk makes no representations about the suitability of this
+  software for any purpose. It is provided "as is" without express or
+  implied warranty.
+
+  DENNIS KASPRZYK DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+  NO EVENT SHALL DENNIS KASPRZYK BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+  OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+  NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+  WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+  Authors: Dennis Kasprzyk <onestone at deltatauchi.de>
+-->
+
+<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform' >
+  <xsl:output method="xml" indent="yes"/>
+
+  <xsl:param name="appName">/apps/compiz</xsl:param>
+
+  <xsl:template  match="/compiz">
+    <gconfschemafile>
+      <schemalist>
+        <xsl:for-each select="/compiz//option">
+          <xsl:call-template name="dumpOption"/>
+        </xsl:for-each>
+      </schemalist>
+    </gconfschemafile>
+  </xsl:template>
+
+  <!-- generates the schema for an option -->
+  <xsl:template name="dumpOption">
+    <xsl:choose>
+      <!-- for action types we need to generate _key,_button,_edge,
+          _edgebutton and _bell option types (if needed) -->
+      <xsl:when test="@type = 'action'">
+        <xsl:if test="allowed/@key = 'true'">
+          <schema>
+            <key>/schemas<xsl:call-template name="printKey"/>_key</key>
+            <applyto><xsl:call-template name="printKey"/>_key</applyto>
+            <owner>compiz</owner>
+            <type>string</type>
+            <xsl:choose>
+              <xsl:when test="default/key/text()">
+                <default><xsl:value-of select="default/key/text()"/></default>
+              </xsl:when>
+              <xsl:otherwise>
+                <default>Disabled</default>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="printDescription"/>
+          </schema>
+        </xsl:if>
+        <xsl:if test="allowed/@button = 'true'">
+          <schema>
+            <key>/schemas<xsl:call-template name="printKey"/>_button</key>
+            <applyto><xsl:call-template name="printKey"/>_button</applyto>
+            <owner>compiz</owner>
+            <type>string</type>
+            <xsl:choose>
+              <xsl:when test="default/button/text()">
+                <default><xsl:value-of select="default/button/text()"/></default>
+              </xsl:when>
+              <xsl:otherwise>
+                <default>Disabled</default>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="printDescription"/>
+          </schema>
+        </xsl:if>
+        <xsl:if test="allowed/@edge = 'true'">
+          <schema>
+            <key>/schemas<xsl:call-template name="printKey"/>_edge</key>
+            <applyto><xsl:call-template name="printKey"/>_edge</applyto>
+            <owner>compiz</owner>
+            <type>list</type>
+            <list_type>string</list_type>
+            <xsl:choose>
+              <xsl:when test="default/edges">
+                <default>[<xsl:call-template name="getEdgeList"/>]</default>
+              </xsl:when>
+              <xsl:otherwise>
+                <default>[]</default>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="printDescription">
+              <xsl:with-param name="info">
+                <xsl:text> (Top, Bottom, Left, Right, TopLeft, </xsl:text>
+                <xsl:text>TopRight, BottomLeft, BottomRight)</xsl:text>
+              </xsl:with-param>
+            </xsl:call-template>
+          </schema>
+          <schema>
+            <key>/schemas<xsl:call-template name="printKey"/>_edgebutton</key>
+            <applyto><xsl:call-template name="printKey"/>_edgebutton</applyto>
+            <owner>compiz</owner>
+            <type>int</type>
+            <xsl:choose>
+              <xsl:when test="default/edges/@button">
+                <default><xsl:value-of select="default/edges/@button"/></default>
+              </xsl:when>
+              <xsl:otherwise>
+                <default>0</default>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="printDescription"/>
+          </schema>
+        </xsl:if>
+        <xsl:if test="allowed/@bell = 'true'">
+          <schema>
+            <key>/schemas<xsl:call-template name="printKey"/>_bell</key>
+            <applyto><xsl:call-template name="printKey"/>_bell</applyto>
+            <owner>compiz</owner>
+            <type>bool</type>
+            <xsl:choose>
+              <xsl:when test="default/bell/text()">
+                <default><xsl:value-of select="default/bell/text()"/></default>
+              </xsl:when>
+              <xsl:otherwise>
+                <default>false</default>
+              </xsl:otherwise>
+            </xsl:choose>
+            <xsl:call-template name="printDescription"/>
+          </schema>
+        </xsl:if>
+      </xsl:when>
+      <xsl:otherwise>
+        <schema>
+          <key>/schemas<xsl:call-template name="printKey"/></key>
+          <applyto><xsl:call-template name="printKey"/></applyto>
+          <owner>compiz</owner>
+          <type><xsl:call-template name="printType"/></type>
+          <xsl:choose>
+            <!-- for most option types we can use the default value directly -->
+            <xsl:when test="contains('bool,int,float,string,match', @type)">
+              <default>
+                <xsl:choose>
+                  <xsl:when test="default/text()">
+                    <xsl:value-of select="default/text()"/>
+                  </xsl:when>
+                  <xsl:otherwise>
+                    <!-- if no default value was specified we need to generate one -->
+                    <xsl:choose>
+                      <xsl:when test="@type = 'bool'">
+                        <xsl:text>false</xsl:text>
+                      </xsl:when>
+                      <xsl:when test="@type = 'int'">
+                        <xsl:variable name="num">
+                          <xsl:call-template name="printNumFallback"/>
+                        </xsl:variable>
+                        <xsl:value-of select="floor($num)"/>
+                      </xsl:when>
+                      <xsl:when test="@type = 'float'">
+                        <xsl:call-template name="printNumFallback"/>
+                      </xsl:when>
+                    </xsl:choose>
+                  </xsl:otherwise>
+                </xsl:choose>
+              </default>
+            </xsl:when>
+            <!-- color values need a special handling -->
+            <xsl:when test="@type = 'color'">
+              <default>
+                <xsl:choose>
+                  <xsl:when test="default/red/text() or default/green/text() or default/blue/text() or default/alpha/text()">
+                    <xsl:for-each select="default[1]">
+                      <xsl:call-template name="printColor"/>
+                    </xsl:for-each>
+                  </xsl:when>
+                  <xsl:otherwise>
+                    <xsl:text>#00000000</xsl:text>
+                  </xsl:otherwise>
+                </xsl:choose>
+              </default>
+            </xsl:when>
+            <xsl:when test="@type = 'list'">
+              <list_type>
+                <xsl:call-template name="printType">
+                  <xsl:with-param name="type" select="type/text()"/>
+                </xsl:call-template>
+              </list_type>
+              <xsl:choose>
+                <xsl:when test="type/text() = 'color'">
+                  <default>[<xsl:call-template name="printColorList"/>]</default>
+                </xsl:when>
+                <xsl:otherwise>
+                  <default>[<xsl:call-template name="printValueList"/>]</default>
+                </xsl:otherwise>
+              </xsl:choose>
+            </xsl:when>
+          </xsl:choose>
+          <!-- add the short and long descriptions -->
+          <xsl:call-template name="printDescription"/>
+        </schema>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!-- converts a compiz type to a gconf type -->
+  <xsl:template name="printType">
+    <xsl:param name="type">
+      <xsl:value-of select="@type"/>
+    </xsl:param>
+    <xsl:choose>
+      <xsl:when test="$type = 'int'">
+        <xsl:text>int</xsl:text>
+      </xsl:when>
+      <xsl:when test="$type = 'float'">
+        <xsl:text>float</xsl:text>
+      </xsl:when>
+      <xsl:when test="$type = 'bool'">
+        <xsl:text>bool</xsl:text>
+      </xsl:when>
+      <xsl:when test="$type = 'list'">
+        <xsl:text>list</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:text>string</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!-- prints the option long and short descriptions of an option -->
+  <xsl:template name="printDescription">
+    <xsl:param name="info">
+      <xsl:call-template name="printInfo"/>
+    </xsl:param>
+    <locale name="C">
+      <short><xsl:value-of select="short[not(@xml:lang)]/text()"/></short>
+      <long>
+        <xsl:value-of select="long[not(@xml:lang)]/text()"/>
+        <xsl:value-of select="$info"/>
+      </long>
+    </locale>
+    <xsl:for-each select="short[@xml:lang]">
+      <locale>
+        <xsl:attribute name='name'>
+          <xsl:value-of select="@xml:lang"/>
+        </xsl:attribute>
+        <xsl:variable name="language" select="@xml:lang"/>
+        <short><xsl:value-of select="text()"/></short>
+        <long>
+          <xsl:choose>
+            <xsl:when test="parent::option/long[lang($language)]">
+              <xsl:value-of select="parent::option/long[lang($language)]/text()"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:value-of select="parent::option/long[not(@xml:lang)]/text()"/>
+            </xsl:otherwise>
+          </xsl:choose>
+          <xsl:value-of select="$info"/>
+        </long>
+      </locale>
+    </xsl:for-each>
+  </xsl:template>
+
+  <!-- generates the additional info for the long option description -->
+  <xsl:template name="printInfo">
+    <xsl:variable name="info">
+      <xsl:text> (</xsl:text>
+      <xsl:choose>
+        <xsl:when test="contains('int,float', at type)">
+          <xsl:value-of select="min/text()"/> - <xsl:value-of select="max/text()"/>
+        </xsl:when>
+        <xsl:when test="@type = 'match'">
+          <xsl:text>match</xsl:text>
+        </xsl:when>
+        <xsl:when test="@type = 'string' and allowed/value">
+          <xsl:call-template name="printAllowedList"/>
+        </xsl:when>
+        <xsl:when test="@type = 'list' and type/text() = 'string' and allowed/value">
+          <xsl:call-template name="printAllowedList"/>
+        </xsl:when>
+      </xsl:choose>
+      <xsl:text>)</xsl:text>
+    </xsl:variable>
+    <xsl:if test="not(contains($info,' ()'))">
+      <xsl:value-of select="$info"/>
+    </xsl:if>
+  </xsl:template>
+
+  <!-- generates a list of allowed string values -->
+  <xsl:template name="printAllowedList">
+    <xsl:variable name="list">
+      <xsl:for-each select="allowed/value">
+          <xsl:value-of select="text()"/>
+          <xsl:text>, </xsl:text>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:value-of select="substring($list,1,string-length($list) - 2)"/>
+  </xsl:template>
+
+  <!-- generates a default number out of the min and max values -->
+  <xsl:template name="printNumFallback">
+    <xsl:choose>
+      <xsl:when test="max/text() and min/text()">
+        <xsl:value-of select="(max/text() + min/text()) div 2"/>
+      </xsl:when>
+      <xsl:when test="max/text() and not(min/text())">
+        <xsl:value-of select="max/text()"/>
+      </xsl:when>
+      <xsl:when test="not(max/text()) and min/text()">
+        <xsl:value-of select="min/text()"/>
+      </xsl:when>
+      <xsl:otherwise>0</xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!-- generates a list of values -->
+  <xsl:template name="printValueList">
+    <xsl:variable name="list">
+      <xsl:for-each select="default/value">
+        <xsl:value-of select="text()"/>
+        <xsl:text>,</xsl:text>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:value-of select="substring($list,1,string-length($list) - 1)"/>
+  </xsl:template>
+
+  <!-- generates a list of color string values -->
+  <xsl:template name="printColorList">
+    <xsl:variable name="list">
+      <xsl:for-each select="default/value">
+        <xsl:call-template name="printColor"/>
+        <xsl:text>,</xsl:text>
+      </xsl:for-each>
+    </xsl:variable>
+    <xsl:value-of select="substring($list,1,string-length($list) - 1)"/>
+  </xsl:template>
+
+  <!--
+    generates the #00aabbcc color value out of the compiz
+    metadata color description
+  -->
+  <xsl:template name="printColor">
+    <xsl:variable name="red">
+      <xsl:call-template name="getHexNum">
+        <xsl:with-param name="value" select="red/text()"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="green">
+      <xsl:call-template name="getHexNum">
+        <xsl:with-param name="value" select="green/text()"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="blue">
+      <xsl:call-template name="getHexNum">
+        <xsl:with-param name="value" select="blue/text()"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:variable name="alpha">
+      <xsl:call-template name="getHexNum">
+        <xsl:with-param name="value" select="alpha/text()"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:value-of select="concat('#',concat($red,concat($green,concat($blue,$alpha))))"/>
+  </xsl:template>
+
+  <!--
+    converts a decimal number in the range of 0-65535 or
+    a hex number in the range of 0x0000 - 0xffff to a hex number in the
+    range of 00 - ff
+  -->
+  <xsl:template name="getHexNum">
+    <xsl:param name="value"/>
+    <xsl:choose>
+      <xsl:when test="starts-with($value,'0x')">
+        <xsl:variable name="number">
+          <xsl:text>0000</xsl:text>
+          <xsl:value-of select="substring-after($value,'0x')"/>
+        </xsl:variable>
+        <xsl:value-of select="substring(concat('000',$number),string-length($number),2)"/>
+      </xsl:when>
+      <xsl:when test="string-length($value)">
+        <xsl:variable name="number">
+          <xsl:call-template name="toHex">
+            <xsl:with-param name="decimalNumber" select="$value"/>
+          </xsl:call-template>
+        </xsl:variable>
+        <xsl:value-of select="substring(concat('000',$number),string-length($number),2)"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:text>00</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+
+  <!-- generates a list of selected edges -->
+  <xsl:template name="getEdgeList">
+    <xsl:variable name="list">
+      <xsl:if test="default/edges[@left = 'true']">Left,</xsl:if>
+      <xsl:if test="default/edges[@right = 'true']">Right,</xsl:if>
+      <xsl:if test="default/edges[@top = 'true']">Top,</xsl:if>
+      <xsl:if test="default/edges[@bottom = 'true']">Bottom,</xsl:if>
+      <xsl:if test="default/edges[@top_left = 'true']">TopLeft,</xsl:if>
+      <xsl:if test="default/edges[@top_right = 'true']">TopRight,</xsl:if>
+      <xsl:if test="default/edges[@bottom_left = 'true']">BottomLeft,</xsl:if>
+      <xsl:if test="default/edges[@bottom_right = 'true']">BottomRight,</xsl:if>
+    </xsl:variable>
+    <xsl:value-of select="substring($list,1,string-length($list) - 1)"/>
+  </xsl:template>
+
+  <!-- prints the key path for an option -->
+  <xsl:template name="printKey">
+    <xsl:value-of select="$appName"/>
+    <xsl:choose>
+      <xsl:when test="ancestor::plugin">
+        <xsl:text>/plugins/</xsl:text>
+        <xsl:value-of select="ancestor::plugin/@name"/>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:text>/general</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+    <xsl:choose>
+      <xsl:when test="ancestor::screen">
+        <xsl:text>/screen0/options/</xsl:text>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:text>/allscreens/options/</xsl:text>
+      </xsl:otherwise>
+    </xsl:choose>
+    <xsl:value-of select="@name"/>
+  </xsl:template>
+
+  <!-- converts a decimal number to a hex number -->
+  <xsl:variable name="hexDigits" select="'0123456789abcdef'" />
+
+  <xsl:template name="toHex">
+    <xsl:param name="decimalNumber" />
+    <xsl:if test="$decimalNumber >= 16">
+      <xsl:call-template name="toHex">
+        <xsl:with-param name="decimalNumber" select="floor($decimalNumber div 16)" />
+      </xsl:call-template>
+    </xsl:if>
+    <xsl:value-of select="substring($hexDigits, ($decimalNumber mod 16) + 1, 1)" />
+  </xsl:template>
+
+</xsl:stylesheet>
-- 
1.4.4.2


More information about the CompComm mailing list