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 #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