A collection of ISO C binding interfaces to Lua 5.4 for Fortran 2008, to call Lua from Fortran and vice versa.
Similar projects:
- AOTUS: Library that provides a Fortran wrapper to use Lua scripts as configuration files (MIT).
- FortLua: Example that shows how to load Lua configuration files from Fortran, based on AOTUS (MIT).
- fortran-lua53: Fortran 2008 bindings to Lua 5.3 (ISC).
- f2k3-lua: Lua bindings for loading configuration files only (MIT).
- luaf: Selected bindings to Lua 5.1 (MIT).
Install Lua 5.4 with development headers. On FreeBSD, run:
# pkg install devel/pkgconf lang/lua54 On Debian Linux, install:
# apt-get install pkg-config liblua5.4 liblua5.4-dev Use xmake to build fortran-lua54:
$ xmake This outputs libfortran-lua54.a and lua.mod to build/. Without xmake, just compile and install the library using the provided Makefile:
$ make $ make install PREFIX=/opt Or, run the Fortran Package Manager:
$ fpm build --profile release Link your Fortran applications against libfortran-lua54.a, and liblua-5.4.a or -llua54. On Linux, you have to link against liblua5.4.a or -llua5.4 respectively instead. The include and library search paths may differ as well.
The following basic example shows how to call the Lua function hello() in script.lua from Fortran.
-- script.lua function hello() print('Hello from Lua!') endMake sure that script.lua is stored in the same directory as the Fortran application.
! example.f90 program main use, intrinsic :: iso_c_binding use :: lua implicit none type(c_ptr) :: l integer :: rc l = lual_newstate() call lual_openlibs(l) rc = lual_dofile(l, 'script.lua') rc = lua_getglobal(l, 'hello') rc = lua_pcall(l, 0, 0, 0) call lua_close(l) end program mainIf the the interface bindings are installed to /opt, then compile, link, and run the example with:
$ gfortran -I/opt/include/libfortran-lua54/ -L/usr/local/lib/lua/5.4/ \ -o example example.f90 /opt/lib/libfortran-lua54.a -llua-5.4 $ ./example Hello from Lua! On Linux, change the prefix /usr/local to /usr. To link Lua 5.4 statically, run instead:
$ gfortran -o example example.f90 libfortran-lua54.a /usr/local/lib/liblua-5.4.a Additional examples can be found in examples/.
- fibonacci: calls a recursive Lua routine loaded from file.
- library: calls a Fortran routine inside a shared library from Lua (copy
fortran.sotoshare/, then runshare/library.lua). - string: runs Lua code stored in a Fortran string.
- table: reads values from a Lua table.
You can add fortran-lua54 as an FPM dependency:
[dependencies] fortran-lua54 = { git = "https://github.com/interkosmos/fortran-lua54.git" }The integer and float types used by Lua internally depend on the targeted platform. The program test/types.c outputs the types:
$ make test $ ./types lua_integer.: c_long_long lua_number..: c_double lua_kcontext: c_intptr_t You may have to alter lua_integer, lua_number, and lua_kcontext in src/lua.f90 accordingly.
| Function Name | Fortran Interface Name | Bound | Wrapper |
|---|---|---|---|
luaL_addchar | |||
luaL_addlstring | |||
luaL_addsize | |||
luaL_addstring | |||
luaL_addvalue | |||
luaL_argcheck | |||
luaL_argerror | |||
luaL_buffinit | |||
luaL_buffinitsize | |||
luaL_callmeta | |||
luaL_checkany | |||
luaL_checkinteger | |||
luaL_checklstring | |||
luaL_checknumber | |||
luaL_checkoption | |||
luaL_checkstack | |||
luaL_checkstring | |||
luaL_checktype | |||
luaL_checkudata | |||
luaL_checkversion | |||
luaL_dofile | lual_dofile | ✓ | |
luaL_dostring | lual_dostring | ✓ | |
luaL_error | |||
luaL_execresult | |||
luaL_fileresult | |||
luaL_getmetafield | |||
luaL_getmetatable | |||
luaL_getsubtable | |||
luaL_gsub | |||
luaL_len | lual_len | ✓ | |
luaL_loadbufferx | |||
luaL_loadfile | lual_loadfile | ✓ | |
luaL_loadfilex | lual_loadfilex | ✓ | |
luaL_loadstring | lual_loadstring | ✓ | ✓ |
luaL_newlib | |||
luaL_newlibtable | |||
luaL_newmetatable | |||
luaL_newstate | lual_newstate | ✓ | |
luaL_openlibs | lual_openlibs | ✓ | |
luaL_opt | |||
luaL_optinteger | |||
luaL_optlstring | |||
luaL_optnumber | |||
luaL_optstring | |||
luaL_prepbuffer | |||
luaL_prepbuffsize | |||
luaL_pushresult | |||
luaL_pushresultsize | |||
luaL_ref | |||
luaL_register | |||
luaL_requiref | |||
luaL_setfuncs | |||
luaL_setmetatable | |||
luaL_testudata | |||
luaL_tolstring | |||
luaL_traceback | |||
luaL_typename | |||
luaL_unref | |||
luaL_where | |||
lua_absindex | |||
lua_arith | lua_arith | ✓ | |
lua_atpanic | |||
lua_call | lua_call | ✓ | |
lua_callk | lua_callk | ✓ | |
lua_checkstack | lua_checkstack | ✓ | |
lua_close | lua_close | ✓ | |
lua_compare | lua_compare | ✓ | |
lua_concat | lua_concat | ✓ | |
lua_copy | lua_copy | ✓ | |
lua_createtable | lua_createtable | ✓ | |
lua_dump | |||
lua_error | |||
lua_gc | lua_gc | ✓ | |
lua_getallocf | |||
lua_getextraspace | |||
lua_getfield | lua_getfield | ✓ | ✓ |
lua_getglobal | lua_getglobal | ✓ | ✓ |
lua_geti | |||
lua_getmetatable | |||
lua_gettable | |||
lua_gettop | lua_gettop | ✓ | |
lua_getuservalue | |||
lua_insert | |||
lua_isboolean | lua_isboolean | ✓ | |
lua_iscfunction | lua_iscfunction | ✓ | |
lua_isfunction | lua_isfunction | ✓ | |
lua_isinteger | lua_isinteger | ✓ | |
lua_islightuserdata | |||
lua_isnil | lua_isnil | ✓ | |
lua_isnone | lua_isnone | ✓ | |
lua_isnoneornil | lua_isnoneornil | ✓ | |
lua_isnumber | lua_isnumber | ✓ | |
lua_isstring | lua_isstring | ✓ | |
lua_istable | lua_istable | ✓ | |
lua_isthread | lua_isthread | ✓ | |
lua_isuserdata | lua_isuserdata | ✓ | |
lua_isyieldable | lua_isyieldable | ✓ | |
lua_len | |||
lua_load | lua_load | ✓ | |
lua_newstate | |||
lua_newtable | lua_newtable | ✓ | |
lua_newthread | |||
lua_newuserdata | |||
lua_next | |||
lua_numbertointeger | |||
lua_pcall | lua_pcall | ✓ | |
lua_pcallk | lua_pcallk | ✓ | |
lua_pop | lua_pop | ✓ | |
lua_pushboolean | lua_pushboolean | ✓ | |
lua_pushcclosure | lua_pushcclosure | ✓ | |
lua_pushcfunction | |||
lua_pushfstring | |||
lua_pushglobaltable | |||
lua_pushinteger | lua_pushinteger | ✓ | |
lua_pushlightuserdata | lua_pushlightuserdata | ✓ | |
lua_pushliteral | |||
lua_pushlstring | lua_pushlstring | ✓ | ✓ |
lua_pushnil | lua_pushnil | ✓ | |
lua_pushnumber | lua_pushnumber | ✓ | |
lua_pushstring | lua_pushstring | ✓ | ✓ |
lua_pushthread | lua_pushthread | ✓ | |
lua_pushvalue | lua_pushvalue | ✓ | |
lua_pushvfstring | |||
lua_rawequal | |||
lua_rawget | lua_rawget | ✓ | |
lua_rawgeti | lua_rawgeti | ✓ | |
lua_rawgetp | |||
lua_rawlen | lua_rawlen | ✓ | |
lua_rawset | lua_rawset | ✓ | |
lua_rawseti | lua_rawseti | ✓ | |
lua_rawsetp | |||
lua_register | lua_register | ✓ | |
lua_remove | |||
lua_replace | |||
lua_resume | |||
lua_rotate | |||
lua_setallocf | |||
lua_setfield | lua_setfield | ✓ | ✓ |
lua_setglobal | lua_setglobal | ✓ | ✓ |
lua_seti | lua_seti | ✓ | |
lua_setmetatable | |||
lua_settable | lua_settable | ✓ | |
lua_settop | lua_settop | ✓ | |
lua_setuservalue | |||
lua_status | lua_status | ✓ | |
lua_stringtonumber | |||
lua_toboolean | lua_toboolean | ✓ | ✓ |
lua_tocfunction | |||
lua_tointeger | lua_tointeger | ✓ | |
lua_tointegerx | lua_tointegerx | ✓ | |
lua_tolstring | |||
lua_tonumber | lua_tonumber | ✓ | |
lua_tonumberx | lua_tonumberx | ✓ | |
lua_topointer | |||
lua_tostring | lua_tostring | ✓ | |
lua_tothread | |||
lua_touserdata | |||
lua_type | lua_type | ✓ | |
lua_typename | lua_typename | ✓ | ✓ |
lua_upvalueindex | |||
lua_version | lua_version | ✓ | |
lua_xmove | |||
lua_yield | |||
lua_yieldk |
ISC