Overview
| Comment: | initial commit |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
e18c9de34dde4fe2a832cbedf871c72c |
| User & Date: | lexi on 2020-12-10 05:28:52 |
| Other Links: | manifest | tags |
Context
|
2020-12-14
| ||
| 14:40 | more boilerplate, add template framework check-in: 6f17de4767 user: lexi tags: trunk | |
|
2020-12-10
| ||
| 05:28 | initial commit check-in: e18c9de34d user: lexi tags: trunk | |
| 05:25 | initial empty check-in check-in: 1f9b1ddd5b user: lexi tags: trunk | |
Changes
Added common.lua version [9dc63595c4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
local map = function(lst,fn) local new = {} for k,v in pairs(lst) do local nv, nk = fn(v,k) new[nk or k] = nv end return new end local chomp = function(str) while string.sub(str,#str) == '\n' do str = string.sub(str,1,#str - 1) end return str end local exec = function(args, val) local cmd = table.concat(map(args, function(a) return string.format('%q', a) end), ' ') if val then return os.execute(cmd) else local fd = io.popen(cmd,'r') local t = fd:read('*a') return chomp(t), fd:close() end end local function dump(v,pfx) pfx = pfx or '' local np = pfx .. ' ' if type(v) == 'string' then return string.format('%q', v) elseif type(v) == 'table' then local str = '' for k,v in pairs(v) do str = str .. string.format('%s[%s] = %s\n', np, dump(k,np), dump(v,np)) end return '{\n' .. str .. pfx .. '}\n' else return string.format('%s', v) end end local ping = function(path) local f = io.open(path) if f then f:close() return true end return false end local tobool = function(s) if s == true then return true elseif s == false then return false end s = ({ yes = true, ['true'] = true, on = true, ['1'] = true; no = false, ['false'] = false, off = false, ['0'] = false; })[string.lower(s)] if not s then return false end return true end return { exec = exec; dump = dump; ping = ping; chomp = chomp; map = map; tobool = tobool; append = function(a,b) for _, v in pairs(b) do a[#a+1] = v end end; has = function(haystack,needle,eq) eq = eq or function(a,b) return a == b end for k,v in pairs(haystack) do if eq(needle,v) then return k end end end; parseargs = function(a) local raw = false local opts, args = {}, {} for i,v in ipairs(a) do if v == '--' then raw = true else if (not raw) and string.sub(v,1,2) == '--' then -- longopt opts[#opts+1] = string.sub(v,3) elseif (not raw) and string.sub(v,1,1) == '-' then -- shortopts for c in string.gmatch(string.sub(v,2), '.') do opts[#opts+1] = c end else args[#args+1]=v end end end return opts, args end; } |
Added config.lua version [f14c1e8df4].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
local u = dofile('common.lua') local default = function(var,def) local v = os.getenv(var) if v then return v else return def end end local posixes = { linux = true; osx = true; android = true; haiku = true; } local conf = { pkg = {}; os = default('parsav_target_os', 'linux'); dist = default('parsav_dist', os.getenv('NIX_PATH') and 'nixos'); tgttrip = default('parsav_arch_triple'); -- target triple, used in xcomp tgtcpu = default('parsav_arch_cpu'); -- target cpu, used in xcomp tgthf = u.tobool(default('parsav_arch_armhf',true)); } conf.posix = posixes[conf.os] conf.exe = u.tobool(default('parsav_link',not conf.tgttrip)); -- turn off for partial builds local fallback = dofile('pkgdata.lua') local libfind do local mkf = function(p) return function(l) return string.format(p,l) end end local unx = function(p) return function(l) if string.sub(l,1,3) == 'lib' then return string.format('%s.%s',l,p) else return string.format('lib%s.%s',l,p) end end end libfind = { linux = { static = unx 'a'; dynamic = unx 'so'; }; osx = { dynamic = mkf '%s.dylib'; }; win = { dynamic = mkf '%s.dll'; }; } end local pkg = function(name) local fbo = fallback[name] and fallback[name].osvars and fallback[name].osvars[conf.os .. '_' .. conf.dist] local fbv = fallback[name] and fallback[name].vars local pkgenv = function(e) return os.getenv(string.format('parsav_pkg_%s_%s',name,e)) end name = pkgenv('override') or name local nul = function() end local pkc, pkv = nul, nul local cnfvar = function(v,e) local eval = function(e) if type(e) == 'function' then return e(conf) else return e end end return pkgenv(v) or pkv(e or v) or (fbo and eval(fbo[v])) or (fbv and eval(fbv[v])) end if conf.posix then pkc = function(...) return u.exec { 'pkg-config'; name; ... } end local pkcv = function(...) return u.exec({ 'pkg-config'; name; ... }, true) end if pkcv('--exists') == 0 then pkv = function(v) return pkc('--variable', v) end else pkc = nul end else print '(warn) configuring on non-POSIX OS, all relevant paths must be specified manually in environment variables or build will fail!' end local locdep = u.ping('./lib/' .. name) local prefix if locdep then prefix = './lib/' .. name end prefix = prefix or cnfvar('prefix') local libdir = cnfvar('libdir') if not libdir then if locdep then libdir = prefix .. (cnfvar('builddir') or cnfvar('libbuilddir')) or '' else libdir = prefix .. '/lib' end end local incdir = cnfvar('incdir','includedir') or (prefix .. '/include') local libstr = pkc '--libs-only-l' -- (--static is not reliable) local libs = fallback[name] and fallback[name].libs or {} local linkstatic = locdep if (not locdep) and libstr then libs = {} for m in string.gmatch(libstr, '-l(%g+)') do libs[#libs + 1] = m end else if #libs == 0 then libs = { name } end end conf.pkg[name] = { prefix = prefix; libdir = libdir; incdir = incdir; dylibs = {}, statlibs = {}; } local me = conf.pkg[name] local lf = libfind[conf.os] if lf.dynamic then me.dylibs = u.map(libs, lf.dynamic) end if lf.static then me.statlibs = u.map(libs, lf.static) end if linkstatic then local ldf = {} for _,v in pairs(me.statlibs) do local fl = libdir .. '/' .. v if u.ping(fl) then ldf[#ldf+1] = fl end end me.linkargs = ldf else local arg = name if string.sub(arg,1,3) == 'lib' then arg = string.sub(arg,4) end local linkline = libstr or string.format('-l%s', arg) me.linkargs = { string.format('-L%s', me.libdir); } for m in string.gmatch(linkline, '(%g+)') do me.linkargs[#me.linkargs+1] = m end -- siiiiigh for _,l in pairs(libs) do local sw = string.format('-l%s', l) local found = false for _,a in pairs(me.linkargs) do if a == sw then found = true break end end if not found then me.linkargs[#me.linkargs+1] = sw end end end end pkg('mbedtls') pkg('libhttp') pkg('json-c') return conf |
Added makefile version [b49975ddb0].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
dl = git dbg-flags = $(if $(dbg),-g) parsav: parsav.t config.lua pkgdata.lua terra $(dbg-flags) $< parsav.o: parsav.t config.lua pkgdata.lua env parsav_link=no terra $(dbg-flags) $< clean: rm parsav parsav.o dep: dep.mbedtls dep.libhttp dep.json-c dep.mbedtls: lib/mbedtls/library/libmbedtls.a \ lib/mbedtls/library/libmbedcrypto.a \ lib/mbedtls/library/libmbedx509.a dep.libhttp: lib/libhttp/lib/libhttp.a dep.json-c: lib/libhttp/json-c.a lib: mkdir $@ # parsav is designed to be fronted by a real web # server like nginx if SSL is to be used # caveat: libhttp is a mess. the docs are completely # full of shit. there is no lua support as far as i # can tell. lib/libhttp/lib/libhttp.a: lib/libhttp $(MAKE) -C $< lib/libhttp.a \ RM='rm -f' \ CC="$(CC) -Wno-unused-result" \ DFLAGS="-DNO_SSL -DNO_FILES -DNO_CGI -DUSE_STACK_SIZE=102400 -DUSE_IPV6" lib/json-c/Makefile: lib/json-c lib/json-c/CMakeLists.txt cd lib/json-c && cmake . lib/json-c/libjson-c.a: lib/json-c/Makefile $(MAKE) -C lib/json-c lib/mbedtls/library/%.a: lib/mbedtls $(MAKE) -C lib/mbedtls/library $*.a ifeq ($(dl), git) lib/libhttp: lib cd lib && git clone https://github.com/lammertb/libhttp.git lib/mbedtls: lib cd lib && git clone https://github.com/ARMmbed/mbedtls.git lib/json-c: lib cd lib && git clone https://github.com/json-c/json-c.git else lib/%: lib/%.tar.gz cd lib && tar zxf $*.tar.gz mv lib/$$(tar tf $< | head -n1) $@ ifeq ($(dl), wget) dlfile = wget "$(1)" -O "$(2)" endif ifeq ($(dl), curl) dlfile = curl "$(1)" -o "$(2)" endif lib/libhttp.tar.gz: lib $(call dlfile,https://api.github.com/repos/lammertb/libhttp/tarball/master,$@) lib/mbedtls.tar.gz: lib $(call dlfile,https://api.github.com/repos/ARMmbed/mbedtls/tarball/master,$@) lib/json-c.tar.gz: lib $(call dlfile,https://api.github.com/repos/json-c/json-c/tarball/master,$@) endif |
Added parsav.md version [d4a5d691bd].
> > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# parsav **parsav** is a lightweight fediverse server ## dependencies * libhttp * json-c * mbedtls * postgresql-libs ## building first, either install any missing dependencies as shared libraries, or build them as static libraries as described below: * libhttp: run `$ make lib/libhttp/lib/libhttp.a` * json-c (deps: `cmake`): run `$ make lib/json-c/libjson-c.a` * mbedtls: run `$ make lib/mbedtls/lib/mbed{crypto,tls,x509}.a` you can install static libraries for all dependencies with `$ make dep`, but this is recommended only if you have none of the above |
Added parsav.t version [d2f35b212c].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
-- vim: ft=terra local util = dofile('common.lua') local buildopts, buildargs = util.parseargs{...} local config = dofile('config.lua') local lib = { loadlib = function(name,hdr) local p = config.pkg[name] -- for _,v in pairs(p.dylibs) do -- terralib.linklibrary(p.libdir .. '/' .. v) -- end return terralib.includec(p.incdir .. '/' .. hdr) end; randomize = terralib.externfunction('getrandom', {&opaque, intptr, uint} -> ptrdiff); } lib.rsa = lib.loadlib('mbedtls','mbedtls/rsa.h') lib.pk = lib.loadlib('mbedtls','mbedtls/pk.h') local callbacks = { randomize = terra(ctx: &opaque, dest: &uint8, sz: intptr): int return lib.randomize(dest, sz, 0) end; } terra entry(): int var pk: lib.pk.mbedtls_pk_context lib.pk.mbedtls_pk_init(&pk) lib.pk.mbedtls_pk_setup(&pk, lib.pk.mbedtls_pk_info_from_type(lib.pk.MBEDTLS_PK_RSA)) var rsa = [&lib.rsa.mbedtls_rsa_context](pk.pk_ctx) lib.rsa.mbedtls_rsa_gen_key(rsa, callbacks.randomize, nil, 2048, 65537) return 0 end local bflag = function(long,short) if short and util.has(buildopts, short) then return true end if long and util.has(buildopts, long) then return true end return false end if bflag('dump-config','C') then print(util.dump(config)) os.exit(0) end local emit = print if bflag('quiet','q') then emit = function() end end local out = config.exe and 'parsav' or 'parsav.o' local linkargs = {} for _,p in pairs(config.pkg) do util.append(linkargs, p.linkargs) end emit('linking with args',util.dump(linkargs)) terralib.saveobj(out, { main = entry }, linkargs, config.tgttrip and terralib.newtarget { Triple = config.tgttrip; CPU = config.tgtcpu; FloatABIHard = config.tgthf; } or nil) |
Added pkgdata.lua version [b4c0388029].
> > > > > > > > > > > > > > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
local util = dofile('common.lua') local sthunk = function(...) local a = {...} return function() return util.exec(a) end end return { mbedtls = { libs = {'mbedtls', 'mbedcrypto', 'mbedx509'}; osvars = { linux_nixos = { -- lacks a *.pc on nixos systems prefix = sthunk('nix', 'path-info', 'nixos.mbedtls'); } }; vars = { builddir = '/library' }; }; libhttp = { vars = { builddir = '/lib' }; }; } |