fast_excel 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.md +9 -0
  5. data/Gemfile.lock +16 -16
  6. data/README.md +1 -1
  7. data/Rakefile +1 -1
  8. data/fast_excel.gemspec +1 -1
  9. data/lib/fast_excel.rb +21 -5
  10. data/lib/fast_excel/binding/format.rb +3 -3
  11. data/libxlsxwriter/.drone.yml +27 -0
  12. data/libxlsxwriter/.indent.pro +3 -0
  13. data/libxlsxwriter/.travis.yml +12 -0
  14. data/libxlsxwriter/CMakeLists.txt +348 -0
  15. data/libxlsxwriter/Changes.txt +78 -0
  16. data/libxlsxwriter/LICENSE.txt +65 -4
  17. data/libxlsxwriter/Makefile +27 -7
  18. data/libxlsxwriter/Readme.md +2 -0
  19. data/libxlsxwriter/appveyor.yml +65 -0
  20. data/libxlsxwriter/cmake/FindMINIZIP.cmake +121 -0
  21. data/libxlsxwriter/cmake/FindPackage.cmake +183 -0
  22. data/libxlsxwriter/cmake/FindZLIB.cmake +123 -0
  23. data/libxlsxwriter/cmake/i686-toolchain.cmake +7 -0
  24. data/libxlsxwriter/cocoapods/libxlsxwriter-umbrella.h +1 -1
  25. data/libxlsxwriter/cocoapods/libxlsxwriter.modulemap +2 -2
  26. data/libxlsxwriter/include/xlsxwriter.h +2 -2
  27. data/libxlsxwriter/include/xlsxwriter/app.h +1 -1
  28. data/libxlsxwriter/include/xlsxwriter/chart.h +109 -8
  29. data/libxlsxwriter/include/xlsxwriter/common.h +10 -2
  30. data/libxlsxwriter/include/xlsxwriter/content_types.h +1 -1
  31. data/libxlsxwriter/include/xlsxwriter/core.h +1 -1
  32. data/libxlsxwriter/include/xlsxwriter/custom.h +1 -1
  33. data/libxlsxwriter/include/xlsxwriter/drawing.h +1 -1
  34. data/libxlsxwriter/include/xlsxwriter/format.h +6 -6
  35. data/libxlsxwriter/include/xlsxwriter/hash_table.h +1 -1
  36. data/libxlsxwriter/include/xlsxwriter/packager.h +6 -1
  37. data/libxlsxwriter/include/xlsxwriter/relationships.h +1 -1
  38. data/libxlsxwriter/include/xlsxwriter/shared_strings.h +1 -1
  39. data/libxlsxwriter/include/xlsxwriter/styles.h +2 -2
  40. data/libxlsxwriter/include/xlsxwriter/theme.h +1 -1
  41. data/libxlsxwriter/include/xlsxwriter/utility.h +11 -5
  42. data/libxlsxwriter/include/xlsxwriter/workbook.h +3 -3
  43. data/libxlsxwriter/include/xlsxwriter/worksheet.h +517 -39
  44. data/libxlsxwriter/include/xlsxwriter/xmlwriter.h +2 -2
  45. data/libxlsxwriter/libxlsxwriter.podspec +4 -2
  46. data/libxlsxwriter/src/Makefile +30 -5
  47. data/libxlsxwriter/src/app.c +1 -1
  48. data/libxlsxwriter/src/chart.c +76 -19
  49. data/libxlsxwriter/src/content_types.c +1 -1
  50. data/libxlsxwriter/src/core.c +10 -10
  51. data/libxlsxwriter/src/custom.c +2 -2
  52. data/libxlsxwriter/src/drawing.c +1 -1
  53. data/libxlsxwriter/src/format.c +3 -3
  54. data/libxlsxwriter/src/hash_table.c +1 -1
  55. data/libxlsxwriter/src/packager.c +20 -7
  56. data/libxlsxwriter/src/relationships.c +1 -1
  57. data/libxlsxwriter/src/shared_strings.c +1 -1
  58. data/libxlsxwriter/src/styles.c +4 -4
  59. data/libxlsxwriter/src/theme.c +1 -1
  60. data/libxlsxwriter/src/utility.c +41 -1
  61. data/libxlsxwriter/src/workbook.c +8 -6
  62. data/libxlsxwriter/src/worksheet.c +748 -31
  63. data/libxlsxwriter/src/xmlwriter.c +2 -2
  64. data/libxlsxwriter/third_party/minizip/Makefile +6 -1
  65. data/libxlsxwriter/version.txt +1 -1
  66. data/test/reopen_test.rb +22 -0
  67. data/test/test_helper.rb +8 -5
  68. data/test/validations_test.rb +27 -0
  69. metadata +11 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9c054001c6ea3e0473ef11cd51b9471186e23fb4
4
- data.tar.gz: d23f1f61c7087f3f79601ed57f70a408ad0cb684
3
+ metadata.gz: c0913c4454d805190410b1ba3657913a0f5dc9c1
4
+ data.tar.gz: a1d3fe3a3f3ee227fcaa900791bb34c0320709e7
5
5
  SHA512:
6
- metadata.gz: 6a549bc98f588c5ac6cc2a4e466b0425b0e198e5799f6fc9b3ba5ddd96ba2f2fd7c47ff5ce86f69232200362acb83e95ec2a0c475f7536a755d7dcd24a36fd06
7
- data.tar.gz: 5ebbae552b28e607b4549145872f564b26d3e6d01cf1509ebeb79fdde09510423182a2c879129780a0f41d152fedbd264abe0580b9c051c5bb860a683b756a6f
6
+ metadata.gz: 9b6761029c771b2fcc9444e5b896c64282e12ee4dc19b9eb316481f86aca2543f70156c79159966dd50b6488dccd8bc32292725101bfd6068044b1d938b709e9
7
+ data.tar.gz: 7d89bc8a36f46ab01cd74826dc411233e6b1f532d0eaa1762e296e4c1f71b7b5d9f42ba706c2445d98ff87d919cf91bcf2e4b8c9a6f299991eb7aa27b37c3a13
data/.gitignore CHANGED
@@ -11,3 +11,6 @@ libxlsxwriter/dev
11
11
  libxlsxwriter/docs
12
12
  libxlsxwriter/examples
13
13
  libxlsxwriter/test
14
+
15
+ ext/fast_excel/Makefile
16
+ ext/fast_excel/text_width_ext.bundle
@@ -19,6 +19,10 @@ matrix:
19
19
  rvm: 2.4.0
20
20
  - os: osx
21
21
  rvm: 2.4.0
22
+ - os: linux
23
+ rvm: 2.5.0
24
+ - os: osx
25
+ rvm: 2.5.0
22
26
  fast_finish: true
23
27
 
24
28
  script:
@@ -1,3 +1,12 @@
1
+ #### Version 0.2.5 - 22 jun 2018
2
+
3
+ * Update libxlsxwriter to 0.7.7
4
+
5
+ #### Version 0.2.4 - 13 mar 2018
6
+
7
+ * Update libxlsxwriter to 0.7.6
8
+ * Don’t crash process when duplicated worksheet name
9
+
1
10
  #### Version 0.2.3 - 27 oct 2017
2
11
 
3
12
  * Allow Date along with DateTime in write_value (thanks to @noxern)
@@ -6,17 +6,17 @@ GIT
6
6
 
7
7
  GIT
8
8
  remote: https://github.com/randym/axlsx.git
9
- revision: c8ac844572b25fda358cc01d2104720c4c42f450
9
+ revision: 73d9477fc33706f4a186e92794134248fb389183
10
10
  specs:
11
- axlsx (2.1.0.pre)
12
- htmlentities (~> 4.3.4)
11
+ axlsx (3.0.0.pre)
12
+ htmlentities (~> 4.3, >= 4.3.4)
13
13
  mimemagic (~> 0.3)
14
- nokogiri (>= 1.6.6)
15
- rubyzip (>= 1.2.1)
14
+ nokogiri (~> 1.8, >= 1.8.2)
15
+ rubyzip (~> 1.2, >= 1.2.1)
16
16
 
17
17
  GIT
18
18
  remote: https://github.com/roo-rb/roo.git
19
- revision: 85c2736b0ea1c984391688c5aeb4acf85f225405
19
+ revision: 3ed05e1caef0ce3c5db5c19f1fa14e6f74193079
20
20
  specs:
21
21
  roo (2.7.1)
22
22
  nokogiri (~> 1)
@@ -28,24 +28,24 @@ GEM
28
28
  ansi (1.5.0)
29
29
  benchmark-ips (2.7.2)
30
30
  builder (3.2.3)
31
- ffi (1.9.18)
31
+ ffi (1.9.23)
32
32
  ffi_gen (1.2.0)
33
33
  ffi (~> 1.0)
34
34
  htmlentities (4.3.4)
35
35
  mimemagic (0.3.2)
36
- mini_portile2 (2.2.0)
37
- minitest (5.10.2)
38
- minitest-reporters (1.1.14)
36
+ mini_portile2 (2.3.0)
37
+ minitest (5.11.3)
38
+ minitest-reporters (1.1.19)
39
39
  ansi
40
40
  builder
41
41
  minitest (>= 5.0)
42
42
  ruby-progressbar
43
- nokogiri (1.8.0)
44
- mini_portile2 (~> 2.2.0)
45
- rake (12.0.0)
46
- ruby-progressbar (1.8.1)
43
+ nokogiri (1.8.2)
44
+ mini_portile2 (~> 2.3.0)
45
+ rake (12.3.0)
46
+ ruby-progressbar (1.9.0)
47
47
  rubyzip (1.2.1)
48
- write_xlsx (0.85.1)
48
+ write_xlsx (0.85.3)
49
49
  rubyzip (>= 1.0.0)
50
50
  zip-zip
51
51
  zip-zip (0.3)
@@ -67,4 +67,4 @@ DEPENDENCIES
67
67
  write_xlsx
68
68
 
69
69
  BUNDLED WITH
70
- 1.15.1
70
+ 1.16.1
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Ultra Fast Excel Writter for Ruby
1
+ # Ultra Fast Excel Writer for Ruby
2
2
 
3
3
  ```ruby
4
4
  require 'fast_excel'
data/Rakefile CHANGED
@@ -21,4 +21,4 @@ task :examples do
21
21
  Dir.glob('examples/**/*.rb').each do |file|
22
22
  require './' + file.sub(/\.rb$/, '')
23
23
  end
24
- end
24
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "fast_excel"
3
- s.version = "0.2.3"
3
+ s.version = "0.2.5"
4
4
  s.author = ["Pavel Evstigneev"]
5
5
  s.email = ["pavel.evst@gmail.com"]
6
6
  s.homepage = "https://github.com/paxa/fast_excel"
@@ -13,16 +13,16 @@ module FastExcel
13
13
 
14
14
  def self.open(filename = nil, constant_memory: false, default_format: nil)
15
15
  tmp_file = false
16
- unless filename
16
+ if filename
17
+ if File.exist?(filename)
18
+ raise ArgumentError, "File '#{filename}' already exists. FastExcel can not open existing files, only create new files"
19
+ end
20
+ else
17
21
  require 'tmpdir'
18
22
  filename = "#{Dir.mktmpdir}/fast_excel.xlsx"
19
23
  tmp_file = true
20
24
  end
21
25
 
22
- unless filename
23
- raise ArgumentError, "filename is required"
24
- end
25
-
26
26
  filename = filename.to_s if defined?(Pathname) && filename.is_a?(Pathname)
27
27
 
28
28
  workbook = if constant_memory
@@ -323,6 +323,7 @@ module FastExcel
323
323
 
324
324
  def initialize(struct)
325
325
  @is_open = true
326
+ @sheet_names = Set.new
326
327
  super(struct)
327
328
  end
328
329
 
@@ -347,8 +348,23 @@ module FastExcel
347
348
  end
348
349
 
349
350
  def add_worksheet(sheetname = nil)
351
+ sheetname = nil if sheetname == ""
352
+
353
+ if !sheetname.nil? && @sheet_names.include?(sheetname)
354
+ raise ArgumentError, "Worksheet name '#{sheetname}' is already in use"
355
+ end
356
+ @sheet_names << sheetname
357
+
350
358
  sheet = super
351
359
  sheet.workbook = self
360
+
361
+ sheet
362
+ end
363
+
364
+ def get_worksheet_by_name(name)
365
+ sheet = super(name)
366
+ sheet.workbook = self
367
+
352
368
  sheet
353
369
  end
354
370
 
@@ -700,7 +700,7 @@ module Libxlsxwriter
700
700
  :font_index, :uint16,
701
701
  :has_font, :uchar,
702
702
  :has_dxf_font, :uchar,
703
- :font_size, :uint16,
703
+ :font_size, :double,
704
704
  :bold, :uchar,
705
705
  :italic, :uchar,
706
706
  :font_color, :int,
@@ -786,7 +786,7 @@ module Libxlsxwriter
786
786
  # (Integer)
787
787
  class Font < FFI::Struct
788
788
  layout :font_name, [:char, 128],
789
- :font_size, :ushort,
789
+ :font_size, :double,
790
790
  :bold, :uchar,
791
791
  :italic, :uchar,
792
792
  :underline, :uchar,
@@ -904,7 +904,7 @@ module Libxlsxwriter
904
904
  # @param [Integer] size
905
905
  # @return [nil]
906
906
  # @scope class
907
- attach_function :format_set_font_size, :format_set_font_size, [Format, :ushort], :void
907
+ attach_function :format_set_font_size, :format_set_font_size, [Format, :double], :void
908
908
 
909
909
  # @method format_set_font_color(format, color)
910
910
  # @param [Format] format
@@ -0,0 +1,27 @@
1
+ build:
2
+ image: teaci/msys$$arch
3
+ pull: true
4
+ shell: msys$$arch
5
+ commands:
6
+ - if [ $$arch = 32 ]; then target=i686; fi
7
+ - if [ $$arch = 64 ]; then target=x86_64; fi
8
+ - pacman -S --needed --noconfirm --noprogressbar mingw-w64-${target}-pkg-config cmake zlib-devel
9
+ - git submodule update --init --recursive
10
+ - cmake -DBUILD_STATIC=$STATIC -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBUILD_TESTS=ON -DIOAPI_NO_64=ON .
11
+ - make -j 8
12
+ - make install
13
+ - ctest -C $BUILD_TYPE -V
14
+
15
+ matrix:
16
+ arch:
17
+ # Bug with 64-bit MSYS2 on WINE currently, disable temporarily.
18
+ # - 64
19
+ - 32
20
+
21
+ STATIC:
22
+ - OFF
23
+ - ON
24
+
25
+ BUILD_TYPE:
26
+ - Debug
27
+ - Release
@@ -53,7 +53,9 @@
53
53
  -T lxw_chart_axis_label_position
54
54
  -T lxw_chart_axis_tick_mark
55
55
  -T lxw_chart_axis_tick_position
56
+ -T lxw_chart_axis_type
56
57
  -T lxw_chart_blank
58
+ -T lxw_chart_error_bar_axis
57
59
  -T lxw_chart_error_bar_cap
58
60
  -T lxw_chart_error_bar_direction
59
61
  -T lxw_chart_error_bar_type
@@ -82,6 +84,7 @@
82
84
  -T lxw_core
83
85
  -T lxw_custom
84
86
  -T lxw_custom_property
87
+ -T lxw_data_validation
85
88
  -T lxw_datetime
86
89
  -T lxw_defined_name
87
90
  -T lxw_doc_properties
@@ -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,348 @@
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
+ if(MSVC)
220
+ if (NOT BUILD_SHARED_LIBS)
221
+ add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
222
+ COMMAND ${CMAKE_COMMAND} -E rename
223
+ ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb
224
+ $<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}.pdb
225
+ )
226
+ endif()
227
+ endif()
228
+
229
+ # TESTS
230
+ # -----
231
+
232
+ # Create test and runner.
233
+ #
234
+ # Args:
235
+ # sources Name of variable holding source files
236
+ # target Test name
237
+ #
238
+ macro(CreateTest sources target)
239
+ set(output_name xlsxwriter_${target})
240
+ set(dependencies ${output_name})
241
+
242
+ add_executable(${output_name} ${${sources}})
243
+ target_link_libraries(${output_name} ${PROJECT_NAME})
244
+ target_compile_definitions(${output_name} PRIVATE TESTING COLOR_OK)
245
+ add_test(NAME ${output_name}
246
+ COMMAND ${output_name}
247
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
248
+ )
249
+ endmacro(CreateTest)
250
+
251
+
252
+ file(GLOB LXW_UTILITY_SOURCES test/unit/utility/test*.c)
253
+ file(GLOB LXW_XMLWRITER_SOURCES test/unit/xmlwriter/test*.c)
254
+ file(GLOB LXW_WORKSHEET_SOURCES test/unit/worksheet/test*.c)
255
+ file(GLOB LXW_SST_SOURCES test/unit/sst/test*.c)
256
+ file(GLOB LXW_WORKBOOK_SOURCES test/unit/workbook/test*.c)
257
+ file(GLOB LXW_APP_SOURCES test/unit/app/test*.c)
258
+ file(GLOB LXW_CONTENTTYPES_SOURCES test/unit/content_types/test*.c)
259
+ file(GLOB LXW_CORE_SOURCES test/unit/core/test*.c)
260
+ file(GLOB LXW_RELATIONSHIPS_SOURCES test/unit/relationships/test*.c)
261
+ file(GLOB LXW_FORMAT_SOURCES test/unit/format/test*.c)
262
+ file(GLOB LXW_STYLES_SOURCES test/unit/styles/test*.c)
263
+ file(GLOB LXW_DRAWING_SOURCES test/unit/drawing/test*.c)
264
+ file(GLOB LXW_CHART_SOURCES test/unit/chart/test*.c)
265
+ file(GLOB LXW_CUSTOM_SOURCES test/unit/custom/test*.c)
266
+ file(GLOB LXW_FUNCTIONAL_SOURCES test/functional/src/*.c)
267
+
268
+ set(LXW_UNIT_SOURCES
269
+ test/unit/test_all.c
270
+ ${LXW_UTILITY_SOURCES}
271
+ ${LXW_XMLWRITER_SOURCES}
272
+ ${LXW_WORKSHEET_SOURCES}
273
+ ${LXW_SST_SOURCES}
274
+ ${LXW_WORKBOOK_SOURCES}
275
+ ${LXW_APP_SOURCES}
276
+ ${LXW_CONTENTTYPES_SOURCES}
277
+ ${LXW_CORE_SOURCES}
278
+ ${LXW_RELATIONSHIPS_SOURCES}
279
+ ${LXW_FORMAT_SOURCES}
280
+ ${LXW_STYLES_SOURCES}
281
+ ${LXW_DRAWING_SOURCES}
282
+ ${LXW_CHART_SOURCES}
283
+ ${LXW_CUSTOM_SOURCES}
284
+ )
285
+
286
+ if(BUILD_TESTS)
287
+ # unit tests
288
+ CreateTest(LXW_UNIT_SOURCES unit)
289
+
290
+ # functional tests
291
+ # WARNING: currently doesn't work, since the Python tests expect
292
+ # in-source builds
293
+ #find_program(PYTHON python)
294
+ #foreach(source ${LXW_FUNCTIONAL_SOURCES})
295
+ # get_filename_component(basename ${source} NAME_WE)
296
+ # add_executable(${basename} ${source})
297
+ # target_link_libraries(${basename} xlsxwriter)
298
+ #endforeach(source)
299
+ endif()
300
+
301
+ # EXAMPLES
302
+ # --------
303
+
304
+ file(GLOB LXW_EXAMPLE_SOURCES examples/*.c)
305
+
306
+ if(BUILD_EXAMPLES)
307
+ foreach(source ${LXW_EXAMPLE_SOURCES})
308
+ get_filename_component(basename ${source} NAME_WE)
309
+ add_executable(${basename} ${source})
310
+ target_link_libraries(${basename} ${PROJECT_NAME})
311
+ endforeach(source)
312
+ endif()
313
+
314
+ # INSTALL
315
+ # -------
316
+
317
+ include(GNUInstallDirs)
318
+
319
+ if(MSVC)
320
+ if(CMAKE_CL_64)
321
+ set(MSVC_FOLDER_PREFIX x64)
322
+ else()
323
+ set(MSVC_FOLDER_PREFIX Win32)
324
+ endif()
325
+
326
+ install(TARGETS ${PROJECT_NAME}
327
+ LIBRARY DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
328
+ ARCHIVE DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
329
+ RUNTIME DESTINATION "bin/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
330
+ )
331
+ if (NOT BUILD_SHARED_LIBS)
332
+ install(FILES $<TARGET_FILE_DIR:${PROJECT_NAME}>/${PROJECT_NAME}.pdb
333
+ DESTINATION "lib/${MSVC_FOLDER_PREFIX}/\${CMAKE_INSTALL_CONFIG_NAME}"
334
+ )
335
+ endif()
336
+
337
+ else(MSVC)
338
+ install(TARGETS ${PROJECT_NAME}
339
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
340
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
341
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
342
+ )
343
+ endif(MSVC)
344
+ install(FILES include/xlsxwriter.h DESTINATION include)
345
+ install(DIRECTORY include/xlsxwriter
346
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
347
+ FILES_MATCHING PATTERN "*.h"
348
+ )