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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -7
  3. data/CHANGELOG.md +9 -0
  4. data/Gemfile +1 -1
  5. data/examples/example.rb +2 -0
  6. data/examples/example_date_time.rb +38 -0
  7. data/fast_excel.gemspec +2 -2
  8. data/lib/fast_excel/binding/format.rb +17 -0
  9. data/lib/fast_excel/binding/workbook.rb +39 -17
  10. data/lib/fast_excel/binding/worksheet.rb +57 -13
  11. data/lib/fast_excel/binding.rb +7 -7
  12. data/lib/fast_excel.rb +27 -20
  13. data/libxlsxwriter/.github/FUNDING.yml +1 -0
  14. data/libxlsxwriter/.github/ISSUE_TEMPLATE.md +85 -0
  15. data/libxlsxwriter/.github/PULL_REQUEST_TEMPLATE.md +130 -0
  16. data/libxlsxwriter/.github/workflows/cmake_actions.yml +48 -0
  17. data/libxlsxwriter/.github/workflows/code_style.yml +23 -0
  18. data/libxlsxwriter/.github/workflows/coverity.yml +22 -0
  19. data/libxlsxwriter/.github/workflows/make_actions.yml +52 -0
  20. data/libxlsxwriter/.github/workflows/valgrind.yml +23 -0
  21. data/libxlsxwriter/.github/workflows/windows_build.yml +54 -0
  22. data/libxlsxwriter/.github/workflows/zig_build.yml +22 -0
  23. data/libxlsxwriter/.gitignore +16 -1
  24. data/libxlsxwriter/.indent.pro +24 -0
  25. data/libxlsxwriter/CMakeLists.txt +156 -56
  26. data/libxlsxwriter/CONTRIBUTING.md +2 -2
  27. data/libxlsxwriter/Changes.txt +344 -2
  28. data/libxlsxwriter/LICENSE.txt +66 -8
  29. data/libxlsxwriter/Makefile +151 -54
  30. data/libxlsxwriter/Package.swift +42 -0
  31. data/libxlsxwriter/Readme.md +4 -2
  32. data/libxlsxwriter/build.zig +324 -0
  33. data/libxlsxwriter/build.zig.zon +11 -0
  34. data/libxlsxwriter/cmake/FindMINIZIP.cmake +3 -3
  35. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +6 -0
  36. data/libxlsxwriter/include/xlsxwriter/app.h +2 -1
  37. data/libxlsxwriter/include/xlsxwriter/chart.h +236 -32
  38. data/libxlsxwriter/include/xlsxwriter/chartsheet.h +7 -7
  39. data/libxlsxwriter/include/xlsxwriter/comment.h +76 -0
  40. data/libxlsxwriter/include/xlsxwriter/common.h +111 -50
  41. data/libxlsxwriter/include/xlsxwriter/content_types.h +8 -1
  42. data/libxlsxwriter/include/xlsxwriter/core.h +1 -1
  43. data/libxlsxwriter/include/xlsxwriter/custom.h +1 -1
  44. data/libxlsxwriter/include/xlsxwriter/drawing.h +11 -20
  45. data/libxlsxwriter/include/xlsxwriter/format.h +121 -8
  46. data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
  47. data/libxlsxwriter/include/xlsxwriter/metadata.h +49 -0
  48. data/libxlsxwriter/include/xlsxwriter/packager.h +27 -16
  49. data/libxlsxwriter/include/xlsxwriter/relationships.h +1 -1
  50. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +1 -1
  51. data/libxlsxwriter/include/xlsxwriter/styles.h +13 -7
  52. data/libxlsxwriter/include/xlsxwriter/table.h +51 -0
  53. data/libxlsxwriter/include/xlsxwriter/theme.h +1 -1
  54. data/libxlsxwriter/include/xlsxwriter/third_party/emyg_dtoa.h +26 -0
  55. data/libxlsxwriter/include/xlsxwriter/third_party/ioapi.h +27 -25
  56. data/libxlsxwriter/include/xlsxwriter/third_party/md5.h +45 -0
  57. data/libxlsxwriter/include/xlsxwriter/third_party/zip.h +155 -153
  58. data/libxlsxwriter/include/xlsxwriter/utility.h +70 -8
  59. data/libxlsxwriter/include/xlsxwriter/vml.h +55 -0
  60. data/libxlsxwriter/include/xlsxwriter/workbook.h +218 -47
  61. data/libxlsxwriter/include/xlsxwriter/worksheet.h +2770 -241
  62. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +12 -8
  63. data/libxlsxwriter/include/xlsxwriter.h +4 -2
  64. data/libxlsxwriter/libxlsxwriter.podspec +8 -5
  65. data/libxlsxwriter/src/Makefile +58 -21
  66. data/libxlsxwriter/src/app.c +5 -2
  67. data/libxlsxwriter/src/chart.c +396 -81
  68. data/libxlsxwriter/src/chartsheet.c +22 -22
  69. data/libxlsxwriter/src/comment.c +443 -0
  70. data/libxlsxwriter/src/content_types.c +40 -1
  71. data/libxlsxwriter/src/core.c +2 -2
  72. data/libxlsxwriter/src/custom.c +1 -1
  73. data/libxlsxwriter/src/drawing.c +160 -40
  74. data/libxlsxwriter/src/format.c +109 -25
  75. data/libxlsxwriter/src/hash_table.c +1 -1
  76. data/libxlsxwriter/src/metadata.c +283 -0
  77. data/libxlsxwriter/src/packager.c +794 -94
  78. data/libxlsxwriter/src/relationships.c +1 -1
  79. data/libxlsxwriter/src/shared_strings.c +2 -4
  80. data/libxlsxwriter/src/styles.c +353 -58
  81. data/libxlsxwriter/src/table.c +304 -0
  82. data/libxlsxwriter/src/theme.c +1 -1
  83. data/libxlsxwriter/src/utility.c +143 -43
  84. data/libxlsxwriter/src/vml.c +1062 -0
  85. data/libxlsxwriter/src/workbook.c +567 -77
  86. data/libxlsxwriter/src/worksheet.c +6668 -1462
  87. data/libxlsxwriter/src/xmlwriter.c +95 -5
  88. data/libxlsxwriter/third_party/dtoa/Makefile +42 -0
  89. data/libxlsxwriter/third_party/dtoa/emyg_dtoa.c +461 -0
  90. data/libxlsxwriter/third_party/dtoa/emyg_dtoa.h +26 -0
  91. data/libxlsxwriter/third_party/md5/Makefile +42 -0
  92. data/libxlsxwriter/third_party/md5/md5.c +291 -0
  93. data/libxlsxwriter/third_party/md5/md5.h +45 -0
  94. data/libxlsxwriter/third_party/minizip/Makefile +3 -8
  95. data/libxlsxwriter/third_party/minizip/Makefile.orig +8 -4
  96. data/libxlsxwriter/third_party/minizip/MiniZip64_Changes.txt +1 -1
  97. data/libxlsxwriter/third_party/minizip/configure.ac +1 -1
  98. data/libxlsxwriter/third_party/minizip/crypt.h +13 -16
  99. data/libxlsxwriter/third_party/minizip/ioapi.c +31 -57
  100. data/libxlsxwriter/third_party/minizip/ioapi.h +31 -23
  101. data/libxlsxwriter/third_party/minizip/iowin32.c +29 -45
  102. data/libxlsxwriter/third_party/minizip/iowin32.h +4 -4
  103. data/libxlsxwriter/third_party/minizip/miniunz.c +29 -56
  104. data/libxlsxwriter/third_party/minizip/minizip.c +38 -49
  105. data/libxlsxwriter/third_party/minizip/mztools.c +1 -7
  106. data/libxlsxwriter/third_party/minizip/unzip.c +202 -342
  107. data/libxlsxwriter/third_party/minizip/unzip.h +74 -74
  108. data/libxlsxwriter/third_party/minizip/zip.c +165 -218
  109. data/libxlsxwriter/third_party/minizip/zip.h +164 -154
  110. data/libxlsxwriter/third_party/tmpfileplus/Makefile +3 -3
  111. data/libxlsxwriter/version.txt +1 -1
  112. data/test/auto_width_test.rb +20 -0
  113. data/test/default_format_test.rb +1 -1
  114. data/test/validations_test.rb +3 -3
  115. data/test/worksheet_test.rb +6 -1
  116. metadata +33 -7
  117. 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(PROJECT_NAME "xlsxwriter" CACHE STRING "Optional project and binary name")
109
+ SET(XLSX_PROJECT_NAME "xlsxwriter" CACHE STRING "Optional project and binary name")
92
110
  set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
93
- project(${PROJECT_NAME} C)
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} /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")
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 REQUIRED "1.0")
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 REQUIRED "1.0")
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
- # 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)
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
- 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)
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
- [Travis CI][travis].
184
+ [GitHub Actions][actions].
185
185
 
186
- [Travis]: https://travis-ci.org/jmcnamara/libxlsxwriter/
186
+ [actions]: https://github.com/jmcnamara/libxlsxwriter/actions
187
187
  [pytest]: http://pytest.org/
188
188
 
189
189