Skip to content

Instantly share code, notes, and snippets.

@dcousens
Created April 10, 2017 09:40
Show Gist options
  • Save dcousens/c373d65c7e97505e0f3b88ab764ec9f6 to your computer and use it in GitHub Desktop.
Save dcousens/c373d65c7e97505e0f3b88ab764ec9f6 to your computer and use it in GitHub Desktop.
D bindings for various libraries
mkdir -p glfw3
cd glfw3
echo "module glfw3;" > glfw3.h
curl https://raw.githubusercontent.com/glfw/glfw/3.2.1/include/GLFW/glfw3.h >> glfw3.h
cat glfw3.h |\
grep -v "dllimport" |\
grep -v "__declspec" |\
grep -v "__attribute" |\
grep -v "__stdcall" |\
sed "s/extern \"C\" {/extern(C) {/g" |\
sed "s/typedef struct /struct /g" |\
sed "s/struct \([A-Za-z0-9_]\+\) \1/struct \1/g" |\
sed "s/} [A-Za-z0-9]\+/}/g" |\
sed "s/unsigned /u/g" |\
sed "s/uchar/ubyte/g" |\
sed "s/uint32_t/uint/g" |\
sed "s/uint64_t/ulong/g" |\
sed "s/typedef void (\*[ ]*\([A-Za-z0-9]\+\))/alias \1 = void function /g" |\
sed "s/(void)/()/g" |\
sed "s/GLFWAPI //g" |\
sed "s/const \([A-Za-z\*]\+\) /const(\1) /g" |\
sed "s/#define\s\([A-Za-z_0-9]\+\)\s\+\([-0-9xA-Za-z_]\+\)/enum \1 = \2;/g" |\
grep -v "enum GLAPIENTRY" |\
grep -v "Vk" |\
grep -v "\#\(ifdef\|if\|endif\|else\|include\|define\|elif\|error\|undef\)" > package.d
rm glfw3.h
rdmd --main package.d
mkdir -p leveldb
cd leveldb
echo "module leveldb;" > leveldb.h
curl https://raw.githubusercontent.com/google/leveldb/master/include/leveldb/c.h >> leveldb.h
cat leveldb.h |\
grep -v "dllimport" |\
grep -v "__declspec" |\
grep -v "__attribute" |\
grep -v "__stdcall" |\
sed "s/extern \"C\" {/extern(C) {/g" |\
sed "s/extern //g" |\
sed "s/typedef struct [A-Za-z_]\+ /alias void* /g" |\
sed "s/unsigned /u/g" |\
sed "s/uchar/ubyte/g" |\
sed "s/const \([A-Za-z]\+\*\) const\* /const(const(\1)\*) /g" |\
sed "s/const \([A-Za-z\*]\+\) /const(\1) /g" |\
grep -v "\#\(ifdef\|if\|endif\|else\|include\|define\|elif\|error\|undef\)" > package.d
rm leveldb.h
rdmd --main package.d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment