[librsvg: 1/2] Conditionally use cairo backend surface types




commit d02a55151f49fc91945c0d864cf3853f1282dfe9
Author: Sven Neumann <sven svenfoo org>
Date:   Fri Feb 5 19:15:50 2021 +0100

    Conditionally use cairo backend surface types

 build.rs                |  2 +-
 src/bin/rsvg-convert.rs | 24 ++++++++++++++++++++++++
 2 files changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/build.rs b/build.rs
index 52081685..25ffaa9b 100644
--- a/build.rs
+++ b/build.rs
@@ -98,7 +98,7 @@ fn check_for_cairo_surface_backend(backend: &str) {
 }
 
 fn check_for_cairo_surface_backends() {
-    let backends = ["pdf", "ps", "svg", "xml"];
+    let backends = ["pdf", "ps", "svg"];
     for name in &backends {
         check_for_cairo_surface_backend(name);
     }
diff --git a/src/bin/rsvg-convert.rs b/src/bin/rsvg-convert.rs
index 25834b87..c01b594d 100644
--- a/src/bin/rsvg-convert.rs
+++ b/src/bin/rsvg-convert.rs
@@ -154,8 +154,11 @@ impl ResizeStrategy {
 
 enum Surface {
     Png(cairo::ImageSurface, OutputStream),
+    #[cfg(have_cairo_pdf)]
     Pdf(cairo::PdfSurface, Size),
+    #[cfg(have_cairo_ps)]
     Ps(cairo::PsSurface, Size),
+    #[cfg(have_cairo_svg)]
     Svg(cairo::SvgSurface, Size),
 }
 
@@ -165,8 +168,11 @@ impl Deref for Surface {
     fn deref(&self) -> &cairo::Surface {
         match self {
             Self::Png(surface, _) => &surface,
+            #[cfg(have_cairo_pdf)]
             Self::Pdf(surface, _) => &surface,
+            #[cfg(have_cairo_ps)]
             Self::Ps(surface, _) => &surface,
+            #[cfg(have_cairo_svg)]
             Self::Svg(surface, _) => &surface,
         }
     }
@@ -190,6 +196,7 @@ impl Surface {
         Ok(Self::Png(surface, stream))
     }
 
+    #[cfg(have_cairo_pdf)]
     fn new_for_pdf(size: Size, stream: OutputStream) -> Result<Self, Error> {
         let surface = cairo::PdfSurface::for_stream(size.w, size.h, stream.into_write())?;
         if let Some(date) = metadata::creation_date()? {
@@ -198,17 +205,34 @@ impl Surface {
         Ok(Self::Pdf(surface, size))
     }
 
+    #[cfg(not(have_cairo_pdf))]
+    fn new_for_pdf(_size: Size, _stream: OutputStream) -> Result<Self, Error> {
+        Err(Error("unsupported format".to_string()))
+    }
+
+    #[cfg(have_cairo_ps)]
     fn new_for_ps(size: Size, stream: OutputStream, eps: bool) -> Result<Self, Error> {
         let surface = cairo::PsSurface::for_stream(size.w, size.h, stream.into_write())?;
         surface.set_eps(eps);
         Ok(Self::Ps(surface, size))
     }
 
+    #[cfg(not(have_cairo_ps))]
+    fn new_for_ps(_size: Size, _stream: OutputStream, _eps: bool) -> Result<Self, Error> {
+        Err(Error("unsupported format".to_string()))
+    }
+
+    #[cfg(have_cairo_svg)]
     fn new_for_svg(size: Size, stream: OutputStream) -> Result<Self, Error> {
         let surface = cairo::SvgSurface::for_stream(size.w, size.h, stream.into_write())?;
         Ok(Self::Svg(surface, size))
     }
 
+    #[cfg(not(have_cairo_svg))]
+    fn new_for_svg(_size: Size, _stream: OutputStream) -> Result<Self, Error> {
+        Err(Error("unsupported format".to_string()))
+    }
+
     pub fn render(
         &self,
         renderer: &CairoRenderer,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]