From fbcc338aa4667c39b915decae4077ca14e5d4daa Mon Sep 17 00:00:00 2001 From: Steven Watanabe Date: Wed, 26 May 2010 00:31:42 +0000 Subject: [PATCH] Try to adjust the paths in boostbook_catalog.xml to be correct, whether we're using a windows or cygwin build of xsltproc [SVN r62221] --- v2/tools/boostbook.jam | 27 ++++++++++++++++++++++++--- v2/tools/xsltproc.jam | 30 ++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 3 deletions(-) diff --git a/v2/tools/boostbook.jam b/v2/tools/boostbook.jam index 9a8c6b019..90abf410c 100644 --- a/v2/tools/boostbook.jam +++ b/v2/tools/boostbook.jam @@ -315,6 +315,27 @@ rule docbook-to-fo ( target : source : properties * ) xslt $(target) : $(source) $(stylesheet) : $(properties) ; } +rule format-catalog-path ( path ) +{ + local result = $(path) ; + if [ xsltproc.is-cygwin ] + { + if [ os.name ] = NT + { + drive = [ MATCH ^/(.):(.*)$ : $(path) ] ; + result = /cygdrive/$(drive[1])$(drive[2]) ; + } + } + else + { + if [ os.name ] = CYGWIN + { + result = [ path.make $(path:W) ] ; + } + } + return [ regex.replace $(result) " " "%20" ] ; +} + rule generate-xml-catalog ( target : sources * : properties * ) { print.output $(target) ; @@ -323,7 +344,7 @@ rule generate-xml-catalog ( target : sources * : properties * ) local boostbook-dtd-dir = [ boostbook.dtd-dir ] ; if $(boostbook-dtd-dir) { - boostbook-dtd-dir = [ regex.replace $(boostbook-dtd-dir) " " "%20" ] ; + boostbook-dtd-dir = [ format-catalog-path $(boostbook-dtd-dir) ] ; } print.text @@ -348,7 +369,7 @@ rule generate-xml-catalog ( target : sources * : properties * ) } else { - docbook-xsl-dir = [ regex.replace $(docbook-xsl-dir) " " "%20" ] ; + docbook-xsl-dir = [ format-catalog-path $(docbook-xsl-dir) ] ; print.text " " ; } @@ -365,7 +386,7 @@ rule generate-xml-catalog ( target : sources * : properties * ) } else { - docbook-dtd-dir = [ regex.replace $(docbook-dtd-dir) " " "%20" ] ; + docbook-dtd-dir = [ format-catalog-path $(docbook-dtd-dir) ] ; print.text " " ; } diff --git a/v2/tools/xsltproc.jam b/v2/tools/xsltproc.jam index 7a150f8f0..96d47fd5e 100644 --- a/v2/tools/xsltproc.jam +++ b/v2/tools/xsltproc.jam @@ -13,6 +13,9 @@ import feature ; import regex ; import sequence ; import common ; +import os ; +import modules ; +import path ; feature.feature xsl:param : : free ; feature.feature xsl:path : : free ; @@ -33,9 +36,36 @@ rule init ( xsltproc ? ) { $(.initialized) = true ; .xsltproc = $(xsltproc) ; + .is-cygwin = [ .is-cygwin $(xsltproc) ] ; } } +# Returns a non-empty string if a cygwin xsltproc binary was specified. +rule is-cygwin ( ) +{ + return $(.is-cygwin) ; +} + +rule .is-cygwin ( xsltproc ) +{ + if [ os.on-windows ] + { + local file = [ path.make [ modules.binding $(__name__) ] ] ; + local dir = [ path.native + [ path.join [ path.parent $(file) ] xsltproc ] ] ; + if [ os.name ] = CYGWIN + { + cygdir = $(dir:W) ; + } + local command = + "\"$(xsltproc)\" \"$(dir)\\test.xsl\" \"$(dir)\\test.xml\" 2>&1" ; + local status = [ SHELL $(command) : no-output : exit-status ] ; + if $(status[2]) != "0" + { + return true ; + } + } +} rule compute-xslt-flags ( target : properties * ) {