aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorq66 <daniel@octaforge.org>2018-07-31 17:01:59 +0200
committerq66 <daniel@octaforge.org>2018-07-31 17:02:41 +0200
commit3cf525bd219cee2b584a04c4686d772d5c507e9b (patch)
tree0771d06e5bc17f42487ff687c3180697708bc9e2
downloadeolian_tools-3cf525bd219cee2b584a04c4686d772d5c507e9b.tar.gz
add a script to print all non-legacy C names in eo files
-rw-r--r--.gitignore1
-rw-r--r--README21
-rwxr-xr-xelua_in_tree.sh25
-rw-r--r--list_beta_c_names.lua104
4 files changed, 151 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..31b688b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+*.luac
diff --git a/README b/README
new file mode 100644
index 0000000..845c8b6
--- /dev/null
+++ b/README
@@ -0,0 +1,21 @@
+# Eolian tools
+
+These are various scripts and utilities to be used with Eolian. It may include
+things such as various statistics scripts or analysis utilities.
+
+Each utility typically accepts the `-h`/`--help` option for usage.
+
+## Lua scripts
+
+These are invoked using `elua`. You can do so like this:
+
+```
+elua script_name.lua <arguments>
+```
+
+You can also invoke them using `elua` from inside an EFL tree without
+installing it, using the script also provided in this repo:
+
+```
+./elua_in_tree.sh ../path/to/EFL script_name.lua <arguments>
+```
diff --git a/elua_in_tree.sh b/elua_in_tree.sh
new file mode 100755
index 0000000..e7a0e45
--- /dev/null
+++ b/elua_in_tree.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $0 efl_path script_path [arguments...]"
+ exit 1
+fi
+
+EFL_PATH="$1"
+shift
+
+PREV_LD_PATH="$LD_LIBRARY_PATH"
+
+export LD_LIBRARY_PATH="${EFL_PATH}/src/lib/eina/.libs"
+export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${EFL_PATH}/src/lib/eolian/.libs"
+
+if [ -n "$PREV_LD_PATH" ]; then
+ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PREV_LD_PATH}"
+fi
+
+"${EFL_PATH}/src/bin/elua/elua" \
+ "-I${EFL_PATH}/src/bindings/luajit" \
+ "-C${EFL_PATH}/src/scripts/elua/core" \
+ "-M${EFL_PATH}/src/scripts/elua/modules" \
+ "-A${EFL_PATH}/src/scripts/elua/apps" \
+ "$@"
diff --git a/list_beta_c_names.lua b/list_beta_c_names.lua
new file mode 100644
index 0000000..f036cd5
--- /dev/null
+++ b/list_beta_c_names.lua
@@ -0,0 +1,104 @@
+local eolian = require("eolian")
+local getopt = require("getopt")
+
+local exit = false
+local pargs
+
+getopt.parse {
+ usage = "Usage: %prog [OPTIONS] [path_to_eo_files]",
+ args = arg,
+ header = [[
+Print all non-legacy C names generated in header files for the given
+path. If no path is specified, system-wide eo files are used instead.]],
+ descs = {
+ { "h", "help", false, help = "Show this message.",
+ callback = getopt.help_cb(io.stdout)
+ }
+ },
+ error_cb = function(parser, msg)
+ io.stderr:write(msg, "\n")
+ getopt.help(parser, io.stderr)
+ exit = true
+ end,
+ done_cb = function(parser, opts, args)
+ if opts["h"] then
+ exit = true
+ end
+ pargs = args
+ end
+}
+
+if exit then
+ return true
+end
+
+local eos = eolian.new()
+
+if #pargs >= 1 then
+ eos:directory_add(pargs[1])
+else
+ eos:system_directory_add()
+end
+
+eos:all_eot_files_parse()
+eos:all_eo_files_parse()
+
+print("API functions:\n")
+for cl in eos:classes_get() do
+ local fntp = eolian.function_type
+ for fn in cl:functions_get(fntp.METHOD) do
+ print(fn:full_c_name_get(fntp.METHOD, false))
+ end
+ for fn in cl:functions_get(fntp.PROPERTY) do
+ local tp = fn:type_get()
+ if tp == fntp.PROPERTY then
+ print(fn:full_c_name_get(fntp.PROP_GET, false))
+ print(fn:full_c_name_get(fntp.PROP_SET, false))
+ else
+ print(fn:full_c_name_get(tp, false))
+ end
+ end
+end
+
+print("\nEvents:\n")
+for cl in eos:classes_get() do
+ for ev in cl:events_get() do
+ print(ev:c_name_get())
+ end
+end
+
+print("\nFunction pointers:\n")
+for tp in eos:aliases_get() do
+ if tp:type_get() == eolian.typedecl_type.FUNCTION_POINTER then
+ print((tp:name_get():gsub("%.", "_")))
+ end
+end
+
+print("\nAliases:\n")
+for tp in eos:aliases_get() do
+ if tp:type_get() ~= eolian.typedecl_type.FUNCTION_POINTER then
+ print((tp:name_get():gsub("%.", "_")))
+ end
+end
+
+print("\nStructs:\n")
+for tp in eos:structs_get() do
+ print((tp:name_get():gsub("%.", "_")))
+end
+
+print("\nEnums:\n")
+for tp in eos:enums_get() do
+ print((tp:name_get():gsub("%.", "_")))
+end
+
+print("\nGlobals:\n")
+for v in eos:globals_get() do
+ print(v:name_get():gsub("%.", "_"):upper())
+end
+
+print("\nConstants:\n")
+for v in eos:constants_get() do
+ print(v:name_get():gsub("%.", "_"):upper())
+end
+
+return true