logo

oasis

Own branch of Oasis Linux (upstream: <https://git.sr.ht/~mcf/oasis/>) git clone https://anongit.hacktivis.me/git/oasis.git
commit: 051963c7fee2c453d086c6792282f4c299bdf68c
parent 35ec1d214359c035a45c4c51c1072f819f421894
Author: Michael Forney <mforney@mforney.org>
Date:   Wed, 29 Jan 2020 13:56:48 -0800

Add support for building multiple configurations

Now, you can build in separate directories per configuration:

	mkdir foo
	(cd foo && ../setup.lua)
	samu -C foo

Diffstat:

Mconfig.def.lua2+-
Mgen.lua5+++--
Mninja.lua23+++++++++++++----------
Mpkg/acme-client/gen.lua6+++---
Mpkg/curl/gen.lua4++--
Mpkg/e2fsprogs/gen.lua2+-
Mpkg/elftoolchain/gen.lua2+-
Mpkg/ffmpeg/gen.lua6+++---
Mpkg/file/gen.lua2+-
Mpkg/fribidi/gen.lua4++--
Mpkg/libcbor/gen.lua2+-
Mpkg/libevent/gen.lua4++--
Mpkg/libffi/gen.lua2+-
Mpkg/libfido2/gen.lua2+-
Mpkg/libjpeg-turbo/gen.lua2+-
Mpkg/libnl/gen.lua4++--
Mpkg/mupdf/gen.lua2+-
Mpkg/ncurses/gen.lua6+++---
Mpkg/netsurf/gen.lua2+-
Mpkg/nginx/gen.lua2+-
Mpkg/openntpd/gen.lua2+-
Mpkg/openssh/gen.lua2+-
Mpkg/pcre/gen.lua2+-
Mpkg/pixman/gen.lua2+-
Mpkg/transmission/gen.lua4++--
Mpkg/wayland/gen.lua2+-
Mprobe/gen.lua4++--
Mrules.ninja24++++++++++++------------
Msetup.lua32+++++++++++++++++++++-----------
29 files changed, 86 insertions(+), 72 deletions(-)

diff --git a/config.def.lua b/config.def.lua @@ -1,4 +1,4 @@ -local sets = dofile 'sets.lua' +local sets = dofile(basedir..'/sets.lua') return { -- build output directory diff --git a/gen.lua b/gen.lua @@ -1,7 +1,8 @@ set('ninja_required_version', '1.8') -set('basedir', '.') +set('basedir', basedir) set('builddir', config.builddir) +set('dir', '$basedir') set('outdir', '$builddir') set('target_toolchain', config.target.toolchain) @@ -17,7 +18,7 @@ set('repo_flags', config.repo.flags) set('repo_tag', config.repo.tag) set('repo_branch', config.repo.branch) -include 'rules.ninja' +include '$basedir/rules.ninja' toolchain 'target' diff --git a/ninja.lua b/ninja.lua @@ -140,7 +140,7 @@ end function iterlines(file, raw) table.insert(pkg.inputs.gen, '$dir/'..file) - file = string.format('%s/%s', pkg.dir, file) + file = string.format('%s/%s/%s', basedir, pkg.dir, file) if raw then return io.lines(file) end @@ -153,7 +153,7 @@ end function load(file) table.insert(pkg.inputs.gen, '$dir/'..file) - return dofile(string.format('%s/%s', pkg.dir, file)) + return dofile(string.format('%s/%s/%s', basedir, pkg.dir, file)) end -- @@ -169,7 +169,7 @@ end function subninja(file) if not file:hasprefix('$') then - file = '$dir/'..file + file = '$gendir/'..file end io.write(string.format('subninja %s\n', file)) end @@ -231,11 +231,11 @@ end function toolchain(name) set('cflags', '$'..name..'_cflags') set('ldflags', '$'..name..'_ldflags') - include('toolchain/$'..name..'_toolchain.ninja') + include('$basedir/toolchain/$'..name..'_toolchain.ninja') end function phony(name, inputs) - build('phony', '$dir/'..name, inputs) + build('phony', '$gendir/'..name, inputs) end function cflags(flags) @@ -253,7 +253,7 @@ function compile(rule, src, deps, args) obj = '$outdir/'..obj end if not deps and pkg.deps then - deps = '$dir/deps' + deps = '$gendir/deps' end if deps then src = {src, '||', deps} @@ -314,7 +314,7 @@ function link(out, files, args) end if next(deps) then local rsp = out..'.rsp' - build('awk', rsp, {deps, '|', 'scripts/rsp.awk'}, {expr='-f scripts/rsp.awk'}) + build('awk', rsp, {deps, '|', '$basedir/scripts/rsp.awk'}, {expr='-f $basedir/scripts/rsp.awk'}) objs = {objs, '|', rsp} args.ldlibs = '@'..rsp end @@ -379,9 +379,12 @@ function fetch(method) if method == 'local' then script = '$dir/fetch.sh' else - script = 'scripts/fetch-'..method..'.sh' + script = '$basedir/scripts/fetch-'..method..'.sh' end build('fetch'..method, '$dir/fetch', {'|', '$dir/ver', script}) + if basedir ~= '.' then + build('phony', '$gendir/fetch', '$dir/fetch') + end if next(pkg.inputs.fetch) then build('phony', table.keys(pkg.inputs.fetch), '$dir/fetch') end @@ -424,7 +427,7 @@ function file(path, mode, src) local out = '$builddir/root.hash/'..path mode = tonumber(mode, 8) local perm = string.format('10%04o %s', mode, path) - build('githash', out, {src, '|', 'scripts/hash.sh', '||', '$builddir/root.stamp'}, { + build('githash', out, {src, '|', '$basedir/scripts/hash.sh', '||', '$builddir/root.stamp'}, { args=perm, }) table.insert(pkg.inputs.index, out) @@ -446,7 +449,7 @@ function sym(path, target) return end local out = '$builddir/root.hash/'..path - build('githash', out, {'|', 'scripts/hash.sh', '||', '$builddir/root.stamp'}, { + build('githash', out, {'|', '$basedir/scripts/hash.sh', '||', '$builddir/root.stamp'}, { args=string.format('120000 %s %s', path, target), }) table.insert(pkg.inputs.index, out) diff --git a/pkg/acme-client/gen.lua b/pkg/acme-client/gen.lua @@ -1,10 +1,10 @@ -set('srcdir', 'pkg/openbsd/src/usr.sbin/acme-client') +set('srcdir', '$basedir/pkg/openbsd/src/usr.sbin/acme-client') cflags{ '-D _GNU_SOURCE', -- for memmem - '-I pkg/openbsd/include', + '-I $basedir/pkg/openbsd/include', '-I $builddir/pkg/libressl/include', '-I $srcdir', - '-idirafter pkg/openbsd/src/sys', + '-idirafter $basedir/pkg/openbsd/src/sys', } pkg.deps = { diff --git a/pkg/curl/gen.lua b/pkg/curl/gen.lua @@ -33,7 +33,7 @@ pkg.hdrs = copy('$outdir/include/curl', '$srcdir/include/curl', { }) pkg.deps = { '$outdir/curl_config.h', - '$dir/headers', + '$gendir/headers', 'pkg/bearssl/headers', 'pkg/zlib/headers', } @@ -81,7 +81,7 @@ lib('libcurl.a', [[ ]]) build('cc', '$outdir/tool_hugehelp.c.o', { - '$dir/tool_hugehelp.c', '||', '$dir/deps', '$srcdir/src/tool_hugehelp.h', + '$dir/tool_hugehelp.c', '||', '$gendir/deps', '$srcdir/src/tool_hugehelp.h', }) -- src/src/Makefile.inc:/^CURL_CFILES diff --git a/pkg/e2fsprogs/gen.lua b/pkg/e2fsprogs/gen.lua @@ -71,7 +71,7 @@ pkg.hdrs = { } pkg.deps = { '$outdir/config.h', - '$dir/headers', + '$gendir/headers', '$outdir/internal/blkid/blkid_types.h', '$outdir/internal/support/prof_err.h', '$outdir/internal/crc32c_table.h', diff --git a/pkg/elftoolchain/gen.lua b/pkg/elftoolchain/gen.lua @@ -3,7 +3,7 @@ cflags{ '-I $dir', '-I $srcdir/common', '-I $srcdir/libelf', - '-idirafter pkg/openbsd/src/sys', + '-idirafter $basedir/pkg/openbsd/src/sys', } pkg.hdrs = { diff --git a/pkg/ffmpeg/gen.lua b/pkg/ffmpeg/gen.lua @@ -30,7 +30,7 @@ pkg.hdrs = { } pkg.deps = { '$outdir/config.asm', - '$dir/headers', + '$gendir/headers', 'pkg/alsa-lib/headers', 'pkg/libtls-bearssl/headers', 'pkg/zlib/headers', @@ -177,7 +177,7 @@ lib('libavfilter.a', { 'libavutil.a', }) -cc('libavformat/protocols.c', {'$dir/deps', '$outdir/internal/libavformat/protocol_list.c'}) +cc('libavformat/protocols.c', {'$gendir/deps', '$outdir/internal/libavformat/protocol_list.c'}) lib('libavformat.a', { expand{'libavformat/', { 'allformats.c', @@ -352,7 +352,7 @@ local libs = { 'libswscale.a.d', } -cc('fftools/cmdutils.c', {'$dir/deps'}) +cc('fftools/cmdutils.c', {'$gendir/deps'}) exe('ffprobe', {paths[[fftools/(ffprobe.c cmdutils.c.o)]], libs}) file('bin/ffprobe', '755', '$outdir/ffprobe') diff --git a/pkg/file/gen.lua b/pkg/file/gen.lua @@ -23,7 +23,7 @@ build('sed', '$outdir/file.1', '$srcdir/doc/file.man', { }) pkg.hdrs = {'$outdir/include/magic.h'} -pkg.deps = {'$dir/headers', 'pkg/zlib/headers'} +pkg.deps = {'$gendir/headers', 'pkg/zlib/headers'} lib('libmagic.a', [[src/( buffer.c magic.c apprentice.c softmagic.c ascmagic.c diff --git a/pkg/fribidi/gen.lua b/pkg/fribidi/gen.lua @@ -24,7 +24,7 @@ sub('tools.ninja', function() exe('gen-'..t..'-tab', expand{'gen.tab/', { 'gen-'..t..'-tab.c', 'packtab.c.o', - }}, {'$dir/headers'}) + }}, {'$gendir/headers'}) end end) @@ -79,7 +79,7 @@ pkg.deps = { '$outdir/mirroring.tab.i', '$outdir/brackets.tab.i', '$outdir/brackets-type.tab.i', - '$dir/headers', + '$gendir/headers', } lib('libfribidi.a', [[ diff --git a/pkg/libcbor/gen.lua b/pkg/libcbor/gen.lua @@ -36,7 +36,7 @@ pkg.hdrs = { }), '$outdir/include/cbor/configuration.h', } -pkg.deps = {'$dir/headers'} +pkg.deps = {'$gendir/headers'} lib('libcbor.a', [[ src/cbor.c diff --git a/pkg/libevent/gen.lua b/pkg/libevent/gen.lua @@ -2,7 +2,7 @@ cflags{ '-I $dir', '-I $outdir/include', '-I $srcdir/include', - '-idirafter pkg/openbsd/src/sys', + '-idirafter $basedir/pkg/openbsd/src/sys', } build('sed', '$outdir/include/event2/event-config.h', {'$dir/config.h', '|', '$srcdir/make-event-config.sed'}, { @@ -13,7 +13,7 @@ pkg.hdrs = { '$outdir/include/event2/event-config.h', } pkg.deps = { - '$dir/headers', + '$gendir/headers', 'pkg/openbsd/fetch', } diff --git a/pkg/libffi/gen.lua b/pkg/libffi/gen.lua @@ -23,7 +23,7 @@ pkg.hdrs = { lib('libffi.a', [[src/( prep_cif.c types.c raw_api.c java_raw_api.c closures.c x86/(ffi64.c unix64.S ffiw64.c win64.S) -)]], {'$dir/headers'}) +)]], {'$gendir/headers'}) file('lib/libffi.a', '644', '$outdir/libffi.a') fetch 'git' diff --git a/pkg/libfido2/gen.lua b/pkg/libfido2/gen.lua @@ -6,7 +6,7 @@ cflags{ '-I $builddir/pkg/libcbor/include', '-I $builddir/pkg/libressl/include', '-I $srcdir/src', - '-I pkg/openbsd/include', + '-I $basedir/pkg/openbsd/include', } pkg.hdrs = copy('$outdir/include', '$srcdir/src', { diff --git a/pkg/libjpeg-turbo/gen.lua b/pkg/libjpeg-turbo/gen.lua @@ -9,7 +9,7 @@ build('cat', '$outdir/jconfigint.h', { }) pkg.deps = { - '$dir/headers', + '$gendir/headers', '$outdir/jconfigint.h', } diff --git a/pkg/libnl/gen.lua b/pkg/libnl/gen.lua @@ -53,8 +53,8 @@ lib('libnl-3.a', [[lib/( addr.c attr.c cache.c cache_mngr.c cache_mngt.c data.c error.c handlers.c msg.c nl.c object.c socket.c utils.c version.c hash.c hashtable.c mpls.c -)]], {'$dir/headers'}) +)]], {'$gendir/headers'}) -lib('libnl-genl-3.a', 'lib/genl/(ctrl.c family.c genl.c mngt.c)', {'$dir/headers'}) +lib('libnl-genl-3.a', 'lib/genl/(ctrl.c family.c genl.c mngt.c)', {'$gendir/headers'}) fetch 'git' diff --git a/pkg/mupdf/gen.lua b/pkg/mupdf/gen.lua @@ -71,7 +71,7 @@ exe('bin/mutool', [[ file('bin/mutool', '755', '$outdir/bin/mutool') cc('platform/x11/wl_main.c', { - '$dir/deps', + '$gendir/deps', 'pkg/libxkbcommon/fetch', 'pkg/pixman/headers', 'pkg/wayland/headers', diff --git a/pkg/ncurses/gen.lua b/pkg/ncurses/gen.lua @@ -12,8 +12,8 @@ cflags{'$common_cflags'} sub('tools.ninja', function() toolchain 'host' cflags{'$common_cflags', '-D USE_BUILD_CC'} - exe('make_keys', {'ncurses/tinfo/make_keys.c'}, {'$dir/headers', '$outdir/names.c'}) - exe('make_hash', {'ncurses/tinfo/make_hash.c'}, {'$dir/headers', '$outdir/hashsize.h'}) + exe('make_keys', {'ncurses/tinfo/make_keys.c'}, {'$gendir/headers', '$outdir/names.c'}) + exe('make_hash', {'ncurses/tinfo/make_hash.c'}, {'$gendir/headers', '$outdir/hashsize.h'}) end) build('sed', '$outdir/curses.head', {'$srcdir/include/curses.h.in', '|', '$dir/subst.sed'}, { @@ -93,7 +93,7 @@ pkg.hdrs = { install=true, } pkg.deps = { - '$dir/headers', + '$gendir/headers', '$outdir/hashsize.h', '$outdir/init_keytry.h', '$outdir/ncurses_def.h', diff --git a/pkg/netsurf/gen.lua b/pkg/netsurf/gen.lua @@ -52,7 +52,7 @@ cflags{ pkg.deps = { '$dir/libcss/fetch', '$dir/libdom/fetch', - '$dir/libdom/headers', + '$gendir/libdom/headers', '$dir/libhubbub/fetch', '$dir/libnsbmp/fetch', '$dir/libnsgif/fetch', diff --git a/pkg/nginx/gen.lua b/pkg/nginx/gen.lua @@ -50,7 +50,7 @@ end build('awk', '$outdir/ngx_modules.c', {'$dir/modules.txt', '|', '$dir/modules.awk', '$dir/sources.txt'}, { expr='-f $dir/modules.awk -v sources=$dir/sources.txt' }) -cc('$outdir/ngx_modules.c', {'$dir/deps', '$dir/fetch'}) +cc('$outdir/ngx_modules.c', {'$gendir/deps', '$dir/fetch'}) local sources = paths[[src/( core/( diff --git a/pkg/openntpd/gen.lua b/pkg/openntpd/gen.lua @@ -3,7 +3,7 @@ cflags{ '-include $dir/config.h', '-I $srcdir/src', '-I $srcdir/include', - '-I pkg/openbsd/include', + '-I $basedir/pkg/openbsd/include', '-I $builddir/pkg/libtls-bearssl/include', } diff --git a/pkg/openssh/gen.lua b/pkg/openssh/gen.lua @@ -9,7 +9,7 @@ cflags{ archflags[config.target.toolchain:match('[^-]*')] or '-D SANDBOX_RLIMIT=1', '-I $dir', '-I $srcdir', - '-I pkg/openbsd/include', + '-I $basedir/pkg/openbsd/include', '-I $builddir/pkg/libfido2/include', '-I $builddir/pkg/libressl/include', '-I $builddir/pkg/zlib/include', diff --git a/pkg/pcre/gen.lua b/pkg/pcre/gen.lua @@ -38,6 +38,6 @@ lib('libpcre.a', { 'pcre_version.c', 'pcre_xclass.c', '$outdir/pcre_chartables.c', -}, {'$dir/headers'}) +}, {'$gendir/headers'}) fetch 'curl' diff --git a/pkg/pixman/gen.lua b/pkg/pixman/gen.lua @@ -23,7 +23,7 @@ pkg.hdrs = { '$outdir/include/pixman-version.h', } pkg.deps = { - '$dir/headers', + '$gendir/headers', '$outdir/config.h', } diff --git a/pkg/transmission/gen.lua b/pkg/transmission/gen.lua @@ -6,7 +6,7 @@ sub('libminiupnp.ninja', function() cflags{ '-D _GNU_SOURCE', '-I $outdir/miniupnp', - '-idirafter pkg/openbsd/src/sys', + '-idirafter $basedir/pkg/openbsd/src/sys', } build('sed', '$outdir/miniupnp/miniupnpcstrings.h', '$srcdir/third-party/miniupnp/miniupnpcstrings.h.in', { @@ -43,7 +43,7 @@ cflags{ '-I $srcdir/third-party/libnatpmp', '-I $basedir/pkg/libevent/src/include', '-I $basedir/pkg/libutp/src', - '-idirafter pkg/openbsd/src/sys', + '-idirafter $basedir/pkg/openbsd/src/sys', '-include config.h', } diff --git a/pkg/wayland/gen.lua b/pkg/wayland/gen.lua @@ -36,7 +36,7 @@ pkg.hdrs = { '$outdir/include/wayland-version.h', } pkg.deps = { - '$dir/headers', + '$gendir/headers', '$outdir/include/wayland-version.h', 'pkg/libffi/headers', } diff --git a/probe/gen.lua b/probe/gen.lua @@ -1,5 +1,5 @@ local function probe(var) - build('probe', '$outdir/'..var, {'$dir/'..var, '|', 'scripts/probe.sh'}, {var=var}) + build('probe', '$outdir/'..var, {'$dir/'..var, '|', '$basedir/scripts/probe.sh'}, {var=var}) end probe('HAVE_IMMINTRIN_H') @@ -10,7 +10,7 @@ probe('HAVE___BUILTIN_CTZL') probe('HAVE___BUILTIN_POPCOUNT') local function probesize(var) - build('probesize', '$outdir/'..var, {'$dir/'..var, '|', 'scripts/probe-size.sh'}, {var=var}) + build('probesize', '$outdir/'..var, {'$dir/'..var, '|', '$basedir/scripts/probe-size.sh'}, {var=var}) end probesize('SIZEOF_LONG') diff --git a/rules.ninja b/rules.ninja @@ -1,5 +1,5 @@ rule gen - command = lua5.2 setup.lua $dir + command = lua5.2 $basedir/setup.lua $gendir generator = 1 # toolchain @@ -52,10 +52,10 @@ rule muse command = muse $museflags -o $out $in rule probe - command = sh ./scripts/probe.sh $var $cc $cflags $ldflags -o /dev/null -x c $in >$out + command = sh $basedir/scripts/probe.sh $var $cc $cflags $ldflags -o /dev/null -x c $in >$out rule probesize - command = sh ./scripts/probe-size.sh $var $cc $cflags -c -o /dev/null -x c $in >$out + command = sh $basedir/scripts/probe-size.sh $var $cc $cflags -c -o /dev/null -x c $in >$out # misc tools rule touch @@ -102,16 +102,16 @@ rule waylandproto command = wayland-scanner $type <$in >$out rule githash - command = sh ./scripts/hash.sh $repo $args $in >$out + command = sh $basedir/scripts/hash.sh $repo $args $in >$out description = HASH $args rule gittree - command = sh ./scripts/tree.sh $repo $repo_tag $in $out + command = sh $basedir/scripts/tree.sh $repo $repo_tag $in $out description = TREE $out restat = 1 rule gitcommit - command = sh ./scripts/commit.sh $repo $repo_branch $repo_tag $out + command = sh $basedir/scripts/commit.sh $repo $repo_branch $repo_tag $out rule gitarchive command = git -C $repo archive -o $$PWD/$out $repo_tag @@ -120,22 +120,22 @@ rule gitinit command = git init $repo_flags $repo && touch $out rule fetchcurl - command = sh ./scripts/fetch-curl.sh $dir && touch $out - description = FETCH $dir + command = cd $basedir && sh $basedir/scripts/fetch-curl.sh $gendir && touch $out + description = FETCH $gendir restat = 1 generator = 1 pool = console rule fetchgit - command = sh ./scripts/fetch-git.sh $dir && touch $out - description = FETCH $dir + command = cd $basedir && sh $basedir/scripts/fetch-git.sh $gendir && touch $out + description = FETCH $gendir restat = 1 generator = 1 pool = console rule fetchlocal - command = sh ./$dir/fetch.sh $dir && touch $out - description = FETCH $dir + command = cd $basedir && sh $gendir/fetch.sh $gendir && touch $out + description = FETCH $gendir restat = 1 generator = 1 pool = console diff --git a/setup.lua b/setup.lua @@ -1,18 +1,20 @@ #!/bin/lua +basedir = arg[0]:match('(.*)/') or '.' + if not os.execute('test -f config.lua') then - os.execute('cp config.def.lua config.lua') + os.execute('cp '..basedir..'/config.def.lua config.lua') end -dofile 'ninja.lua' +dofile(basedir..'/ninja.lua') config = dofile 'config.lua' local recurse = not arg[1] function subgen(dir) - local file = '$dir/'..dir..'/local.ninja' + local file = '$gendir/'..dir..'/local.ninja' subninja(file) - table.insert(pkg.inputs.ninja, '$dir/'..dir..'/ninja') + table.insert(pkg.inputs.ninja, '$gendir/'..dir..'/ninja') table.insert(pkg.inputs.index, '$outdir/'..dir..'/root.index') table.insert(pkg.inputs.perms, '$outdir/'..dir..'/root.perms') local cmd = string.format('test -f %s/%s/local.ninja', pkg.dir, dir) @@ -35,29 +37,33 @@ function gen(dir) perms={}, index={}, gen={ - 'setup.lua', - 'ninja.lua', + '$basedir/ninja.lua', + '$basedir/sets.lua', + '$basedir/setup.lua', 'config.lua', - 'sets.lua', }, - ninja={'$dir/local.ninja'}, + ninja={'$gendir/local.ninja'}, fetch={}, }, perms={}, } + if not os.execute('mkdir -p '..dir) then + error('failed to create '..dir) + end local outdir = config.builddir..'/'..dir if not os.execute('mkdir -p '..outdir) then error('failed to create '..outdir) end io.output(dir..'/local.ninja.tmp') - set('dir', dir) + set('gendir', dir) if dir ~= '.' then - set('outdir', '$builddir/$dir') + set('dir', '$basedir/$gendir') + set('outdir', '$builddir/$gendir') set('srcdir', '$dir/src') end load('gen.lua') - build('gen', '$dir/local.ninja', {'|', pkg.inputs.gen}) + build('gen', '$gendir/local.ninja', {'|', pkg.inputs.gen}) phony('ninja', pkg.inputs.ninja) if pkg.hdrs then @@ -97,8 +103,12 @@ function gen(dir) else build('empty', '$outdir/root.index') end + build('phony', '$dir/root', pkg.inputs.root) io.close() os.rename(dir..'/local.ninja.tmp', dir..'/local.ninja') + if dir == '.' then + os.execute('ln -sf local.ninja build.ninja') + end end gen(arg[1] or '.')