+#ifdef CAIRO_SUPPORT
+#include <cairo.h>
+
+
+void generate_png(int width, int height, Universe *universe, const char *image_name) {
+ const int depth = 4;
+ cairo_surface_t *image;
+ cairo_t* context_resource;
+ unsigned char *data;
+ data = new unsigned char [width * height * depth];
+
+ image = cairo_image_surface_create_for_data(data,
+ CAIRO_FORMAT_RGB24,
+ width,
+ height,
+ width * depth);
+
+ context_resource = cairo_create(image);
+
+ cairo_set_source_rgb(context_resource, 1.0, 1.0, 1.0);
+ cairo_rectangle(context_resource, 0, 0, width, height);
+ cairo_fill(context_resource);
+
+ universe->draw(context_resource);
+
+ cairo_surface_write_to_png(image, image_name);
+
+ // fprintf(stdout, "Content-type: image/png\n\n");
+ // cairo_surface_write_to_png_stream(image, write_cairo_to_file, stdout);
+
+ cairo_destroy(context_resource);
+ cairo_surface_destroy(image);
+ delete[] data;
+}
+#endif
+