[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