diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2021-11-21 15:55:52 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2021-11-21 15:55:52 -0800 |
commit | 5a484efe8c72a929382c96555a31129f8d2a55c8 (patch) | |
tree | 60f6b76e3c06dbc1bfb9fe9e978475256e8a8f6d /src/luasec/options.lua | |
parent | 3b44b9827d5e9c6554c5600c45d832d4e6eb50f8 (diff) | |
download | teliva-5a484efe8c72a929382c96555a31129f8d2a55c8.tar.gz |
https now working!
Still extremely ugly: - I've inlined all the namespaces under ssl, so you need to know that context and config are related to ssl. - luasec comes with its own copy of luasocket. I haven't deduped that yet.
Diffstat (limited to 'src/luasec/options.lua')
-rw-r--r-- | src/luasec/options.lua | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/luasec/options.lua b/src/luasec/options.lua new file mode 100644 index 0000000..d9a8801 --- /dev/null +++ b/src/luasec/options.lua @@ -0,0 +1,93 @@ +local function usage() + print("Usage:") + print("* Generate options of your system:") + print(" lua options.lua -g /path/to/ssl.h [version] > options.c") + print("* Examples:") + print(" lua options.lua -g /usr/include/openssl/ssl.h > options.c\n") + print(" lua options.lua -g /usr/include/openssl/ssl.h \"OpenSSL 1.1.1f\" > options.c\n") + + print("* List options of your system:") + print(" lua options.lua -l /path/to/ssl.h\n") +end + +-- +local function printf(str, ...) + print(string.format(str, ...)) +end + +local function generate(options, version) + print([[ +/*-------------------------------------------------------------------------- + * LuaSec 1.1.1 + * + * Copyright (C) 2006-2021 Bruno Silvestre + * + *--------------------------------------------------------------------------*/ + +#include <openssl/ssl.h> + +#include "options.h" + +/* If you need to generate these options again, see options.lua */ + +]]) + + printf([[ +/* + OpenSSL version: %s +*/ +]], version) + + print([[static lsec_ssl_option_t ssl_options[] = {]]) + + for k, option in ipairs(options) do + local name = string.lower(string.sub(option, 8)) + print(string.format([[#if defined(%s)]], option)) + print(string.format([[ {"%s", %s},]], name, option)) + print([[#endif]]) + end + print([[ {NULL, 0L}]]) + print([[ +}; + +LSEC_API lsec_ssl_option_t* lsec_get_ssl_options() { + return ssl_options; +} +]]) +end + +local function loadoptions(file) + local options = {} + local f = assert(io.open(file, "r")) + for line in f:lines() do + local op = string.match(line, "define%s+(SSL_OP_BIT%()") + if not op then + op = string.match(line, "define%s+(SSL_OP_%S+)") + if op then + table.insert(options, op) + end + end + end + table.sort(options, function(a,b) return a<b end) + return options +end +-- + +local options +local flag, file, version = ... + +version = version or "Unknown" + +if not file then + usage() +elseif flag == "-g" then + options = loadoptions(file) + generate(options, version) +elseif flag == "-l" then + options = loadoptions(file) + for k, option in ipairs(options) do + print(option) + end +else + usage() +end |