commit: f4720910b9b72bd1fe2aaa82cf6a38e226d5e149
parent 564557663b9c36612df603e36e4c7a679e82c51b
Author: Michael Forney <mforney@mforney.org>
Date: Sun, 17 Nov 2019 14:48:05 -0800
Update ninja requirement to 1.8.0 and don't bother with atomic outputs
Since ninja 1.8.0[0] and samurai 0.2[1], output mtime is always
recorded after a job succeeds, and outputs are considered dirty if
the recorded mtime is older than any input. This means that even
if a command partially writes its output then fails (for example,
if run with stdout redirected to a file), it will still get re-run
during the next build.
This means that outputs no longer have to be written atomically
(i.e. renamed into place) in order to ensure a correct build, and
we can drop the idiom `command >$out.tmp && mv $out.tmp $out`.
[0] https://github.com/ninja-build/ninja/commit/04d886b11041bb59d01df794cce7a1e8cad2250d
[1] https://github.com/michaelforney/samurai/commit/799bc5a4719b90a1026c129b55b92c0bccf97eeb
Diffstat:
20 files changed, 42 insertions(+), 42 deletions(-)
diff --git a/gen.lua b/gen.lua
@@ -1,4 +1,4 @@
-set('ninja_required_version', '1.7')
+set('ninja_required_version', '1.8')
set('builddir', config.builddir)
set('outdir', '$builddir')
diff --git a/pkg/awk/gen.lua b/pkg/awk/gen.lua
@@ -16,7 +16,7 @@ sub('tools.ninja', function()
exe('maketab', {'maketab.c'})
end)
-rule('maketab', '$outdir/maketab $in >$out.tmp && mv $out.tmp $out')
+rule('maketab', '$outdir/maketab $in >$out')
build('maketab', '$outdir/proctab.c', {'$outdir/ytab.h', '|', '$outdir/maketab'})
exe('awk', [[
diff --git a/pkg/bc/gen.lua b/pkg/bc/gen.lua
@@ -8,7 +8,7 @@ cflags{
sub('tools.ninja', function()
exe('strgen', {'gen/strgen.c'})
- rule('strgen', [[$outdir/strgen $in $out.tmp $name $header '$label' '$define' $removetabs && mv $out.tmp $out]])
+ rule('strgen', [[$outdir/strgen $in $out $name $header '$label' '$define' $removetabs]])
build('strgen', '$outdir/bc_help.c', {'$srcdir/gen/bc_help.txt', '|', '$outdir/strgen'}, {
name='bc_help', header='bc.h', label='', define='BC_ENABLED', removetabs='',
})
diff --git a/pkg/e2fsprogs/gen.lua b/pkg/e2fsprogs/gen.lua
@@ -61,7 +61,7 @@ sub('tools.ninja', function()
toolchain 'host'
exe('gen_crc32ctable', {'lib/ext2fs/gen_crc32ctable.c'})
end)
-rule('gen_crc32ctable', '$outdir/gen_crc32ctable >$out.tmp && mv $out.tmp $out')
+rule('gen_crc32ctable', '$outdir/gen_crc32ctable >$out')
build('gen_crc32ctable', '$outdir/internal/crc32c_table.h', {'|', '$outdir/gen_crc32ctable'})
pkg.hdrs = {
diff --git a/pkg/elftoolchain/gen.lua b/pkg/elftoolchain/gen.lua
@@ -12,7 +12,7 @@ pkg.hdrs = {
install=true,
}
-rule('m4', 'm4 -D SRCDIR=$srcdir/libelf $in >$out.tmp && mv $out.tmp $out')
+rule('m4', 'm4 -D SRCDIR=$srcdir/libelf $in >$out')
build('m4', '$outdir/libelf_convert.c', {'$srcdir/libelf/libelf_convert.m4', '|', '$srcdir/libelf/elf_types.m4'})
build('m4', '$outdir/libelf_fsize.c', {'$srcdir/libelf/libelf_fsize.m4', '|', '$srcdir/libelf/elf_types.m4'})
build('m4', '$outdir/libelf_msize.c', {'$srcdir/libelf/libelf_msize.m4', '|', '$srcdir/libelf/elf_types.m4'})
diff --git a/pkg/ffmpeg/gen.lua b/pkg/ffmpeg/gen.lua
@@ -46,7 +46,7 @@ build('awk', '$outdir/include/libavutil/avconfig.h', {'$dir/options.h', '|', '$d
expr='-f $dir/avconfig.awk',
})
-rule('genlist', 'lua5.2 $dir/list.lua $dir/options.h $type $var <$in >$out.tmp && mv $out.tmp $out')
+rule('genlist', 'lua5.2 $dir/list.lua $dir/options.h $type $var <$in >$out')
local function genlist(out, src, type, var)
build('genlist', out, {src, '|', '$dir/list.lua', '$dir/options.h'}, {type=type, var=var})
table.insert(pkg.deps, out)
@@ -360,7 +360,7 @@ file('bin/ffprobe', '755', '$outdir/ffprobe')
exe('ffmpeg', {paths[[fftools/(ffmpeg.c ffmpeg_opt.c ffmpeg_filter.c ffmpeg_hw.c cmdutils.c.o)]], libs})
file('bin/ffmpeg', '755', '$outdir/ffmpeg')
-rule('texi2mdoc', [[texi2mdoc -d 'November 7, 2018' -I $outdir $in >$out.tmp && mv $out.tmp $out]])
+rule('texi2mdoc', [[texi2mdoc -d 'November 7, 2018' -I $outdir $in >$out]])
build('texi2mdoc', '$outdir/ffprobe.1', {'$srcdir/doc/ffprobe.texi', '|', '$outdir/config.texi'})
build('texi2mdoc', '$outdir/ffmpeg.1', {'$srcdir/doc/ffmpeg.texi', '|', '$outdir/config.texi'})
man{'$outdir/ffprobe.1', '$outdir/ffmpeg.1'}
diff --git a/pkg/fribidi/gen.lua b/pkg/fribidi/gen.lua
@@ -30,7 +30,7 @@ end)
set('compression', '2')
-rule('gentool', '$outdir/$tool $args $in >$out.tmp && mv $out.tmp $out')
+rule('gentool', '$outdir/$tool $args $in >$out')
local function gentool(tool, out, srcs, args)
build('gentool', '$outdir/'..out, {expand{'$srcdir/gen.tab/unidata/', srcs}, '|', '$outdir/gen-'..tool}, {
tool='gen-'..tool,
diff --git a/pkg/git/gen.lua b/pkg/git/gen.lua
@@ -7,7 +7,7 @@ cflags{
'-I $builddir/pkg/zlib/include',
}
-rule('cmdlist', 'wd=$$PWD && cd $srcdir && ./generate-cmdlist.sh $$wd/$in >$$wd/$out.tmp && mv $$wd/$out.tmp $$wd/$out')
+rule('cmdlist', 'wd=$$PWD && cd $srcdir && ./generate-cmdlist.sh $$wd/$in >$$wd/$out')
build('cmdlist', '$outdir/command-list.h', {
'$srcdir/command-list.txt', '|', expand{'$srcdir/Documentation/', lines('commands.txt')},
})
@@ -438,7 +438,7 @@ local scripts = {
{'sh-i18n', '644'},
}
-rule('sh_gen', 'sed -f $dir/sh_gen.sed $in >$out.tmp && mv $out.tmp $out')
+rule('sh_gen', 'sed -f $dir/sh_gen.sed $in >$out')
for _, script in ipairs(scripts) do
local name, mode = table.unpack(script)
build('sh_gen', '$outdir/git-'..name, {'$srcdir/git-'..name..'.sh', '|', '$dir/sh_gen.sed'})
diff --git a/pkg/mpv/gen.lua b/pkg/mpv/gen.lua
@@ -39,7 +39,7 @@ build('copy', '$outdir/video/out/wayland/presentation-time.h', '$builddir/pkg/wa
build('copy', '$outdir/video/out/wayland/xdg-decoration-v1.h', '$builddir/pkg/wayland-protocols/include/xdg-decoration-unstable-v1-client-protocol.h')
build('copy', '$outdir/video/out/wayland/xdg-shell.h', '$builddir/pkg/wayland-protocols/include/xdg-shell-client-protocol.h')
-rule('file2string', '$outdir/file2string $in >$out.tmp && mv $out.tmp $out')
+rule('file2string', '$outdir/file2string $in >$out')
local function file2string(out, inp)
build('file2string', '$outdir/'..out, {'$srcdir/'..inp, '|', '$outdir/file2string'})
table.insert(pkg.deps, '$outdir/'..out)
diff --git a/pkg/mupdf/gen.lua b/pkg/mupdf/gen.lua
@@ -29,7 +29,7 @@ sub('tools.ninja', function()
exe('hexdump', {'scripts/hexdump.c'})
end)
-rule('hexdump', '$outdir/hexdump -s $out.tmp $in && mv $out.tmp $out')
+rule('hexdump', '$outdir/hexdump -s $out $in')
local fonts = lines('fonts.txt')
for _, font in ipairs(fonts) do
build('hexdump', '$outdir/'..font..'.c', {'$srcdir/resources/fonts/'..font, '|', '$outdir/hexdump'})
diff --git a/pkg/ncurses/gen.lua b/pkg/ncurses/gen.lua
@@ -19,7 +19,7 @@ end)
build('sed', '$outdir/curses.head', {'$srcdir/include/curses.h.in', '|', '$dir/subst.sed'}, {
expr='-f $dir/subst.sed',
})
-rule('mkkeydefs', '{ cat $outdir/curses.head && sh $srcdir/include/MKkey_defs.sh $in && cat $srcdir/include/curses.wide $srcdir/include/curses.tail; } >$out.tmp && mv $out.tmp $out')
+rule('mkkeydefs', '{ cat $outdir/curses.head && sh $srcdir/include/MKkey_defs.sh $in && cat $srcdir/include/curses.wide $srcdir/include/curses.tail; } >$out')
build('mkkeydefs', '$outdir/include/curses.h', {'$srcdir/include/Caps', '|',
'$outdir/curses.head',
'$srcdir/include/curses.wide',
@@ -27,19 +27,19 @@ build('mkkeydefs', '$outdir/include/curses.h', {'$srcdir/include/Caps', '|',
'$srcdir/include/MKkey_defs.sh',
})
-rule('mkhashsize', 'sh $srcdir/include/MKhashsize.sh $in >$out.tmp && mv $out.tmp $out')
+rule('mkhashsize', 'sh $srcdir/include/MKhashsize.sh $in >$out')
build('mkhashsize', '$outdir/hashsize.h', {'$srcdir/include/Caps', '|', '$srcdir/include/MKhashsize.sh'})
-rule('mkkeyslist', 'sh $srcdir/ncurses/tinfo/MKkeys_list.sh $in | LC_ALL=C sort >$out.tmp && mv $out.tmp $out')
+rule('mkkeyslist', 'sh $srcdir/ncurses/tinfo/MKkeys_list.sh $in | LC_ALL=C sort >$out')
build('mkkeyslist', '$outdir/keys.list', {'$srcdir/include/Caps', '|', '$srcdir/ncurses/tinfo/MKkeys_list.sh'})
-rule('mkkeys', '$outdir/make_keys $in >$out.tmp && mv $out.tmp $out')
+rule('mkkeys', '$outdir/make_keys $in >$out')
build('mkkeys', '$outdir/init_keytry.h', {'$outdir/keys.list', '|', '$outdir/make_keys'})
-rule('mkdefs', 'sh $srcdir/include/MKncurses_def.sh $in >$out.tmp && mv $out.tmp $out')
+rule('mkdefs', 'sh $srcdir/include/MKncurses_def.sh $in >$out')
build('mkdefs', '$outdir/ncurses_def.h', {'$srcdir/include/ncurses_defs', '|', '$srcdir/include/MKncurses_def.sh'})
-rule('mkparam', '$srcdir/include/MKparametrized.sh $in >$out.tmp && mv $out.tmp $out')
+rule('mkparam', '$srcdir/include/MKparametrized.sh $in >$out')
build('mkparam', '$outdir/parametrized.h', {'$srcdir/include/Caps', '|', '$srcdir/include/MKparametrized.sh'})
build('sed', '$outdir/MKterm.h.awk', {'$srcdir/include/MKterm.h.awk.in', '|', '$dir/subst.sed'}, {
@@ -52,21 +52,21 @@ for _, f in ipairs{'ncurses_dll.h', 'termcap.h', 'unctrl.h'} do
})
end
-rule('mkterm', 'awk -f $outdir/MKterm.h.awk $in >$out.tmp && mv $out.tmp $out')
+rule('mkterm', 'awk -f $outdir/MKterm.h.awk $in >$out')
build('mkterm', '$outdir/include/term.h', {'$srcdir/include/Caps', '|', '$outdir/MKterm.h.awk'})
build('awk', '$outdir/codes.c', {'$srcdir/include/Caps', '|', '$srcdir/ncurses/tinfo/MKcodes.awk'}, {
expr='-f $srcdir/ncurses/tinfo/MKcodes.awk bigstrings=1',
})
-rule('mkcaptab', '(cd $outdir && $$OLDPWD/$srcdir/ncurses/tinfo/MKcaptab.sh awk 1 $$OLDPWD/$srcdir/ncurses/tinfo/MKcaptab.awk $$OLDPWD/$in) >$out.tmp && mv $out.tmp $out')
+rule('mkcaptab', '(cd $outdir && $$OLDPWD/$srcdir/ncurses/tinfo/MKcaptab.sh awk 1 $$OLDPWD/$srcdir/ncurses/tinfo/MKcaptab.awk $$OLDPWD/$in) >$out')
build('mkcaptab', '$outdir/comp_captab.c', {'$srcdir/include/Caps', '|',
'$outdir/make_hash',
'$srcdir/tinfo/MKcaptab.awk',
'$srcdir/tinfo/MKcaptab.sh',
})
-rule('mkfallback', 'sh $srcdir/ncurses/tinfo/MKfallback.sh /dev/null /dev/null /dev/null >$out.tmp && mv $out.tmp $out')
+rule('mkfallback', 'sh $srcdir/ncurses/tinfo/MKfallback.sh /dev/null /dev/null /dev/null >$out')
build('mkfallback', '$outdir/fallback.c', {'|', '$srcdir/ncurses/tinfo/MKfallback.sh'})
build('awk', '$outdir/lib_keyname.c', '$outdir/keys.list', {
@@ -77,7 +77,7 @@ build('awk', '$outdir/names.c', {'$srcdir/include/Caps', '|', '$srcdir/ncurses/t
expr='-f $srcdir/ncurses/tinfo/MKnames.awk bigstrings=1',
})
-rule('mktermsort', 'sh $srcdir/progs/MKtermsort.sh awk $in >$out.tmp && mv $out.tmp $out')
+rule('mktermsort', 'sh $srcdir/progs/MKtermsort.sh awk $in >$out')
build('mktermsort', '$outdir/termsort.c', {'$srcdir/include/Caps', '|', '$srcdir/progs/MKtermsort.sh'})
build('awk', '$outdir/unctrl.c', {'/dev/null', '|', '$srcdir/ncurses/base/MKunctrl.awk'}, {
diff --git a/pkg/perp/gen.lua b/pkg/perp/gen.lua
@@ -10,13 +10,13 @@ sub('tools.ninja', function()
exe('mksysstr', {'lasagna/sysstr/mksysstr.c'})
end)
-rule('outvec', '$outdir/mk_outvec >$out.tmp && mv $out.tmp $out')
+rule('outvec', '$outdir/mk_outvec >$out')
build('outvec', '$outdir/outvec_STDOUT.h', {'|', '$outdir/mk_outvec'})
-rule('rlimit', '$outdir/mk_rlimit >$out.tmp && mv $out.tmp $out')
+rule('rlimit', '$outdir/mk_rlimit >$out')
build('rlimit', '$outdir/rlimit_defs.c.in', {'|', '$outdir/mk_rlimit'})
-rule('sysstr', '$outdir/mksysstr $type >$out.tmp && mv $out.tmp $out')
+rule('sysstr', '$outdir/mksysstr $type >$out')
build('sysstr', '$outdir/sysstr_errno.c.in', {'|', '$outdir/mksysstr'}, {type='errno'})
build('sysstr', '$outdir/sysstr_signo.c.in', {'|', '$outdir/mksysstr'}, {type='signo'})
diff --git a/pkg/python/gen.lua b/pkg/python/gen.lua
@@ -51,7 +51,7 @@ sources = table.keys(sources)
cflags{'-D Py_BUILD_CORE'}
-rule('makesetup', 'lua5.2 $dir/makesetup.lua $dir/modules.lua <$in >$out.tmp && mv $out.tmp $out')
+rule('makesetup', 'lua5.2 $dir/makesetup.lua $dir/modules.lua <$in >$out')
build('makesetup', '$outdir/config.c', {'$srcdir/Modules/config.c.in', '|', '$dir/makesetup.lua', '$dir/modules.lua'})
cc('Modules/getbuildinfo.c', nil, {
diff --git a/pkg/sbase/gen.lua b/pkg/sbase/gen.lua
@@ -67,7 +67,7 @@ lib('libutf.a', [[libutf/(
utftorunestr.c
)]])
-rule('getconf', '$srcdir/getconf.sh >$out.tmp && mv $out.tmp $out')
+rule('getconf', '$srcdir/getconf.sh >$out')
build('getconf', '$outdir/getconf.h', {'|', '$srcdir/getconf.sh'})
local cmds = {
diff --git a/pkg/strace/gen.lua b/pkg/strace/gen.lua
@@ -36,7 +36,7 @@ sub('tools.ninja', function()
'|', '$outdir/ioctl_iocdef.h', '$outdir/ioctls_all'..i..'.h',
}, {cflags=string.format([[$cflags -D 'IOCTLSORT_INC="ioctls_all%d.h"']], i)})
exe('ioctlsort'..i, {'ioctlsort'..i..'.c.o'})
- rule('ioctlsort'..i, '$outdir/ioctlsort'..i..' >$out.tmp && mv $out.tmp $out')
+ rule('ioctlsort'..i, '$outdir/ioctlsort'..i..' >$out')
build('ioctlsort'..i, '$outdir/ioctlent'..i..'.h', {'|', '$outdir/ioctlsort'..i})
end
end)
diff --git a/pkg/swc/gen.lua b/pkg/swc/gen.lua
@@ -39,7 +39,7 @@ sub('tools.ninja', function()
exe('convert_font', {'cursor/convert_font.c'})
end)
-rule('convert_font', '$outdir/convert_font $in $out.tmp 2>/dev/null && mv $out.tmp $out')
+rule('convert_font', '$outdir/convert_font $in $out 2>/dev/null')
build('convert_font', '$outdir/cursor/cursor_data.h', {'$srcdir/cursor/cursor.pcf', '|', '$outdir/convert_font'})
pkg.deps = {
diff --git a/pkg/syslinux/gen.lua b/pkg/syslinux/gen.lua
@@ -20,7 +20,7 @@ sub('tools.ninja', function()
exe('bin2c', {'bin2c.c'})
end)
-rule('bin2c', '$outdir/bin2c $args <$in >$out.tmp && mv $out.tmp $out')
+rule('bin2c', '$outdir/bin2c $args <$in >$out')
function bin2c(bin, args)
local name = args[1]
build('bin2c', '$outdir/'..name..'.c', {
diff --git a/pkg/xkeyboard-config/gen.lua b/pkg/xkeyboard-config/gen.lua
@@ -117,7 +117,7 @@ for f in iterpaths(data) do
file('share/xkb/'..f, '644', '$srcdir/'..f)
end
-rule('merge', 'HDR=$srcdir/rules/HDR ./$srcdir/rules/merge.sh $out.tmp $in && mv $out.tmp $out')
+rule('merge', 'HDR=$srcdir/rules/HDR ./$srcdir/rules/merge.sh $out $in')
function merge(out, srcs)
build('merge', '$outdir/'..out, {
expand{'$srcdir/rules/', paths(srcs)},
diff --git a/rules.ninja b/rules.ninja
@@ -47,10 +47,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.tmp && mv $out.tmp $out
+ command = sh ./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.tmp && mv $out.tmp $out
+ command = sh ./scripts/probe-size.sh $var $cc $cflags -c -o /dev/null -x c $in >$out
# misc tools
rule touch
@@ -63,34 +63,34 @@ rule copy
command = ln -f $in $out
rule cat
- command = cat $in >$out.tmp && mv $out.tmp $out
+ command = cat $in >$out
rule mergeperms
- command = sort -k 2 -m $in >$out.tmp && mv $out.tmp $out
+ command = sort -k 2 -m $in >$out
rule gzip
- command = gzip -c -9 -n <$in >$out.tmp && mv $out.tmp $out
+ command = gzip -c -9 -n <$in >$out
rule yacc
command = yacc $yaccflags $in
rule sed
- command = sed $expr $in >$out.tmp && mv $out.tmp $out
+ command = sed $expr $in >$out
rule awk
- command = awk $expr $in >$out.tmp && mv $out.tmp $out
+ command = awk $expr $in >$out
rule grep
- command = grep $expr $in >$out.tmp && mv $out.tmp $out
+ command = grep $expr $in >$out
rule tic
command = tic $ticflags $in
rule waylandproto
- command = wayland-scanner $type <$in >$out.tmp && mv $out.tmp $out
+ command = wayland-scanner $type <$in >$out
rule githash
- command = sh ./scripts/hash.sh $repo $args $in >$out.tmp && mv $out.tmp $out
+ command = sh ./scripts/hash.sh $repo $args $in >$out
rule gittree
command = sh ./scripts/tree.sh $repo $repo_tag $in $out
diff --git a/scripts/commit.sh b/scripts/commit.sh
@@ -21,4 +21,4 @@ if [ -z "${commit+set}" ] ; then
commit=$(git -C "$repo" commit-tree -m "oasis $(git rev-parse --short=10 HEAD)" "$@" "$tag")
git -C "$repo" update-ref "refs/heads/$branch" "$commit"
fi
-echo "$commit" >"$out.tmp" && mv "$out.tmp" "$out"
+echo "$commit" >"$out"