I am trying to wrap miniz. I am using nimterop, so I created a file
miniz_wrapper.nim as follows:
import os, strutils
import nimterop/[cimport, git, paths]
const
baseDir = currentSourcePath.parentDir()/"build"
srcDir = baseDir/"project"
static:
cDebug()
cDisableCaching()
downloadUrl("https://github.com/richgel999/miniz/releases/download/2.1.0/miniz-2.1.0.zip",
outdir = srcDir)
cIncludeDir(srcDir)
cOverride:
defineEnum(Enum_minizh8)
const
TDEFL_LZ_CODE_BUF_SIZE* = (64*1024).Enum_minizh8
TDEFL_OUT_BUF_SIZE* = ((TDEFL_LZ_CODE_BUF_SIZE.int*13)/10).Enum_minizh8
TDEFL_MAX_HUFF_SYMBOLS* = (288).Enum_minizh8
TDEFL_LZ_HASH_BITS* = (15).Enum_minizh8
TDEFL_LEVEL1_HASH_SIZE_MASK* = (4095).Enum_minizh8
TDEFL_LZ_HASH_SHIFT* = ((TDEFL_LZ_HASH_BITS.int+2)/3).Enum_minizh8
TDEFL_LZ_HASH_SIZE* = (1 shl TDEFL_LZ_HASH_BITS).Enum_minizh8
# From CMakeLists
cDefine("MINIZ_API_VERSION","2")
cDefine("MINIZ_MINOR_VERSION", "1")
cDefine("MINIZ_PATCH_VERSION", "0")
cDefine("MINIZ_VERSION", "2.1.0")
#{.passC: "flags".}
#{.passL: "flags".}
cCompile(srcDir/"miniz.c")
cPlugin:
import strutils
proc onSymbol*(sym: var Symbol) {.exportc, dynlib.} =
sym.name = sym.name.strip(chars = {'_'})
cImport(srcDir/"miniz.h", recurse = true)
Run
I have to override Enum_minizh8 because, there is an
[issues](https://github.com/nimterop/nimterop/issues/131) in the type
conversion.
But now I get the following error which I don't understand:
/usr/lib/nim/core/macros.nim(586, 12) Error: redefinition of
'Enum_minizh8'; previous declaration here:
/home/jose/src/nimlang/miniz/miniz_wraper.nim(20, 14)
Why does it complains about redefinition if I am using cOverride?
If I remove line 20: ` defineEnum(Enum_minizh8)`, I get:
/home/jose/src/nimlang/miniz/miniz_wraper.nim(22, 40) Error: undeclared
field: 'Enum_minizh8' for type system.int [declared in
/usr/lib/nim/system.nim(26, 3)]