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)
I have to override Enum_minizh8 because, there is an issues 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)]
cOverride isn't smart enough to expand defineEnum and then override.
You might want to add an actual type - what defineEnum expands to.