fast_excel 0.4.1 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +1 -7
- data/CHANGELOG.md +9 -0
- data/Gemfile +1 -1
- data/examples/example.rb +2 -0
- data/examples/example_date_time.rb +38 -0
- data/fast_excel.gemspec +2 -2
- data/lib/fast_excel/binding/format.rb +17 -0
- data/lib/fast_excel/binding/workbook.rb +39 -17
- data/lib/fast_excel/binding/worksheet.rb +57 -13
- data/lib/fast_excel/binding.rb +7 -7
- data/lib/fast_excel.rb +27 -20
- data/libxlsxwriter/.github/FUNDING.yml +1 -0
- data/libxlsxwriter/.github/ISSUE_TEMPLATE.md +85 -0
- data/libxlsxwriter/.github/PULL_REQUEST_TEMPLATE.md +130 -0
- data/libxlsxwriter/.github/workflows/cmake_actions.yml +48 -0
- data/libxlsxwriter/.github/workflows/code_style.yml +23 -0
- data/libxlsxwriter/.github/workflows/coverity.yml +22 -0
- data/libxlsxwriter/.github/workflows/make_actions.yml +52 -0
- data/libxlsxwriter/.github/workflows/valgrind.yml +23 -0
- data/libxlsxwriter/.github/workflows/windows_build.yml +54 -0
- data/libxlsxwriter/.github/workflows/zig_build.yml +22 -0
- data/libxlsxwriter/.gitignore +16 -1
- data/libxlsxwriter/.indent.pro +24 -0
- data/libxlsxwriter/CMakeLists.txt +156 -56
- data/libxlsxwriter/CONTRIBUTING.md +2 -2
- data/libxlsxwriter/Changes.txt +344 -2
- data/libxlsxwriter/LICENSE.txt +66 -8
- data/libxlsxwriter/Makefile +151 -54
- data/libxlsxwriter/Package.swift +42 -0
- data/libxlsxwriter/Readme.md +4 -2
- data/libxlsxwriter/build.zig +324 -0
- data/libxlsxwriter/build.zig.zon +11 -0
- data/libxlsxwriter/cmake/FindMINIZIP.cmake +3 -3
- data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +6 -0
- data/libxlsxwriter/include/xlsxwriter/app.h +2 -1
- data/libxlsxwriter/include/xlsxwriter/chart.h +236 -32
- data/libxlsxwriter/include/xlsxwriter/chartsheet.h +7 -7
- data/libxlsxwriter/include/xlsxwriter/comment.h +76 -0
- data/libxlsxwriter/include/xlsxwriter/common.h +111 -50
- data/libxlsxwriter/include/xlsxwriter/content_types.h +8 -1
- data/libxlsxwriter/include/xlsxwriter/core.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/custom.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/drawing.h +11 -20
- data/libxlsxwriter/include/xlsxwriter/format.h +121 -8
- data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/metadata.h +49 -0
- data/libxlsxwriter/include/xlsxwriter/packager.h +27 -16
- data/libxlsxwriter/include/xlsxwriter/relationships.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/shared_strings.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/styles.h +13 -7
- data/libxlsxwriter/include/xlsxwriter/table.h +51 -0
- data/libxlsxwriter/include/xlsxwriter/theme.h +1 -1
- data/libxlsxwriter/include/xlsxwriter/third_party/emyg_dtoa.h +26 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +27 -25
- data/libxlsxwriter/include/xlsxwriter/third_party/md5.h +45 -0
- data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +155 -153
- data/libxlsxwriter/include/xlsxwriter/utility.h +70 -8
- data/libxlsxwriter/include/xlsxwriter/vml.h +55 -0
- data/libxlsxwriter/include/xlsxwriter/workbook.h +218 -47
- data/libxlsxwriter/include/xlsxwriter/worksheet.h +2770 -241
- data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +12 -8
- data/libxlsxwriter/include/xlsxwriter.h +4 -2
- data/libxlsxwriter/libxlsxwriter.podspec +8 -5
- data/libxlsxwriter/src/Makefile +58 -21
- data/libxlsxwriter/src/app.c +5 -2
- data/libxlsxwriter/src/chart.c +396 -81
- data/libxlsxwriter/src/chartsheet.c +22 -22
- data/libxlsxwriter/src/comment.c +443 -0
- data/libxlsxwriter/src/content_types.c +40 -1
- data/libxlsxwriter/src/core.c +2 -2
- data/libxlsxwriter/src/custom.c +1 -1
- data/libxlsxwriter/src/drawing.c +160 -40
- data/libxlsxwriter/src/format.c +109 -25
- data/libxlsxwriter/src/hash_table.c +1 -1
- data/libxlsxwriter/src/metadata.c +283 -0
- data/libxlsxwriter/src/packager.c +794 -94
- data/libxlsxwriter/src/relationships.c +1 -1
- data/libxlsxwriter/src/shared_strings.c +2 -4
- data/libxlsxwriter/src/styles.c +353 -58
- data/libxlsxwriter/src/table.c +304 -0
- data/libxlsxwriter/src/theme.c +1 -1
- data/libxlsxwriter/src/utility.c +143 -43
- data/libxlsxwriter/src/vml.c +1062 -0
- data/libxlsxwriter/src/workbook.c +567 -77
- data/libxlsxwriter/src/worksheet.c +6668 -1462
- data/libxlsxwriter/src/xmlwriter.c +95 -5
- data/libxlsxwriter/third_party/dtoa/Makefile +42 -0
- data/libxlsxwriter/third_party/dtoa/emyg_dtoa.c +461 -0
- data/libxlsxwriter/third_party/dtoa/emyg_dtoa.h +26 -0
- data/libxlsxwriter/third_party/md5/Makefile +42 -0
- data/libxlsxwriter/third_party/md5/md5.c +291 -0
- data/libxlsxwriter/third_party/md5/md5.h +45 -0
- data/libxlsxwriter/third_party/minizip/Makefile +3 -8
- data/libxlsxwriter/third_party/minizip/Makefile.orig +8 -4
- data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +1 -1
- data/libxlsxwriter/third_party/minizip/configure.ac +1 -1
- data/libxlsxwriter/third_party/minizip/crypt.h +13 -16
- data/libxlsxwriter/third_party/minizip/ioapi.c +31 -57
- data/libxlsxwriter/third_party/minizip/ioapi.h +31 -23
- data/libxlsxwriter/third_party/minizip/iowin32.c +29 -45
- data/libxlsxwriter/third_party/minizip/iowin32.h +4 -4
- data/libxlsxwriter/third_party/minizip/miniunz.c +29 -56
- data/libxlsxwriter/third_party/minizip/minizip.c +38 -49
- data/libxlsxwriter/third_party/minizip/mztools.c +1 -7
- data/libxlsxwriter/third_party/minizip/unzip.c +202 -342
- data/libxlsxwriter/third_party/minizip/unzip.h +74 -74
- data/libxlsxwriter/third_party/minizip/zip.c +165 -218
- data/libxlsxwriter/third_party/minizip/zip.h +164 -154
- data/libxlsxwriter/third_party/tmpfileplus/Makefile +3 -3
- data/libxlsxwriter/version.txt +1 -1
- data/test/auto_width_test.rb +20 -0
- data/test/default_format_test.rb +1 -1
- data/test/validations_test.rb +3 -3
- data/test/worksheet_test.rb +6 -1
- metadata +33 -7
- data/libxlsxwriter/.travis.yml +0 -37
@@ -47,6 +47,24 @@
|
|
47
47
|
# during configuration. This may produce bugs while cross-
|
48
48
|
# compiling or using MinGW/MSYS.
|
49
49
|
#
|
50
|
+
# USE_DTOA_LIBRARY
|
51
|
+
# Use the third party emyg_dtoa() library (default off). The
|
52
|
+
# emyg_dtoa() library is used to avoid sprintf double issues with
|
53
|
+
# different locale settings. To enable this library, pass
|
54
|
+
# `-DUSE_DTOA_LIBRARY=ON` during configuration.
|
55
|
+
#
|
56
|
+
# USE_NO_MD5
|
57
|
+
# Compile without third party MD5 support. This will turn off the
|
58
|
+
# functionality of avoiding duplicate image files in the output xlsx
|
59
|
+
# file. To enable this option pass `-DUSE_NO_MD5=ON` during
|
60
|
+
# configuration.
|
61
|
+
#
|
62
|
+
# USE_OPENSSL_MD5 Compile with OpenSSL MD5 support. This will link
|
63
|
+
# against libcrypto for MD5 support rather than using the local MD5
|
64
|
+
# support. MD5 support is required to avoid duplicate image files in
|
65
|
+
# the output xlsx file. To enable this option pass
|
66
|
+
# `-DUSE_OPENSSL_MD5=ON` during configuration.
|
67
|
+
#
|
50
68
|
# USE_STATIC_MSVC_RUNTIME
|
51
69
|
# Use the static msvc runtime library when compiling with msvc (default off)
|
52
70
|
# To enable, pass `-DUSE_STATIC_MSVC_RUNTIME` during configuration.
|
@@ -88,24 +106,39 @@ else()
|
|
88
106
|
cmake_minimum_required(VERSION 3.1)
|
89
107
|
endif()
|
90
108
|
|
91
|
-
SET(
|
109
|
+
SET(XLSX_PROJECT_NAME "xlsxwriter" CACHE STRING "Optional project and binary name")
|
92
110
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
93
|
-
project(${
|
111
|
+
project(${XLSX_PROJECT_NAME} C)
|
94
112
|
enable_testing()
|
95
113
|
|
114
|
+
# POLICY
|
115
|
+
# ------
|
116
|
+
|
117
|
+
# The use of the word ZLIB_ROOT should still work prior to "3.12.0",
|
118
|
+
# just it's been generalized for all packages now. Just set the policy
|
119
|
+
# to new, so we use it, and it will be used prior to 3.12 anyway.
|
120
|
+
if(${CMAKE_VERSION} VERSION_GREATER "3.12" OR ${CMAKE_VERSION} VERSION_EQUAL "3.12")
|
121
|
+
cmake_policy(SET CMP0074 NEW)
|
122
|
+
endif()
|
123
|
+
|
96
124
|
# OPTIONS
|
97
125
|
# -------
|
98
|
-
|
99
126
|
SET(ZLIB_ROOT "" CACHE STRING "Optional root for the ZLIB installation")
|
100
127
|
|
101
128
|
option(BUILD_TESTS "Build libxlsxwriter tests" OFF)
|
102
129
|
option(BUILD_EXAMPLES "Build libxlsxwriter examples" OFF)
|
103
130
|
option(USE_SYSTEM_MINIZIP "Use system minizip installation" OFF)
|
104
131
|
option(USE_STANDARD_TMPFILE "Use the C standard library's tmpfile()" OFF)
|
132
|
+
option(USE_NO_MD5 "Build libxlsxwriter without third party MD5 lib" OFF)
|
133
|
+
option(USE_OPENSSL_MD5 "Build libxlsxwriter with the OpenSSL MD5 lib" OFF)
|
134
|
+
option(USE_MEM_FILE "Use fmemopen()/open_memstream() in place of temporary files" OFF)
|
105
135
|
option(IOAPI_NO_64 "Disable 64-bit filesystem support" OFF)
|
136
|
+
option(USE_DTOA_LIBRARY "Use the locale independent third party Milo Yip DTOA library" OFF)
|
137
|
+
|
106
138
|
if(MSVC)
|
107
139
|
option(USE_STATIC_MSVC_RUNTIME "Use the static runtime library" OFF)
|
108
140
|
endif()
|
141
|
+
|
109
142
|
if(DEFINED ENV{${ZLIB_ROOT}})
|
110
143
|
set(ZLIB_ROOT $ENV{ZLIB_ROOT})
|
111
144
|
endif()
|
@@ -116,7 +149,6 @@ endif()
|
|
116
149
|
|
117
150
|
# CONFIGURATIONS
|
118
151
|
# --------------
|
119
|
-
|
120
152
|
if(USE_SYSTEM_MINIZIP)
|
121
153
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_SYSTEM_MINIZIP)
|
122
154
|
endif()
|
@@ -125,6 +157,25 @@ if(USE_STANDARD_TMPFILE)
|
|
125
157
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_STANDARD_TMPFILE)
|
126
158
|
endif()
|
127
159
|
|
160
|
+
if(NOT USE_OPENSSL_MD5 AND USE_NO_MD5)
|
161
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_NO_MD5)
|
162
|
+
endif()
|
163
|
+
|
164
|
+
if(USE_OPENSSL_MD5)
|
165
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_OPENSSL_MD5)
|
166
|
+
if(NOT MSVC)
|
167
|
+
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations")
|
168
|
+
endif()
|
169
|
+
endif()
|
170
|
+
|
171
|
+
if(USE_MEM_FILE OR USE_FMEMOPEN)
|
172
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_FMEMOPEN)
|
173
|
+
endif()
|
174
|
+
|
175
|
+
if(USE_DTOA_LIBRARY)
|
176
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_DTOA_LIBRARY)
|
177
|
+
endif()
|
178
|
+
|
128
179
|
if(NOT BUILD_SHARED_LIBS)
|
129
180
|
if(UNIX)
|
130
181
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
@@ -132,15 +183,13 @@ if(NOT BUILD_SHARED_LIBS)
|
|
132
183
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static -static-libgcc -Wno-char-subscripts -Wno-long-long")
|
133
184
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS USE_FILE32API)
|
134
185
|
elseif(MSVC)
|
135
|
-
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /
|
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")
|
186
|
+
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /Fd\"${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb\"")
|
187
|
+
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /Ox /Zi /Fd\"${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb\"")
|
188
|
+
set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL} /Zi /Fd\"${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb\"")
|
189
|
+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /Fd\"${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb\"")
|
139
190
|
endif()
|
140
191
|
endif()
|
141
192
|
|
142
|
-
message(status "BEFORE: ${CMAKE_C_FLAGS_DEBUG}")
|
143
|
-
|
144
193
|
if(MSVC AND USE_STATIC_MSVC_RUNTIME)
|
145
194
|
foreach(flag_var CMAKE_C_FLAGS
|
146
195
|
CMAKE_C_FLAGS_DEBUG
|
@@ -153,33 +202,37 @@ if(MSVC AND USE_STATIC_MSVC_RUNTIME)
|
|
153
202
|
endforeach()
|
154
203
|
endif()
|
155
204
|
|
205
|
+
# Configure pkg-config
|
206
|
+
file(READ "include/xlsxwriter.h" ver)
|
207
|
+
|
208
|
+
string(REGEX MATCH "LXW_VERSION \"([^\"]+)\"" _ ${ver})
|
209
|
+
set(VERSION ${CMAKE_MATCH_1})
|
210
|
+
string(REGEX MATCH "LXW_SOVERSION \"([^\"]+)\"" _ ${ver})
|
211
|
+
set(SOVERSION ${CMAKE_MATCH_1})
|
212
|
+
set(PREFIX ${CMAKE_INSTALL_PREFIX})
|
213
|
+
|
214
|
+
configure_file(dev/release/pkg-config.txt xlsxwriter.pc @ONLY)
|
215
|
+
|
156
216
|
# INCLUDES
|
157
217
|
# --------
|
158
|
-
|
159
218
|
enable_language(CXX)
|
160
219
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
|
161
220
|
|
162
221
|
# ZLIB
|
163
|
-
find_package(ZLIB
|
222
|
+
find_package(ZLIB "1.0" REQUIRED)
|
164
223
|
list(APPEND LXW_PRIVATE_INCLUDE_DIRS ${ZLIB_INCLUDE_DIRS})
|
165
224
|
message("zlib version: " ${ZLIB_VERSION})
|
166
225
|
|
167
226
|
# MINIZIP
|
168
227
|
if (USE_SYSTEM_MINIZIP)
|
169
|
-
find_package(MINIZIP
|
228
|
+
find_package(MINIZIP "1.0" REQUIRED)
|
170
229
|
list(APPEND LXW_PRIVATE_INCLUDE_DIRS ${MINIZIP_INCLUDE_DIRS})
|
171
230
|
endif()
|
172
231
|
|
173
232
|
# LIBRARY
|
174
233
|
# -------
|
175
|
-
|
176
234
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS NOCRYPT NOUNCRYPT)
|
177
235
|
|
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
236
|
# Ensure CRT Secure warnings are disabled
|
184
237
|
if(MSVC)
|
185
238
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS _CRT_SECURE_NO_WARNINGS)
|
@@ -190,27 +243,64 @@ if(BUILD_TESTS)
|
|
190
243
|
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS TESTING)
|
191
244
|
endif()
|
192
245
|
|
246
|
+
# Define "LXW_BIG_ENDIAN" macro on big-endian architectures
|
247
|
+
include(TestBigEndian)
|
248
|
+
TEST_BIG_ENDIAN(LXW_TARGET_BIG_ENDIAN)
|
249
|
+
if(LXW_TARGET_BIG_ENDIAN)
|
250
|
+
list(APPEND LXW_PRIVATE_COMPILE_DEFINITIONS LXW_BIG_ENDIAN)
|
251
|
+
endif()
|
252
|
+
|
193
253
|
file(GLOB LXW_SOURCES src/*.c)
|
194
254
|
file(GLOB_RECURSE LXW_HEADERS RELATIVE include *.h)
|
255
|
+
|
195
256
|
if(NOT USE_SYSTEM_MINIZIP)
|
196
257
|
list(APPEND LXW_SOURCES third_party/minizip/ioapi.c third_party/minizip/zip.c)
|
197
258
|
if(MSVC)
|
198
259
|
list(APPEND LXW_SOURCES third_party/minizip/iowin32.c)
|
199
260
|
endif()
|
200
261
|
endif()
|
262
|
+
|
201
263
|
if (NOT USE_STANDARD_TMPFILE)
|
202
264
|
list(APPEND LXW_SOURCES third_party/tmpfileplus/tmpfileplus.c)
|
203
265
|
endif()
|
204
266
|
|
267
|
+
if(NOT USE_OPENSSL_MD5 AND NOT USE_NO_MD5)
|
268
|
+
list(APPEND LXW_SOURCES third_party/md5/md5.c)
|
269
|
+
endif()
|
270
|
+
|
271
|
+
if(USE_OPENSSL_MD5)
|
272
|
+
find_package(OpenSSL REQUIRED)
|
273
|
+
if(OpenSSL_FOUND)
|
274
|
+
include_directories(${OPENSSL_INCLUDE_DIR})
|
275
|
+
message(STATUS "OpenSSL version: ${OPENSSL_VERSION}")
|
276
|
+
endif()
|
277
|
+
endif()
|
278
|
+
|
279
|
+
if (USE_DTOA_LIBRARY)
|
280
|
+
list(APPEND LXW_SOURCES third_party/dtoa/emyg_dtoa.c)
|
281
|
+
endif()
|
282
|
+
|
205
283
|
set(LXW_PROJECT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
206
284
|
set(LXW_LIB_DIR "${LXW_PROJECT_DIR}/lib")
|
207
285
|
add_library(${PROJECT_NAME} "")
|
286
|
+
set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${SOVERSION})
|
208
287
|
target_sources(${PROJECT_NAME}
|
209
288
|
PRIVATE ${LXW_SOURCES}
|
210
289
|
PUBLIC ${LXW_HEADERS}
|
211
290
|
)
|
212
|
-
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC ${ZLIB_LIBRARIES} ${MINIZIP_LIBRARIES})
|
291
|
+
target_link_libraries(${PROJECT_NAME} LINK_PUBLIC ${ZLIB_LIBRARIES} ${MINIZIP_LIBRARIES} ${LIB_CRYPTO} ${OPENSSL_CRYPTO_LIBRARY})
|
213
292
|
target_compile_definitions(${PROJECT_NAME} PRIVATE ${LXW_PRIVATE_COMPILE_DEFINITIONS})
|
293
|
+
|
294
|
+
# /utf-8 needs VS2015 Update 2 or above.
|
295
|
+
# In CMake 3.7 and above, we can use (MSVC_VERSION GREATER_EQUAL 1900) here.
|
296
|
+
if(MSVC AND NOT (MSVC_VERSION LESS 1900))
|
297
|
+
target_compile_options(${PROJECT_NAME} PRIVATE /utf-8)
|
298
|
+
endif()
|
299
|
+
|
300
|
+
if (WINDOWSSTORE)
|
301
|
+
target_compile_definitions(${PROJECT_NAME} PRIVATE -DIOWIN32_USING_WINRT_API)
|
302
|
+
endif()
|
303
|
+
|
214
304
|
target_include_directories(${PROJECT_NAME}
|
215
305
|
PRIVATE ${LXW_PRIVATE_INCLUDE_DIRS}
|
216
306
|
PUBLIC include include/xlsxwriter
|
@@ -225,6 +315,7 @@ target_include_directories(${PROJECT_NAME}
|
|
225
315
|
# sources Name of variable holding source files
|
226
316
|
# target Test name
|
227
317
|
#
|
318
|
+
|
228
319
|
macro(CreateTest sources target)
|
229
320
|
set(output_name xlsxwriter_${target})
|
230
321
|
set(dependencies ${output_name})
|
@@ -238,7 +329,6 @@ macro(CreateTest sources target)
|
|
238
329
|
)
|
239
330
|
endmacro(CreateTest)
|
240
331
|
|
241
|
-
|
242
332
|
file(GLOB LXW_UTILITY_SOURCES test/unit/utility/test*.c)
|
243
333
|
file(GLOB LXW_XMLWRITER_SOURCES test/unit/xmlwriter/test*.c)
|
244
334
|
file(GLOB LXW_WORKSHEET_SOURCES test/unit/worksheet/test*.c)
|
@@ -255,6 +345,8 @@ file(GLOB LXW_CHART_SOURCES test/unit/chart/test*.c)
|
|
255
345
|
file(GLOB LXW_CUSTOM_SOURCES test/unit/custom/test*.c)
|
256
346
|
file(GLOB LXW_FUNCTIONAL_SOURCES test/functional/src/*.c)
|
257
347
|
|
348
|
+
if(NOT MSVC)
|
349
|
+
# Skip unit tests on Windows since ctest.h doesn't support it.
|
258
350
|
set(LXW_UNIT_SOURCES
|
259
351
|
test/unit/test_all.c
|
260
352
|
${LXW_UTILITY_SOURCES}
|
@@ -272,25 +364,52 @@ set(LXW_UNIT_SOURCES
|
|
272
364
|
${LXW_CHART_SOURCES}
|
273
365
|
${LXW_CUSTOM_SOURCES}
|
274
366
|
)
|
367
|
+
else()
|
368
|
+
set(LXW_UNIT_SOURCES
|
369
|
+
test/cpp/test_compilation.cpp
|
370
|
+
)
|
371
|
+
endif()
|
275
372
|
|
276
373
|
if(BUILD_TESTS)
|
277
374
|
# unit tests
|
278
375
|
CreateTest(LXW_UNIT_SOURCES unit)
|
279
376
|
|
280
377
|
# functional tests
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
378
|
+
find_package(Python COMPONENTS Interpreter REQUIRED)
|
379
|
+
find_program(Pytest_EXECUTABLE NAMES pytest)
|
380
|
+
|
381
|
+
if (NOT Pytest_EXECUTABLE)
|
382
|
+
message("Please install the Python pytest library to run functional tests:")
|
383
|
+
message(" pip install pytest\n")
|
384
|
+
endif()
|
385
|
+
|
386
|
+
foreach(source ${LXW_FUNCTIONAL_SOURCES})
|
387
|
+
get_filename_component(basename ${source} NAME_WE)
|
388
|
+
add_executable(${basename} ${source})
|
389
|
+
target_link_libraries(${basename} xlsxwriter)
|
390
|
+
set_target_properties(${basename} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "test/functional/src")
|
391
|
+
endforeach(source)
|
392
|
+
|
393
|
+
add_custom_command(TARGET xlsxwriter_unit POST_BUILD
|
394
|
+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/test/functional test/functional
|
395
|
+
)
|
396
|
+
|
397
|
+
if(USE_NO_MD5)
|
398
|
+
add_test(NAME functional
|
399
|
+
COMMAND pytest -v test/functional -m "not skipif"
|
400
|
+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
401
|
+
)
|
402
|
+
else()
|
403
|
+
add_test(NAME functional
|
404
|
+
COMMAND pytest -v test/functional
|
405
|
+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
406
|
+
)
|
407
|
+
endif()
|
408
|
+
|
289
409
|
endif()
|
290
410
|
|
291
411
|
# EXAMPLES
|
292
412
|
# --------
|
293
|
-
|
294
413
|
file(GLOB LXW_EXAMPLE_SOURCES examples/*.c)
|
295
414
|
|
296
415
|
if(BUILD_EXAMPLES)
|
@@ -298,41 +417,22 @@ if(BUILD_EXAMPLES)
|
|
298
417
|
get_filename_component(basename ${source} NAME_WE)
|
299
418
|
add_executable(${basename} ${source})
|
300
419
|
target_link_libraries(${basename} ${PROJECT_NAME})
|
420
|
+
set_target_properties(${basename} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "examples")
|
301
421
|
endforeach(source)
|
302
422
|
endif()
|
303
423
|
|
304
424
|
# INSTALL
|
305
425
|
# -------
|
306
|
-
|
307
426
|
include(GNUInstallDirs)
|
308
427
|
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
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)
|
428
|
+
install(TARGETS ${PROJECT_NAME}
|
429
|
+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
430
|
+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
431
|
+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
432
|
+
)
|
334
433
|
install(FILES include/xlsxwriter.h DESTINATION include)
|
335
434
|
install(DIRECTORY include/xlsxwriter
|
336
435
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
337
436
|
FILES_MATCHING PATTERN "*.h"
|
338
437
|
)
|
438
|
+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/xlsxwriter.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
@@ -181,9 +181,9 @@ If you have `valgrind` installed you can use the test suite to check for memory
|
|
181
181
|
```
|
182
182
|
|
183
183
|
When you push your changes they will also be tested automatically using
|
184
|
-
[
|
184
|
+
[GitHub Actions][actions].
|
185
185
|
|
186
|
-
[
|
186
|
+
[actions]: https://github.com/jmcnamara/libxlsxwriter/actions
|
187
187
|
[pytest]: http://pytest.org/
|
188
188
|
|
189
189
|
|