fast_excel 0.2.2 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.dockerignore +2 -0
- data/.gitignore +7 -0
- data/.travis.yml +32 -9
- data/CHANGELOG.md +36 -1
- data/Dockerfile.test +17 -0
- data/Gemfile +2 -1
- data/Gemfile.lock +33 -24
- data/LICENSE +21 -0
- data/Makefile +13 -0
- data/README.md +177 -40
- data/Rakefile +11 -1
- data/benchmarks/1k_rows.rb +17 -4
- data/benchmarks/20k_rows.rb +4 -0
- data/benchmarks/auto_width.rb +37 -0
- data/benchmarks/init.rb +14 -2
- data/benchmarks/memory.rb +8 -0
- data/benchmarks/profiler.rb +27 -0
- data/benchmarks/write_value.rb +62 -0
- data/examples/example.rb +3 -3
- data/examples/example_auto_width.rb +26 -0
- data/examples/example_filters.rb +36 -0
- data/examples/example_formula.rb +1 -3
- data/examples/example_hyperlink.rb +20 -0
- data/ext/fast_excel/extconf.rb +3 -0
- data/ext/fast_excel/text_width_ext.c +460 -0
- data/fast_excel.gemspec +3 -4
- data/letters.html +114 -0
- data/lib/fast_excel.rb +131 -25
- data/lib/fast_excel/binding.rb +33 -21
- data/lib/fast_excel/binding/chart.rb +20 -1
- data/lib/fast_excel/binding/format.rb +11 -4
- data/lib/fast_excel/binding/workbook.rb +10 -2
- data/lib/fast_excel/binding/worksheet.rb +44 -27
- data/libxlsxwriter/.gitignore +1 -0
- data/libxlsxwriter/.indent.pro +8 -0
- data/libxlsxwriter/.travis.yml +12 -0
- data/libxlsxwriter/CMakeLists.txt +338 -0
- data/libxlsxwriter/CONTRIBUTING.md +1 -1
- data/libxlsxwriter/Changes.txt +162 -0
- data/libxlsxwriter/LICENSE.txt +65 -4
- data/libxlsxwriter/Makefile +33 -11
- data/libxlsxwriter/Readme.md +3 -1
- data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +2 -1
- data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +2 -2
- data/libxlsxwriter/include/xlsxwriter.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/app.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/chart.h +164 -13
- data/libxlsxwriter/include/xlsxwriter/chartsheet.h +544 -0
- data/libxlsxwriter/include/xlsxwriter/common.h +35 -6
- data/libxlsxwriter/include/xlsxwriter/content_types.h +5 -2
- data/libxlsxwriter/include/xlsxwriter/core.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/custom.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/drawing.h +3 -2
- data/libxlsxwriter/include/xlsxwriter/format.h +8 -8
- data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/packager.h +18 -8
- data/libxlsxwriter/include/xlsxwriter/relationships.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/shared_strings.h +5 -3
- data/libxlsxwriter/include/xlsxwriter/styles.h +10 -5
- data/libxlsxwriter/include/xlsxwriter/theme.h +2 -2
- data/libxlsxwriter/include/xlsxwriter/utility.h +35 -5
- data/libxlsxwriter/include/xlsxwriter/workbook.h +234 -57
- data/libxlsxwriter/include/xlsxwriter/worksheet.h +780 -91
- data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +4 -2
- data/libxlsxwriter/libxlsxwriter.podspec +4 -2
- data/libxlsxwriter/src/Makefile +31 -6
- data/libxlsxwriter/src/app.c +2 -2
- data/libxlsxwriter/src/chart.c +116 -23
- data/libxlsxwriter/src/chartsheet.c +508 -0
- data/libxlsxwriter/src/content_types.c +12 -4
- data/libxlsxwriter/src/core.c +11 -11
- data/libxlsxwriter/src/custom.c +3 -3
- data/libxlsxwriter/src/drawing.c +114 -17
- data/libxlsxwriter/src/format.c +5 -5
- data/libxlsxwriter/src/hash_table.c +1 -1
- data/libxlsxwriter/src/packager.c +378 -61
- data/libxlsxwriter/src/relationships.c +2 -2
- data/libxlsxwriter/src/shared_strings.c +18 -4
- data/libxlsxwriter/src/styles.c +59 -12
- data/libxlsxwriter/src/theme.c +2 -2
- data/libxlsxwriter/src/utility.c +93 -6
- data/libxlsxwriter/src/workbook.c +379 -61
- data/libxlsxwriter/src/worksheet.c +1240 -174
- data/libxlsxwriter/src/xmlwriter.c +18 -9
- data/libxlsxwriter/third_party/minizip/Makefile +6 -1
- data/libxlsxwriter/third_party/minizip/ioapi.c +10 -0
- data/libxlsxwriter/third_party/minizip/zip.c +2 -0
- data/libxlsxwriter/third_party/tmpfileplus/tmpfileplus.c +2 -2
- data/libxlsxwriter/version.txt +1 -1
- data/test/auto_width_test.rb +19 -0
- data/test/date_test.rb +34 -0
- data/test/format_test.rb +8 -0
- data/test/reopen_test.rb +22 -0
- data/test/test_helper.rb +8 -5
- data/test/text_width_test.rb +80 -0
- data/test/tmpfile_test.rb +1 -0
- data/test/validations_test.rb +47 -0
- data/test/worksheet_test.rb +44 -1
- metadata +33 -9
@@ -906,7 +906,23 @@ module Libxlsxwriter
|
|
906
906
|
:end_, 0,
|
907
907
|
:no, 1
|
908
908
|
]
|
909
|
-
|
909
|
+
|
910
|
+
enum :chart_error_bar_axis, [
|
911
|
+
:axis_x, 0,
|
912
|
+
:axis_y, 1
|
913
|
+
]
|
914
|
+
|
915
|
+
enum :chart_axis_label_alignment, [
|
916
|
+
:align_center, 0,
|
917
|
+
:align_left, 1,
|
918
|
+
:align_right, 2
|
919
|
+
]
|
920
|
+
|
921
|
+
enum :chart_axis_type, [
|
922
|
+
:axis_type_x, 0,
|
923
|
+
:axis_type_y, 1
|
924
|
+
]
|
925
|
+
|
910
926
|
# = Fields:
|
911
927
|
# :type ::
|
912
928
|
# (Integer)
|
@@ -1268,6 +1284,7 @@ module Libxlsxwriter
|
|
1268
1284
|
:show_labels_legend, :uchar,
|
1269
1285
|
:show_labels_percent, :uchar,
|
1270
1286
|
:label_position, :uchar,
|
1287
|
+
:label_align, :uchar,
|
1271
1288
|
:label_separator, :uchar,
|
1272
1289
|
:default_label_position, :uchar,
|
1273
1290
|
:label_num_format, :string,
|
@@ -1934,6 +1951,7 @@ module Libxlsxwriter
|
|
1934
1951
|
:in_use, :uchar,
|
1935
1952
|
:chart_group, :uchar,
|
1936
1953
|
:cat_has_num_fmt, :uchar,
|
1954
|
+
:is_chartsheet, :uchar,
|
1937
1955
|
:has_horiz_cat_axis, :uchar,
|
1938
1956
|
:has_horiz_val_axis, :uchar,
|
1939
1957
|
:style_id, :uchar,
|
@@ -1976,6 +1994,7 @@ module Libxlsxwriter
|
|
1976
1994
|
:up_bar_fill, ChartFill,
|
1977
1995
|
:down_bar_fill, ChartFill,
|
1978
1996
|
:default_label_position, :uchar,
|
1997
|
+
:is_protected, :uchar,
|
1979
1998
|
:ordered_list_pointers, ChartOrderedListPointers.by_value,
|
1980
1999
|
:list_pointers, ChartListPointers.by_value
|
1981
2000
|
end
|
@@ -684,12 +684,19 @@ module Libxlsxwriter
|
|
684
684
|
def set_theme(value)
|
685
685
|
Libxlsxwriter.format_set_theme(self, value)
|
686
686
|
end
|
687
|
+
|
688
|
+
[:font_size, :underline, :font_script, :rotation, :indent, :pattern, :border, :num_format, :font_name].each do |prop|
|
689
|
+
alias :"#{prop}=" :"set_#{prop}"
|
690
|
+
define_method(prop) do
|
691
|
+
self[prop]
|
692
|
+
end
|
693
|
+
end
|
687
694
|
end
|
688
695
|
|
689
696
|
class Format < FFI::Struct
|
690
697
|
include FormatWrappers
|
691
698
|
layout :file, :pointer,
|
692
|
-
:xf_format_indices, HashTable.ptr,
|
699
|
+
:xf_format_indices, :pointer, #HashTable.ptr,
|
693
700
|
:num_xf_formats, :pointer,
|
694
701
|
:xf_index, :int32_t,
|
695
702
|
:dxf_index, :int32_t,
|
@@ -700,7 +707,7 @@ module Libxlsxwriter
|
|
700
707
|
:font_index, :uint16,
|
701
708
|
:has_font, :uchar,
|
702
709
|
:has_dxf_font, :uchar,
|
703
|
-
:font_size, :
|
710
|
+
:font_size, :double,
|
704
711
|
:bold, :uchar,
|
705
712
|
:italic, :uchar,
|
706
713
|
:font_color, :int,
|
@@ -786,7 +793,7 @@ module Libxlsxwriter
|
|
786
793
|
# (Integer)
|
787
794
|
class Font < FFI::Struct
|
788
795
|
layout :font_name, [:char, 128],
|
789
|
-
:font_size, :
|
796
|
+
:font_size, :double,
|
790
797
|
:bold, :uchar,
|
791
798
|
:italic, :uchar,
|
792
799
|
:underline, :uchar,
|
@@ -904,7 +911,7 @@ module Libxlsxwriter
|
|
904
911
|
# @param [Integer] size
|
905
912
|
# @return [nil]
|
906
913
|
# @scope class
|
907
|
-
attach_function :format_set_font_size, :format_set_font_size, [Format, :
|
914
|
+
attach_function :format_set_font_size, :format_set_font_size, [Format, :double], :void
|
908
915
|
|
909
916
|
# @method format_set_font_color(format, color)
|
910
917
|
# @param [Format] format
|
@@ -6,7 +6,8 @@ module Libxlsxwriter
|
|
6
6
|
# (String) Directory to use for the temporary files created by libxlsxwriter.
|
7
7
|
class WorkbookOptions < FFI::Struct
|
8
8
|
layout :constant_memory, :uchar,
|
9
|
-
:tmpdir, :string
|
9
|
+
:tmpdir, :string,
|
10
|
+
:use_zip64, :uchar
|
10
11
|
end
|
11
12
|
|
12
13
|
# = Fields:
|
@@ -168,8 +169,11 @@ module Libxlsxwriter
|
|
168
169
|
class Workbook < FFI::Struct
|
169
170
|
include WorkbookWrappers
|
170
171
|
layout :file, :pointer,
|
172
|
+
:sheets, Sheets.ptr,
|
171
173
|
:worksheets, Worksheets.ptr,
|
174
|
+
:chartsheets, :pointer,
|
172
175
|
:worksheet_names, WorksheetNames.ptr,
|
176
|
+
:chartsheet_names, :pointer,
|
173
177
|
:charts, Charts.ptr,
|
174
178
|
:ordered_charts, Charts.ptr,
|
175
179
|
:formats, Formats.ptr,
|
@@ -180,6 +184,8 @@ module Libxlsxwriter
|
|
180
184
|
:filename, :pointer,
|
181
185
|
:options, WorkbookOptions.by_value,
|
182
186
|
:num_sheets, :uint16,
|
187
|
+
:num_worksheets, :uint16,
|
188
|
+
:num_chartsheets, :uint16,
|
183
189
|
:first_sheet, :uint16,
|
184
190
|
:active_sheet, :uint16,
|
185
191
|
:num_xf_formats, :uint16,
|
@@ -192,7 +198,9 @@ module Libxlsxwriter
|
|
192
198
|
:has_png, :uchar,
|
193
199
|
:has_jpeg, :uchar,
|
194
200
|
:has_bmp, :uchar,
|
195
|
-
:used_xf_formats, HashTable.ptr
|
201
|
+
:used_xf_formats, HashTable.ptr,
|
202
|
+
:vba_project, :pointer,
|
203
|
+
:vba_codename, :pointer
|
196
204
|
end
|
197
205
|
|
198
206
|
attach_function :workbook_default_format, :workbook_default_format, [Workbook], Format
|
@@ -593,7 +593,7 @@ module Libxlsxwriter
|
|
593
593
|
end
|
594
594
|
|
595
595
|
# @return [nil]
|
596
|
-
def
|
596
|
+
def set_right_to_left()
|
597
597
|
Libxlsxwriter.worksheet_right_to_left(self)
|
598
598
|
end
|
599
599
|
|
@@ -689,6 +689,7 @@ module Libxlsxwriter
|
|
689
689
|
:array, :pointer,
|
690
690
|
:merged_ranges, MergedRanges.ptr,
|
691
691
|
:selections, Selections.ptr,
|
692
|
+
:data_validations, :pointer, # TODO add real definition for lxw_data_validations
|
692
693
|
:image_data, ImageData.ptr,
|
693
694
|
:chart_data, ChartData.ptr,
|
694
695
|
:dim_rowmin, :uint32,
|
@@ -705,6 +706,7 @@ module Libxlsxwriter
|
|
705
706
|
:hidden, :uint8,
|
706
707
|
:active_sheet, :pointer,
|
707
708
|
:first_sheet, :pointer,
|
709
|
+
:is_chartsheet, :uint8,
|
708
710
|
:col_options, :pointer,
|
709
711
|
:col_options_max, :uint16,
|
710
712
|
:col_sizes, :pointer,
|
@@ -724,25 +726,29 @@ module Libxlsxwriter
|
|
724
726
|
:rel_count, :uint16,
|
725
727
|
:vertical_dpi, :uint16,
|
726
728
|
:zoom, :uint16,
|
727
|
-
:filter_on,
|
728
|
-
:fit_page,
|
729
|
-
:hcenter,
|
730
|
-
:orientation,
|
731
|
-
:outline_changed,
|
732
|
-
:outline_on,
|
733
|
-
:
|
734
|
-
:
|
735
|
-
:
|
736
|
-
:
|
737
|
-
:
|
738
|
-
:
|
729
|
+
:filter_on, :uint8,
|
730
|
+
:fit_page, :uint8,
|
731
|
+
:hcenter, :uint8,
|
732
|
+
:orientation, :uint8,
|
733
|
+
:outline_changed, :uint8,
|
734
|
+
:outline_on, :uint8,
|
735
|
+
:outline_style, :uint8,
|
736
|
+
:outline_below, :uint8,
|
737
|
+
:outline_right, :uint8,
|
738
|
+
:page_order, :uint8,
|
739
|
+
:page_setup_changed, :uint8,
|
740
|
+
:page_view, :uint8,
|
741
|
+
:paper_size, :uint8,
|
742
|
+
:print_gridlines, :uint8,
|
743
|
+
:print_headers, :uint8,
|
739
744
|
:print_options_changed, :uint8,
|
740
|
-
:right_to_left,
|
741
|
-
:screen_gridlines,
|
742
|
-
:show_zeros,
|
743
|
-
:
|
744
|
-
:
|
745
|
-
:
|
745
|
+
:right_to_left, :uint8,
|
746
|
+
:screen_gridlines, :uint8,
|
747
|
+
:show_zeros, :uint8,
|
748
|
+
:vcenter, :uint8,
|
749
|
+
:zoom_scale_normal, :uint8,
|
750
|
+
:num_validations, :uint8,
|
751
|
+
:vba_codename, :pointer,
|
746
752
|
:tab_color, :int,
|
747
753
|
:margin_left, :double,
|
748
754
|
:margin_right, :double,
|
@@ -891,13 +897,14 @@ module Libxlsxwriter
|
|
891
897
|
:number_cell, 1,
|
892
898
|
:string_cell, 2,
|
893
899
|
:inline_string_cell, 3,
|
894
|
-
:
|
895
|
-
:
|
896
|
-
:
|
897
|
-
:
|
898
|
-
:
|
899
|
-
:
|
900
|
-
:
|
900
|
+
:inline_rich_string_cell, 4,
|
901
|
+
:formula_cell, 5,
|
902
|
+
:array_formula_cell, 6,
|
903
|
+
:blank_cell, 7,
|
904
|
+
:boolean_cell, 8,
|
905
|
+
:hyperlink_url, 9,
|
906
|
+
:hyperlink_internal, 10,
|
907
|
+
:hyperlink_external, 11
|
901
908
|
]
|
902
909
|
|
903
910
|
# = Fields:
|
@@ -1552,4 +1559,14 @@ module Libxlsxwriter
|
|
1552
1559
|
layout :stqh_first, Worksheet.ptr,
|
1553
1560
|
:stqh_last, :pointer
|
1554
1561
|
end
|
1555
|
-
|
1562
|
+
|
1563
|
+
class Sheet < FFI::Struct
|
1564
|
+
layout :is_chartsheet, :uchar,
|
1565
|
+
:list_pointers, :pointer
|
1566
|
+
end
|
1567
|
+
|
1568
|
+
class Sheets < FFI::Struct
|
1569
|
+
layout :stqh_first, Sheet.ptr,
|
1570
|
+
:stqh_last, :pointer
|
1571
|
+
end
|
1572
|
+
end
|
data/libxlsxwriter/.gitignore
CHANGED
data/libxlsxwriter/.indent.pro
CHANGED
@@ -50,10 +50,13 @@
|
|
50
50
|
-T lxw_chart
|
51
51
|
-T lxw_chart_axis
|
52
52
|
-T lxw_chart_axis_display_unit
|
53
|
+
-T lxw_chart_axis_label_alignment
|
53
54
|
-T lxw_chart_axis_label_position
|
54
55
|
-T lxw_chart_axis_tick_mark
|
55
56
|
-T lxw_chart_axis_tick_position
|
57
|
+
-T lxw_chart_axis_type
|
56
58
|
-T lxw_chart_blank
|
59
|
+
-T lxw_chart_error_bar_axis
|
57
60
|
-T lxw_chart_error_bar_cap
|
58
61
|
-T lxw_chart_error_bar_direction
|
59
62
|
-T lxw_chart_error_bar_type
|
@@ -75,6 +78,8 @@
|
|
75
78
|
-T lxw_chart_title
|
76
79
|
-T lxw_chart_trendline_type
|
77
80
|
-T lxw_chart_type
|
81
|
+
-T lxw_chartsheet
|
82
|
+
-T lxw_chartsheet_name
|
78
83
|
-T lxw_col_options
|
79
84
|
-T lxw_col_t
|
80
85
|
-T lxw_color_t
|
@@ -82,6 +87,7 @@
|
|
82
87
|
-T lxw_core
|
83
88
|
-T lxw_custom
|
84
89
|
-T lxw_custom_property
|
90
|
+
-T lxw_data_validation
|
85
91
|
-T lxw_datetime
|
86
92
|
-T lxw_defined_name
|
87
93
|
-T lxw_doc_properties
|
@@ -107,6 +113,7 @@
|
|
107
113
|
-T lxw_relationships
|
108
114
|
-T lxw_repeat_cols
|
109
115
|
-T lxw_repeat_rows
|
116
|
+
-T lxw_rich_string_tuple
|
110
117
|
-T lxw_row
|
111
118
|
-T lxw_row_col_options
|
112
119
|
-T lxw_row_t
|
@@ -114,6 +121,7 @@
|
|
114
121
|
-T lxw_series_data_point
|
115
122
|
-T lxw_series_error_bars
|
116
123
|
-T lxw_series_range
|
124
|
+
-T lxw_sheet
|
117
125
|
-T lxw_sst
|
118
126
|
-T lxw_styles
|
119
127
|
-T lxw_theme
|
data/libxlsxwriter/.travis.yml
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
language: c
|
2
|
+
dist: trusty
|
2
3
|
|
3
4
|
compiler:
|
4
5
|
- clang
|
@@ -8,18 +9,29 @@ env:
|
|
8
9
|
- CFLAGS='-Werror'
|
9
10
|
- NO_VALGRIND=1 USE_STANDARD_TMPFILE=1 CFLAGS='-Werror'
|
10
11
|
- NO_VALGRIND=1 CFLAGS='-Werror -m32'
|
12
|
+
- NO_VALGRIND=1 USE_SYSTEM_MINIZIP=1 CFLAGS='-Werror'
|
13
|
+
- NO_VALGRIND=1 USE_DOUBLE_FUNCTION=1 CFLAGS='-Werror'
|
11
14
|
|
12
15
|
install:
|
13
16
|
- sudo pip install pytest
|
14
17
|
- sudo apt-get update
|
18
|
+
- sudo apt-get remove -y oracle-java9-installer
|
15
19
|
- sudo apt-get install -y gcc-multilib
|
16
20
|
- sudo apt-get install -y zlib1g-dev
|
17
21
|
- sudo apt-get install -y zlib1g-dev:i386
|
18
22
|
- sudo apt-get install -y gcc
|
19
23
|
- sudo apt-get install -y valgrind
|
20
24
|
|
25
|
+
- wget http://mirrors.kernel.org/ubuntu/pool/universe/m/minizip/libminizip-dev_1.1-8_amd64.deb
|
26
|
+
- wget http://mirrors.kernel.org/ubuntu/pool/universe/m/minizip/libminizip1_1.1-8_amd64.deb
|
27
|
+
- sudo dpkg -i libminizip1_1.1-8_amd64.deb
|
28
|
+
- sudo dpkg -i libminizip-dev_1.1-8_amd64.deb
|
29
|
+
|
21
30
|
script:
|
22
31
|
- make V=1
|
23
32
|
- make test_functional V=1
|
24
33
|
- make test_unit V=1
|
34
|
+
- make examples V=1
|
25
35
|
- make test_valgrind V=1
|
36
|
+
- sudo make install V=1
|
37
|
+
- sudo make uninstall V=1
|
@@ -0,0 +1,338 @@
|
|
1
|
+
# :copyright: (c) 2017 Alex Huszagh.
|
2
|
+
# :license: FreeBSD, see LICENSE.txt for more details.
|
3
|
+
|
4
|
+
# Description
|
5
|
+
# ===========
|
6
|
+
#
|
7
|
+
# Use:
|
8
|
+
# Move to a custom directory, ideally out of source, and
|
9
|
+
# type `cmake $LXW_SOURCE $FLAGS`, where `LXW_SOURCE` is the
|
10
|
+
# path to the libxlsxwriter project, and `FLAGS` are custom
|
11
|
+
# flags to pass to the compiler.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
# For example, in the project directory, to build libxlsxwriter
|
15
|
+
# and the unittests in release mode, type:
|
16
|
+
# mkdir build && cd build
|
17
|
+
# cmake .. -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release
|
18
|
+
# cmake --build . --config Release
|
19
|
+
# ctest -C Release -V
|
20
|
+
# cmake --build . --config Release --target install
|
21
|
+
#
|
22
|
+
# If using a Makefile generator, you may use the simpler
|
23
|
+
# mkdir build && cd build
|
24
|
+
# cmake .. -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release
|
25
|
+
# make
|
26
|
+
# make test
|
27
|
+
# make install
|
28
|
+
#
|
29
|
+
# Flags:
|
30
|
+
# ZLIB_ROOT
|
31
|
+
# The ZLIB root directory can be specified either through
|
32
|
+
# an environment variable (`export ZLIB_ROOT=/usr/include`)
|
33
|
+
# or using a flag with CMake (`-DZLIB_ROOT:STRING=/usr/include`).
|
34
|
+
# This sets the preferred search path for the ZLIB installation.
|
35
|
+
#
|
36
|
+
# BUILD_TESTS
|
37
|
+
# Build unittests (default off). To build the unittests,
|
38
|
+
# pass `-DBUILD_TESTS=ON` during configuration.
|
39
|
+
#
|
40
|
+
# BUILD_EXAMPLES
|
41
|
+
# Build example files (default off). To build the examples,
|
42
|
+
# pass `-DBUILD_EXAMPLES=ON` during configuration.
|
43
|
+
#
|
44
|
+
# USE_STANDARD_TMPFILE
|
45
|
+
# Use the standard tmpfile() function (default off). To enable
|
46
|
+
# the standard tmpfile, pass `-DUSE_STANDARD_TMPFILE=ON`
|
47
|
+
# during configuration. This may produce bugs while cross-
|
48
|
+
# compiling or using MinGW/MSYS.
|
49
|
+
#
|
50
|
+
# USE_STATIC_MSVC_RUNTIME
|
51
|
+
# Use the static msvc runtime library when compiling with msvc (default off)
|
52
|
+
# To enable, pass `-DUSE_STATIC_MSVC_RUNTIME` during configuration.
|
53
|
+
#
|
54
|
+
# Toolchains:
|
55
|
+
# On multiarch Linux systems, which can build and run multiple
|
56
|
+
# binary targets on the same system, we include an `i686-toolchain`
|
57
|
+
# file to enable building i686 (x86 32-bit) targets on x86_64 systems.
|
58
|
+
# To use the i686 toolchain, pass the `-DCMAKE_TOOLCHAIN_FILE` option
|
59
|
+
# during CMake configuration. For example, from the build directory,
|
60
|
+
# you would use:
|
61
|
+
# cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/i686-toolchain.cmake
|
62
|
+
#
|
63
|
+
# CMake Options:
|
64
|
+
# CMake sets debug and release builds with the `CMAKE_BUILD_TYPE`
|
65
|
+
# option, which can be set as a flag during configuration.
|
66
|
+
# To build in release mode, pass `-DCMAKE_BUILD_TYPE=Release`
|
67
|
+
# during configuration.
|
68
|
+
#
|
69
|
+
# CMake sets the creation of static and shared libraries with the
|
70
|
+
# `BUILD_SHARED_LIBS` option, which can be set as a flag during
|
71
|
+
# configuration. To build a static library, pass
|
72
|
+
# `-DBUILD_SHARED_LIBS=OFF` during configuration.
|
73
|
+
#
|
74
|
+
# Generators:
|
75
|
+
# CMake also supports custom build generators, such as MakeFiles,
|
76
|
+
# Ninja, Visual Studio, and XCode. For example, to generate
|
77
|
+
# a Visual Studio solution, configure with:
|
78
|
+
# cmake .. -G "Visual Studio 14 2015 Win64"
|
79
|
+
#
|
80
|
+
# For more information on using generators, see:
|
81
|
+
# https://cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html
|
82
|
+
#
|
83
|
+
|
84
|
+
set(CMAKE_LEGACY_CYGWIN_WIN32 1)
|
85
|
+
if(MSVC)
|
86
|
+
cmake_minimum_required(VERSION 3.4)
|
87
|
+
else()
|
88
|
+
cmake_minimum_required(VERSION 3.1)
|
89
|
+
endif()
|
90
|
+
|
91
|
+
SET(PROJECT_NAME "xlsxwriter" CACHE STRING "Optional project and binary name")
|
92
|
+
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
93
|
+
project(${PROJECT_NAME} C)
|
94
|
+
enable_testing()
|
95
|
+
|
96
|
+
# OPTIONS
|
97
|
+
# -------
|
98
|
+
|
99
|
+
SET(ZLIB_ROOT "" CACHE STRING "Optional root for the ZLIB installation")
|
100
|
+
|
101
|
+
option(BUILD_TESTS "Build libxlsxwriter tests" OFF)
|
102
|
+
option(BUILD_EXAMPLES "Build libxlsxwriter examples" OFF)
|
103
|
+
option(USE_SYSTEM_MINIZIP "Use system minizip installation" OFF)
|
104
|
+
option(USE_STANDARD_TMPFILE "Use the C standard library's tmpfile()" OFF)
|
105
|
+
option(IOAPI_NO_64 "Disable 64-bit filesystem support" OFF)
|
106
|
+
if(MSVC)
|
107
|
+
option(USE_STATIC_MSVC_RUNTIME "Use the static runtime library" OFF)
|
108
|
+
endif()
|
109
|
+
if(DEFINED ENV{${ZLIB_ROOT}})
|
110
|
+
set(ZLIB_ROOT $ENV{ZLIB_ROOT})
|
111
|
+
endif()
|
112
|
+
|
113
|
+
if(IOAPI_NO_64)
|
114
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS IOAPI_NO_64=1)
|
115
|
+
endif()
|
116
|
+
|
117
|
+
# CONFIGURATIONS
|
118
|
+
# --------------
|
119
|
+
|
120
|
+
if(USE_SYSTEM_MINIZIP)
|
121
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_SYSTEM_MINIZIP)
|
122
|
+
endif()
|
123
|
+
|
124
|
+
if(USE_STANDARD_TMPFILE)
|
125
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_STANDARD_TMPFILE)
|
126
|
+
endif()
|
127
|
+
|
128
|
+
if(NOT BUILD_SHARED_LIBS)
|
129
|
+
if(UNIX)
|
130
|
+
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
131
|
+
elseif(MINGW OR MSYS)
|
132
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static -static-libgcc -Wno-char-subscripts -Wno-long-long")
|
133
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_FILE32API)
|
134
|
+
elseif(MSVC)
|
135
|
+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /O0 /Fd${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb")
|
136
|
+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Ox /Zi /Fd${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb")
|
137
|
+
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /Zi /Fd${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb")
|
138
|
+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /Fd${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb")
|
139
|
+
endif()
|
140
|
+
endif()
|
141
|
+
|
142
|
+
message(status "BEFORE: ${CMAKE_C_FLAGS_DEBUG}")
|
143
|
+
|
144
|
+
if(MSVC AND USE_STATIC_MSVC_RUNTIME)
|
145
|
+
foreach(flag_var CMAKE_C_FLAGS
|
146
|
+
CMAKE_C_FLAGS_DEBUG
|
147
|
+
CMAKE_C_FLAGS_RELEASE
|
148
|
+
CMAKE_C_FLAGS_MINSIZEREL
|
149
|
+
CMAKE_C_FLAGS_RELWITHDEBINFO)
|
150
|
+
if(${flag_var} MATCHES "/MD")
|
151
|
+
string(REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
|
152
|
+
endif()
|
153
|
+
endforeach()
|
154
|
+
endif()
|
155
|
+
|
156
|
+
# INCLUDES
|
157
|
+
# --------
|
158
|
+
|
159
|
+
enable_language(CXX)
|
160
|
+
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
161
|
+
|
162
|
+
# ZLIB
|
163
|
+
find_package(ZLIB REQUIRED "1.0")
|
164
|
+
list(APPEND LXW_PRIVATE_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS})
|
165
|
+
message("zlib version: " ${ZLIB_VERSION})
|
166
|
+
|
167
|
+
# MINIZIP
|
168
|
+
if (USE_SYSTEM_MINIZIP)
|
169
|
+
find_package(MINIZIP REQUIRED "1.0")
|
170
|
+
list(APPEND LXW_PRIVATE_INCLUDE_DIRS ${MINIZIP_INCLUDE_DIRS})
|
171
|
+
endif()
|
172
|
+
|
173
|
+
# LIBRARY
|
174
|
+
# -------
|
175
|
+
|
176
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS NOCRYPT NOUNCRYPT)
|
177
|
+
|
178
|
+
# Fix for modified zconf.h on Gentoo.
|
179
|
+
if(${CMAKE_HOST_SYSTEM} MATCHES gentoo)
|
180
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS OF=_Z_OF)
|
181
|
+
endif()
|
182
|
+
|
183
|
+
# Ensure CRT Secure warnings are disabled
|
184
|
+
if(MSVC)
|
185
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS)
|
186
|
+
endif()
|
187
|
+
|
188
|
+
# Ensure "TESTING" macro is defined if building tests
|
189
|
+
if(BUILD_TESTS)
|
190
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS TESTING)
|
191
|
+
endif()
|
192
|
+
|
193
|
+
file(GLOB LXW_SOURCES src/*.c)
|
194
|
+
file(GLOB_RECURSE LXW_HEADERS RELATIVE include *.h)
|
195
|
+
if(NOT USE_SYSTEM_MINIZIP)
|
196
|
+
list(APPEND LXW_SOURCES third_party/minizip/ioapi.c third_party/minizip/zip.c)
|
197
|
+
if(MSVC)
|
198
|
+
list(APPEND LXW_SOURCES third_party/minizip/iowin32.c)
|
199
|
+
endif()
|
200
|
+
endif()
|
201
|
+
if (NOT USE_STANDARD_TMPFILE)
|
202
|
+
list(APPEND LXW_SOURCES third_party/tmpfileplus/tmpfileplus.c)
|
203
|
+
endif()
|
204
|
+
|
205
|
+
set(LXW_PROJECT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
206
|
+
set(LXW_LIB_DIR "${LXW_PROJECT_DIR}/lib")
|
207
|
+
add_library(${PROJECT_NAME} "")
|
208
|
+
target_sources(${PROJECT_NAME}
|
209
|
+
PRIVATE ${LXW_SOURCES}
|
210
|
+
PUBLIC ${LXW_HEADERS}
|
211
|
+
)
|
212
|
+
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC ${ZLIB_LIBRARIES} ${MINIZIP_LIBRARIES})
|
213
|
+
target_compile_definitions(${PROJECT_NAME} PRIVATE ${LXW_PRIVATE_COMPILE_DEFINITIONS})
|
214
|
+
target_include_directories(${PROJECT_NAME}
|
215
|
+
PRIVATE ${LXW_PRIVATE_INCLUDE_DIRS}
|
216
|
+
PUBLIC include include/xlsxwriter
|
217
|
+
)
|
218
|
+
|
219
|
+
# TESTS
|
220
|
+
# -----
|
221
|
+
|
222
|
+
# Create test and runner.
|
223
|
+
#
|
224
|
+
# Args:
|
225
|
+
# sources Name of variable holding source files
|
226
|
+
# target Test name
|
227
|
+
#
|
228
|
+
macro(CreateTest sources target)
|
229
|
+
set(output_name xlsxwriter_${target})
|
230
|
+
set(dependencies ${output_name})
|
231
|
+
|
232
|
+
add_executable(${output_name} ${${sources}})
|
233
|
+
target_link_libraries(${output_name} ${PROJECT_NAME})
|
234
|
+
target_compile_definitions(${output_name} PRIVATE TESTING COLOR_OK)
|
235
|
+
add_test(NAME ${output_name}
|
236
|
+
COMMAND ${output_name}
|
237
|
+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
238
|
+
)
|
239
|
+
endmacro(CreateTest)
|
240
|
+
|
241
|
+
|
242
|
+
file(GLOB LXW_UTILITY_SOURCES test/unit/utility/test*.c)
|
243
|
+
file(GLOB LXW_XMLWRITER_SOURCES test/unit/xmlwriter/test*.c)
|
244
|
+
file(GLOB LXW_WORKSHEET_SOURCES test/unit/worksheet/test*.c)
|
245
|
+
file(GLOB LXW_SST_SOURCES test/unit/sst/test*.c)
|
246
|
+
file(GLOB LXW_WORKBOOK_SOURCES test/unit/workbook/test*.c)
|
247
|
+
file(GLOB LXW_APP_SOURCES test/unit/app/test*.c)
|
248
|
+
file(GLOB LXW_CONTENTTYPES_SOURCES test/unit/content_types/test*.c)
|
249
|
+
file(GLOB LXW_CORE_SOURCES test/unit/core/test*.c)
|
250
|
+
file(GLOB LXW_RELATIONSHIPS_SOURCES test/unit/relationships/test*.c)
|
251
|
+
file(GLOB LXW_FORMAT_SOURCES test/unit/format/test*.c)
|
252
|
+
file(GLOB LXW_STYLES_SOURCES test/unit/styles/test*.c)
|
253
|
+
file(GLOB LXW_DRAWING_SOURCES test/unit/drawing/test*.c)
|
254
|
+
file(GLOB LXW_CHART_SOURCES test/unit/chart/test*.c)
|
255
|
+
file(GLOB LXW_CUSTOM_SOURCES test/unit/custom/test*.c)
|
256
|
+
file(GLOB LXW_FUNCTIONAL_SOURCES test/functional/src/*.c)
|
257
|
+
|
258
|
+
set(LXW_UNIT_SOURCES
|
259
|
+
test/unit/test_all.c
|
260
|
+
${LXW_UTILITY_SOURCES}
|
261
|
+
${LXW_XMLWRITER_SOURCES}
|
262
|
+
${LXW_WORKSHEET_SOURCES}
|
263
|
+
${LXW_SST_SOURCES}
|
264
|
+
${LXW_WORKBOOK_SOURCES}
|
265
|
+
${LXW_APP_SOURCES}
|
266
|
+
${LXW_CONTENTTYPES_SOURCES}
|
267
|
+
${LXW_CORE_SOURCES}
|
268
|
+
${LXW_RELATIONSHIPS_SOURCES}
|
269
|
+
${LXW_FORMAT_SOURCES}
|
270
|
+
${LXW_STYLES_SOURCES}
|
271
|
+
${LXW_DRAWING_SOURCES}
|
272
|
+
${LXW_CHART_SOURCES}
|
273
|
+
${LXW_CUSTOM_SOURCES}
|
274
|
+
)
|
275
|
+
|
276
|
+
if(BUILD_TESTS)
|
277
|
+
# unit tests
|
278
|
+
CreateTest(LXW_UNIT_SOURCES unit)
|
279
|
+
|
280
|
+
# functional tests
|
281
|
+
# WARNING: currently doesn't work, since the Python tests expect
|
282
|
+
# in-source builds
|
283
|
+
#find_program(PYTHON python)
|
284
|
+
#foreach(source ${LXW_FUNCTIONAL_SOURCES})
|
285
|
+
# get_filename_component(basename ${source} NAME_WE)
|
286
|
+
# add_executable(${basename} ${source})
|
287
|
+
# target_link_libraries(${basename} xlsxwriter)
|
288
|
+
#endforeach(source)
|
289
|
+
endif()
|
290
|
+
|
291
|
+
# EXAMPLES
|
292
|
+
# --------
|
293
|
+
|
294
|
+
file(GLOB LXW_EXAMPLE_SOURCES examples/*.c)
|
295
|
+
|
296
|
+
if(BUILD_EXAMPLES)
|
297
|
+
foreach(source ${LXW_EXAMPLE_SOURCES})
|
298
|
+
get_filename_component(basename ${source} NAME_WE)
|
299
|
+
add_executable(${basename} ${source})
|
300
|
+
target_link_libraries(${basename} ${PROJECT_NAME})
|
301
|
+
endforeach(source)
|
302
|
+
endif()
|
303
|
+
|
304
|
+
# INSTALL
|
305
|
+
# -------
|
306
|
+
|
307
|
+
include(GNUInstallDirs)
|
308
|
+
|
309
|
+
if(MSVC)
|
310
|
+
if(CMAKE_CL_64)
|
311
|
+
set(MSVC_FOLDER_PREFIX x64)
|
312
|
+
else()
|
313
|
+
set(MSVC_FOLDER_PREFIX Win32)
|
314
|
+
endif()
|
315
|
+
|
316
|
+
install(TARGETS ${PROJECT_NAME}
|
317
|
+
LIBRARY DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
|
318
|
+
ARCHIVE DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
|
319
|
+
RUNTIME DESTINATION "bin/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
|
320
|
+
)
|
321
|
+
if (NOT BUILD_SHARED_LIBS)
|
322
|
+
install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb
|
323
|
+
DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
|
324
|
+
)
|
325
|
+
endif()
|
326
|
+
|
327
|
+
else(MSVC)
|
328
|
+
install(TARGETS ${PROJECT_NAME}
|
329
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
330
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
331
|
+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
332
|
+
)
|
333
|
+
endif(MSVC)
|
334
|
+
install(FILES include/xlsxwriter.h DESTINATION include)
|
335
|
+
install(DIRECTORY include/xlsxwriter
|
336
|
+
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
337
|
+
FILES_MATCHING PATTERN "*.h"
|
338
|
+
)
|