From e0e4cc81bf411339ec71ccbe87338cd35c36dcda Mon Sep 17 00:00:00 2001 From: Joey Yakimowich-Payne Date: Sat, 11 Apr 2020 19:33:06 -0600 Subject: [PATCH] Add sdl gfx. Use ast2 --- nim.cfg | 8 ++- nim_sdl2.nimble | 7 +- src/nim_sdl2/wrapper.nim | 9 +-- src/nim_sdl2_gfx/wrapper.nim | 119 +++++++++++++++++++++++++++++++++ src/nim_sdl2_gpu/wrapper.nim | 10 +-- src/nim_sdl2_image/wrapper.nim | 2 +- src/nim_sdl2_mixer/wrapper.nim | 2 +- src/nim_sdl2_net/wrapper.nim | 2 +- src/nim_sdl2_ttf/wrapper.nim | 2 +- src/sdl2_all.nim | 4 +- src/sdl2_gfx.nim | 2 + 11 files changed, 149 insertions(+), 18 deletions(-) create mode 100644 src/nim_sdl2_gfx/wrapper.nim create mode 100644 src/sdl2_gfx.nim diff --git a/nim.cfg b/nim.cfg index 756b21d..2297f99 100644 --- a/nim.cfg +++ b/nim.cfg @@ -1 +1,7 @@ --d:SDL_DL -d:SDL_Static -d:SDL_image_Static -d:SDL_mixer_Static -d:SDL_net_Static -d:SDL_ttf_Static -d:SDL_gpu_Static -d:SDL_image_DL -d:SDL_mixer_DL -d:SDL_net_DL -d:SDL_ttf_DL -d:SDL_gpu_Git \ No newline at end of file +-d:SDL_SetVer="2.0.12" -d:SDL_DL -d:SDL_Static +-d:SDL_ImageSetVer="2.0.5" -d:SDL_Image_DL -d:SDL_Image_Static +-d:SDL_NetSetVer="2.0.1" -d:SDL_Net_DL -d:SDL_Net_Static +-d:SDL_MixerSetVer="2.0.4" -d:SDL_Mixer_DL -d:SDL_Mixer_Static +-d:SDL_TTFSetVer="2.0.15" -d:SDL_TTF_DL -d:SDL_TTF_Static +-d:SDL_GpuSetVer="def5ea1" -d:SDL_GPU_Git -d:SDL_Gpu_Static +-d:SDL2_GFXPrimitivesSetVer="1.0.4" -d:SDL2_GFXPrimitives_DL -d:SDL2_GFXPrimitives_Static -d:SDL2_GFX_Static \ No newline at end of file diff --git a/nim_sdl2.nimble b/nim_sdl2.nimble index d45e6d8..8404cc4 100644 --- a/nim_sdl2.nimble +++ b/nim_sdl2.nimble @@ -9,8 +9,13 @@ srcDir = "src" # Dependencies - requires "nim >= 1.0.6", "nimterop#head" +when gorgeEx("nimble path nimterop").exitCode == 0: + import nimterop/docs + task docs, "Generate docs": buildDocs(@["src/sdl2_all.nim"], "build/htmldocs") +else: + task docs, "Do nothing": discard + task buildSDL2, "Build SDL2 example": exec "nimble c -f -r src/sdl2_all.nim" \ No newline at end of file diff --git a/src/nim_sdl2/wrapper.nim b/src/nim_sdl2/wrapper.nim index df201cc..fecf596 100644 --- a/src/nim_sdl2/wrapper.nim +++ b/src/nim_sdl2/wrapper.nim @@ -8,7 +8,7 @@ const getHeader( "SDL.h", - dlurl = "https://www.libsdl.org/release/SDL2-2.0.12.tar.gz", + dlurl = "https://www.libsdl.org/release/SDL2-$1.tar.gz", outdir = srcDir ) @@ -18,8 +18,6 @@ static: # cDisableCaching() cOverride: - const KEYCODE_UNDERSCORE* = ('_').KeyCodeEnum - type BlitMap* {.incompleteStruct.} = object RWops* {.incompleteStruct.} = object @@ -145,11 +143,10 @@ cPlugin: if sym.name == "KeyCode": sym.name = "KeyCodeEnum" - when defined(SDL_Static): - cImport(SDL_Path, recurse = true) + cImport(SDL_Path, recurse = true, flags = "-f=ast2 -DDOXYGEN_SHOULD_IGNORE_THIS") else: - cImport(SDL_Path, recurse = true, dynlib = "SDL_LPath") + cImport(SDL_Path, recurse = true, dynlib = "SDL_LPath", flags = "-f=ast2 -DDOXYGEN_SHOULD_IGNORE_THIS") proc getDynlibExt(): string = when defined(windows): diff --git a/src/nim_sdl2_gfx/wrapper.nim b/src/nim_sdl2_gfx/wrapper.nim new file mode 100644 index 0000000..c15d6c1 --- /dev/null +++ b/src/nim_sdl2_gfx/wrapper.nim @@ -0,0 +1,119 @@ +import os, strutils, strformat +import ../nim_sdl2/wrapper as sdl2_wrapper +import nimterop/[cimport, build] + +export sdl2_wrapper + +const + baseDir = currentSourcePath.parentDir().parentDir().parentDir() + buildDir = baseDir / "build" + sdlIncludeDir = buildDir / "sdl2" / "include" + srcDir = buildDir / "sdl2_gfx" + +getHeader( + "SDL2_gfxPrimitives.h", + dlurl = "http://www.ferzkopp.net/Software/SDL2_gfx/SDL2_gfx-$1.tar.gz", + outdir = srcDir, + altNames = "SDL2_gfx,SDL_gfx" +) + +# static: +# cDebug() +# cDisableCaching() + +cPlugin: + import strutils, nre + import sets + + const EVENT_TYPES = toHashSet([ + "FIRSTEVENT", + "QUIT", + "APP_TERMINATING", + "APP_LOWMEMORY", + "APP_WILLENTERBACKGROUND", + "APP_DIDENTERBACKGROUND", + "APP_WILLENTERFOREGROUND", + "APP_DIDENTERFOREGROUND", + "DISPLAYEVENT", + "WINDOWEVENT", + "SYSWMEVENT", + "KEYDOWN", + "KEYUP", + "TEXTEDITING", + "TEXTINPUT", + "KEYMAPCHANGED", + "MOUSEMOTION", + "MOUSEBUTTONDOWN", + "MOUSEBUTTONUP", + "MOUSEWHEEL", + "JOYAXISMOTION", + "JOYBALLMOTION", + "JOYHATMOTION", + "JOYBUTTONDOWN", + "JOYBUTTONUP", + "JOYDEVICEADDED", + "JOYDEVICEREMOVED", + "CONTROLLERAXISMOTION", + "CONTROLLERBUTTONDOWN", + "CONTROLLERBUTTONUP", + "CONTROLLERDEVICEADDED", + "CONTROLLERDEVICEREMOVED", + "CONTROLLERDEVICEREMAPPED", + "FINGERDOWN", + "FINGERUP", + "FINGERMOTION", + "DOLLARGESTURE", + "DOLLARRECORD", + "MULTIGESTURE", + "CLIPBOARDUPDATE", + "DROPFILE", + "DROPTEXT", + "DROPBEGIN", + "DROPCOMPLETE", + "AUDIODEVICEADDED", + "AUDIODEVICEREMOVED", + "SENSORUPDATE", + "RENDER_TARGETS_RESET", + "RENDER_DEVICE_RESET", + "USEREVENT", + "LASTEVENT", + ]) + + # Symbol renaming examples + proc onSymbol*(sym: var Symbol) {.exportc, dynlib.} = + # Get rid of leading and trailing underscores + # sym.name = sym.name.strip(chars = {'_'}) + + # Remove prefixes or suffixes from procs + if sym.name == "__MACOSX__": + sym.name = "MACOSX" + if sym.kind == nskProc or sym.kind == nskType or sym.kind == nskConst: + if sym.name != "_": + sym.name = sym.name.replace(re"^_+", "") + sym.name = sym.name.replace(re"_+$", "") + sym.name = sym.name.replace(re"^SDL_", "") + + if sym.name.startsWith("SDLK_"): + sym.name = sym.name.replace("SDLK_", "KEYCODE_") + + if EVENT_TYPES.contains(sym.name): + sym.name = "EVENT_" & sym.name + + if sym.name == "ThreadID": + sym.name = "CurrentThreadID" + if sym.name == "GLContextResetNotification": + sym.name = "GLContextResetNotificationEnum" + if sym.name == "KeyCode": + sym.name = "KeyCodeEnum" + + +when defined(SDL2_GfxPrimitives_Static): + cImport(srcDir / "SDL2_gfxPrimitives.h", recurse = false, flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_rotozoom.h", recurse = false, flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_framerate.h", recurse = false, flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_imageFilter.h", recurse = false, flags = &"-I={sdlIncludeDir} -f=ast2") +else: + cImport(srcDir / "SDL2_gfxPrimitives.h", recurse = false, dynlib="SDL2_GfxPrimitives_LPath", flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_rotozoom.h", recurse = false, dynlib="SDL2_GfxPrimitives_LPath", flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_framerate.h", recurse = false, dynlib="SDL2_GfxPrimitives_LPath", flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(srcDir / "SDL2_imageFilter.h", recurse = false, dynlib="SDL2_GfxPrimitives_LPath", flags = &"-I={sdlIncludeDir} -f=ast2") \ No newline at end of file diff --git a/src/nim_sdl2_gpu/wrapper.nim b/src/nim_sdl2_gpu/wrapper.nim index 974d099..43f27e5 100644 --- a/src/nim_sdl2_gpu/wrapper.nim +++ b/src/nim_sdl2_gpu/wrapper.nim @@ -19,9 +19,9 @@ getHeader( &"-DSDL2MAIN_LIBRARY={SDLMainLib} -DSDL2_PATH={sdlDir} -DSDL2_INCLUDE_DIR={sdlIncludeDir} -DSDL_gpu_BUILD_DEMOS=OFF" ) -static: - cDebug() - cDisableCaching() +# static: +# cDebug() +# cDisableCaching() cOverride: type @@ -113,6 +113,6 @@ cPlugin: sym.name = "KeyCodeEnum" when defined(SDL_gpu_Static): - cImport(SDL_gpuPath, recurse = true, flags = &"-I={sdlIncludeDir} -f=ast2") + cImport(SDL_gpuPath, recurse = false, flags = &"-I={sdlIncludeDir} -f=ast2") else: - cImport(SDL_gpuPath, recurse = true, dynlib = "SDL_gpuLPath", flags = &"-I={sdlIncludeDir} -f=ast2") \ No newline at end of file + cImport(SDL_gpuPath, recurse = false, dynlib = "SDL_gpuLPath", flags = &"-I={sdlIncludeDir} -f=ast2") \ No newline at end of file diff --git a/src/nim_sdl2_image/wrapper.nim b/src/nim_sdl2_image/wrapper.nim index 30a6039..d87a123 100644 --- a/src/nim_sdl2_image/wrapper.nim +++ b/src/nim_sdl2_image/wrapper.nim @@ -10,7 +10,7 @@ const getHeader( "SDL_image.h", - dlurl = "https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.5.tar.gz", + dlurl = "https://www.libsdl.org/projects/SDL_image/release/SDL2_image-$1.tar.gz", outdir = srcDir, altNames = "SDL2_image" ) diff --git a/src/nim_sdl2_mixer/wrapper.nim b/src/nim_sdl2_mixer/wrapper.nim index 6af7a35..37e4410 100644 --- a/src/nim_sdl2_mixer/wrapper.nim +++ b/src/nim_sdl2_mixer/wrapper.nim @@ -10,7 +10,7 @@ const getHeader( "SDL_mixer.h", - dlurl = "https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-2.0.4.tar.gz", + dlurl = "https://www.libsdl.org/projects/SDL_mixer/release/SDL2_mixer-$1.tar.gz", outdir = srcDir, altNames = "SDL2_mixer" ) diff --git a/src/nim_sdl2_net/wrapper.nim b/src/nim_sdl2_net/wrapper.nim index 4a4d824..c7a43c2 100644 --- a/src/nim_sdl2_net/wrapper.nim +++ b/src/nim_sdl2_net/wrapper.nim @@ -10,7 +10,7 @@ const getHeader( "SDL_net.h", - dlurl = "https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.0.1.tar.gz", + dlurl = "https://www.libsdl.org/projects/SDL_net/release/SDL2_net-$1.tar.gz", outdir = srcDir, altNames = "SDL2_net" ) diff --git a/src/nim_sdl2_ttf/wrapper.nim b/src/nim_sdl2_ttf/wrapper.nim index a21cebd..f384fc6 100644 --- a/src/nim_sdl2_ttf/wrapper.nim +++ b/src/nim_sdl2_ttf/wrapper.nim @@ -12,7 +12,7 @@ const getHeader( "SDL_ttf.h", - dlurl = "https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-2.0.15.tar.gz", + dlurl = "https://www.libsdl.org/projects/SDL_ttf/release/SDL2_ttf-$1.tar.gz", outdir = srcDir, altNames = "SDL2_ttf", cmakeFlags = &"-DCMAKE_C_FLAGS=-I{sdlIncludeDir} -DCMAKE_MODULE_PATH={cmakeModPath} " & diff --git a/src/sdl2_all.nim b/src/sdl2_all.nim index 639ed21..c5639bc 100644 --- a/src/sdl2_all.nim +++ b/src/sdl2_all.nim @@ -4,10 +4,12 @@ import sdl2_image import sdl2_mixer import sdl2_net import sdl2_ttf +import sdl2_gfx export sdl2 export sdl2_gpu export sdl2_image export sdl2_mixer export sdl2_net -export sdl2_ttf \ No newline at end of file +export sdl2_ttf +export sdl2_gfx \ No newline at end of file diff --git a/src/sdl2_gfx.nim b/src/sdl2_gfx.nim new file mode 100644 index 0000000..c3778bf --- /dev/null +++ b/src/sdl2_gfx.nim @@ -0,0 +1,2 @@ +import nim_sdl2_gfx / wrapper +export wrapper \ No newline at end of file