ソースを参照

fix compatibility with libxlsxwriter 0.8.8

Remi Collet 5 年 前
コミット
dc34e4de78
2 ファイル変更23 行追加0 行削除
  1. 11 0
      config.m4
  2. 12 0
      kernel/write.c

+ 11 - 0
config.m4

@@ -113,6 +113,13 @@ if test "$PHP_XLSWRITER" != "no"; then
             ],[
                 -L$XLSXWRITER_DIR/$PHP_LIBDIR -lm
             ])
+            PHP_CHECK_LIBRARY(xlsxwriter, lxw_fopen,
+            [
+                AC_DEFINE(HAVE_LXW_OPEN, 1, [ lxw_fopen available in 0.8.8 ])
+            ],[
+            ],[
+                -L$XLSXWRITER_DIR/$PHP_LIBDIR -lm
+            ])
         fi
 
         AC_DEFINE(HAVE_LIBXLSXWRITER, 1, [ use system libxlsxwriter ])
@@ -134,6 +141,10 @@ if test "$PHP_XLSWRITER" != "no"; then
         if test `echo $XLSXWRITER_VERSION | $SED -e 's/[[^0-9]]/ /g' | $AWK '{print $1*10000 + $2*100 + $3}'` -ge 807; then
             AC_DEFINE(HAVE_WORKBOOK_ADD_VBA_PROJECT, 1, [ workbook_add_vba_project available in 0.8.7 ])
         fi
+
+        if test `echo $XLSXWRITER_VERSION | $SED -e 's/[[^0-9]]/ /g' | $AWK '{print $1*10000 + $2*100 + $3}'` -ge 808; then
+            AC_DEFINE(HAVE_LXW_OPEN, 1, [ lxw_fopen available in 0.8.8 ])
+        fi
         dnl see library/CMakeLists.txt
         LIBOPT="-DNOCRYPT -DNOUNCRYPT"
     fi

+ 12 - 0
kernel/write.c

@@ -507,14 +507,22 @@ STATIC void
 _prepare_drawings(lxw_workbook *self)
 {
     lxw_worksheet *worksheet;
+#ifdef HAVE_LXW_OPEN
+    lxw_object_properties *image_options;
+#else
     lxw_image_options *image_options;
+#endif
     uint16_t chart_ref_id = 0;
     uint16_t image_ref_id = 0;
     uint16_t drawing_id = 0;
 
     STAILQ_FOREACH(worksheet, self->worksheets, list_pointers) {
 
+#ifdef HAVE_LXW_OPEN
+        if (STAILQ_EMPTY(worksheet->image_props)
+#else
         if (STAILQ_EMPTY(worksheet->image_data)
+#endif
             && STAILQ_EMPTY(worksheet->chart_data))
             continue;
 
@@ -534,7 +542,11 @@ _prepare_drawings(lxw_workbook *self)
                                    ordered_list_pointers);
         }
 
+#ifdef HAVE_LXW_OPEN
+        STAILQ_FOREACH(image_options, worksheet->image_props, list_pointers) {
+#else
         STAILQ_FOREACH(image_options, worksheet->image_data, list_pointers) {
+#endif
 
             if (image_options->image_type == LXW_IMAGE_PNG)
                 self->has_png = LXW_TRUE;