diff --git a/project.nimble b/glfw.nimble similarity index 54% rename from project.nimble rename to glfw.nimble index 8141d30..b0ceea2 100644 --- a/project.nimble +++ b/glfw.nimble @@ -2,7 +2,7 @@ version = "0.1.0" author = "Joey Yakimowich-Payne" -description = "Nimterop template" +description = "GLFW Bindings" license = "MIT" srcDir = "src" @@ -10,4 +10,4 @@ srcDir = "src" # Dependencies -requires "nim >= 1.0.6", "nimterop#head", "regex" +requires "nim >= 1.0.6", "https://github.com/jyapayne/nimterop#367ec05", "regex" diff --git a/nim.cfg b/nim.cfg deleted file mode 100644 index 664de18..0000000 --- a/nim.cfg +++ /dev/null @@ -1 +0,0 @@ --d:Project_SetVer="M.M.V" -d:Project_DL -d:Project_Static diff --git a/src/glfw.nim b/src/glfw.nim new file mode 100644 index 0000000..2c54db2 --- /dev/null +++ b/src/glfw.nim @@ -0,0 +1,3 @@ +import glfw/glfw + +export glfw diff --git a/src/project/cleansymbols.nim b/src/glfw/cleansymbols.nim similarity index 82% rename from src/project/cleansymbols.nim rename to src/glfw/cleansymbols.nim index 921b04d..c72fc98 100644 --- a/src/project/cleansymbols.nim +++ b/src/glfw/cleansymbols.nim @@ -1,6 +1,5 @@ import macros, nimterop / plugin import strutils, regex -import sets proc firstLetterLower(m: RegexMatch, s: string): string = if m.groupsCount > 0 and m.group(0).len > 0: @@ -15,13 +14,17 @@ proc nothing(m: RegexMatch, s: string): string = return s[m.group(0)[0]] const replacements = [ - re"^PREFIX_(.)", + re"^GLFW_(.)", + re"^GLFW(.)", + re"^glfw(.)", ] const underscoreReg = re"_(.)" # Symbol renaming examples proc onSymbol*(sym: var Symbol) {.exportc, dynlib.} = + if sym.name == "GLFW_CURSOR": + sym.name = "GLFW_INPUT_MODE_CURSOR" if sym.kind == nskProc or sym.kind == nskType or sym.kind == nskConst: if sym.name != "_": sym.name = sym.name.strip(chars={'_'}).replace("__", "_") @@ -32,6 +35,11 @@ proc onSymbol*(sym: var Symbol) {.exportc, dynlib.} = sym.name = sym.name.replace(rep, firstLetterLower) except: discard + elif sym.kind == nskType: + try: + sym.name = sym.name.replace(rep, camelCase) + except: + discard else: try: sym.name = sym.name.replace(rep, nothing) diff --git a/src/glfw/glfw.nim b/src/glfw/glfw.nim new file mode 100644 index 0000000..023336d --- /dev/null +++ b/src/glfw/glfw.nim @@ -0,0 +1,60 @@ +import os, strutils, strformat +import nimterop/[cimport, build, globals] + +const + ProjectCacheDir* = getProjectCacheDir("nimglfw") + baseDir = ProjectCacheDir + srcDir = baseDir / "glfw" + buildDir = srcDir / "buildcache" + symbolPluginPath = currentSourcePath.parentDir() / "cleansymbols.nim" + defs = """ + glfw3SetVer=05dd2fa + glfw3Git + glfw3Static + """ + +setDefines(defs.splitLines()) + +{.passL: "-lpthread".} +getHeader( + "glfw3.h", + giturl = "https://github.com/glfw/glfw", + outdir = srcDir, + altNames = "glfw,glfw3", + cmakeFlags = &"-DCMAKE_C_FLAGS=-lpthread" +) + +static: + discard + # cSkipSymbol @[] + # cDebug() + # cDisableCaching() + +# cOverride: +# discard + +cIncludeDir(srcDir/"include"/"GLFW") +cPluginPath(symbolPluginPath) + +when isDefined(glfw3Static): + cImport(srcDir/"include"/"GLFW"/"glfw3.h", recurse = true, flags = "-f=ast2 -E__,_ -F__,_ -H") +else: + cImport(srcDir/"include"/"GLFW"/"glfw3.h", recurse = true, dynlib = "glfw3LPath", flags = "-f=ast2 -E__,_ -F__,_ -H") + +const + KEY_LAST* = KEY_MENU + MOUSE_BUTTON_LAST* = MOUSE_BUTTON_8 + MOUSE_BUTTON_LEFT* = MOUSE_BUTTON_1 + MOUSE_BUTTON_RIGHT* = MOUSE_BUTTON_2 + MOUSE_BUTTON_MIDDLE* = MOUSE_BUTTON_3 + JOYSTICK_LAST* = JOYSTICK_16 + GAMEPAD_BUTTON_LAST* = GAMEPAD_BUTTON_DPAD_LEFT + GAMEPAD_BUTTON_CROSS* = GAMEPAD_BUTTON_A + GAMEPAD_BUTTON_CIRCLE* = GAMEPAD_BUTTON_B + GAMEPAD_BUTTON_SQUARE* = GAMEPAD_BUTTON_X + GAMEPAD_BUTTON_TRIANGLE* = GAMEPAD_BUTTON_Y + GAMEPAD_AXIS_LAST* = GAMEPAD_AXIS_RIGHT_TRIGGER + OPENGL_DEBUG_CONTEXT* = CONTEXT_DEBUG + HRESIZE_CURSOR* = RESIZE_EW_CURSOR + VRESIZE_CURSOR* = RESIZE_NS_CURSOR + HAND_CURSOR* = POINTING_HAND_CURSOR diff --git a/src/project.nim b/src/project.nim deleted file mode 100644 index 9e04484..0000000 --- a/src/project.nim +++ /dev/null @@ -1,3 +0,0 @@ -import project/project - -export project diff --git a/src/project/project.nim b/src/project/project.nim deleted file mode 100644 index 1a06e4f..0000000 --- a/src/project/project.nim +++ /dev/null @@ -1,39 +0,0 @@ -import os, strutils, strformat -import nimterop/[cimport, build] - -const - ProjectCacheDir* = currentSourcePath.parentDir().parentDir() / "build" #getProjectCacheDir("nimsdl2") - baseDir = SDLCacheDir - srcDir = baseDir / "sdl2" - buildDir = srcDir / "buildcache" - symbolPluginPath = currentSourcePath.parentDir() / "cleansymbols.nim" - -getHeader( - "template.h", - dlurl = "https://download.com/template-$1.tar.gz", - outdir = srcDir, - cmakeFlags = "-F flag", - conFlags = "-F flag" -) - -static: - discard - # gitPull("https://github.com/lib/project", outdir=srcDir, plist=""" -# src/*.h -# src/*.c -# """, checkout = "1f9c8864fc556a1be4d4bf1d6bfe20cde25734b4") - # cSkipSymbol @[] - # cDebug() - # cDisableCaching() - # let contents = readFile(srcDir/"src"/"dynapi"/"SDL_dynapi_procs.h") - # writeFile(srcDir/"src"/"dynapi"/"SDL_dynapi_procs.c", contents - -cOverride: - discard - -cPluginPath(symbolPluginPath) - -when defined(Project_Static): - cImport(Project_Path, recurse = true, flags = "-f=ast2 -E__,_ -F__,_") -else: - cImport(Project_Path, recurse = true, dynlib = "Project_LPath", flags = "-f=ast2 -E__,_ -F__,_")